diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-08-17 16:31:43 -0400 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-09-04 16:05:38 -0400 |
commit | 652c393a3368af84359da37c45afc35a91144960 (patch) | |
tree | 35f76866301f0ee61819d6265068ca548d119c0e /drivers/gpu/drm/i915/intel_drv.h | |
parent | 043029655816ed4cfc2ed247020ef97e5d637392 (diff) |
drm/i915: add dynamic clock frequency control
There are several sources of unnecessary power consumption on Intel
graphics systems. The first is the LVDS clock. TFTs don't suffer from
persistence issues like CRTs, and so we can reduce the LVDS refresh rate
when the screen is idle. It will be automatically upclocked when
userspace triggers graphical activity. Beyond that, we can enable memory
self refresh. This allows the memory to go into a lower power state when
the graphics are idle. Finally, we can drop some clocks on the gpu
itself. All of these things can be reenabled between frames when GPU
activity is triggered, and so there should be no user visible graphical
changes.
Signed-off-by: Jesse Barnes <jesse.barnes@intel.com>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_drv.h')
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 25aa6facc12d..495dc955d045 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -119,6 +119,9 @@ struct intel_crtc { | |||
119 | struct intel_framebuffer *fbdev_fb; | 119 | struct intel_framebuffer *fbdev_fb; |
120 | /* a mode_set for fbdev users on this crtc */ | 120 | /* a mode_set for fbdev users on this crtc */ |
121 | struct drm_mode_set mode_set; | 121 | struct drm_mode_set mode_set; |
122 | bool busy; /* is scanout buffer being updated frequently? */ | ||
123 | struct timer_list idle_timer; | ||
124 | bool lowfreq_avail; | ||
122 | }; | 125 | }; |
123 | 126 | ||
124 | #define to_intel_crtc(x) container_of(x, struct intel_crtc, base) | 127 | #define to_intel_crtc(x) container_of(x, struct intel_crtc, base) |
@@ -137,6 +140,7 @@ extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg); | |||
137 | extern bool intel_sdvo_init(struct drm_device *dev, int output_device); | 140 | extern bool intel_sdvo_init(struct drm_device *dev, int output_device); |
138 | extern void intel_dvo_init(struct drm_device *dev); | 141 | extern void intel_dvo_init(struct drm_device *dev); |
139 | extern void intel_tv_init(struct drm_device *dev); | 142 | extern void intel_tv_init(struct drm_device *dev); |
143 | extern void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj); | ||
140 | extern void intel_lvds_init(struct drm_device *dev); | 144 | extern void intel_lvds_init(struct drm_device *dev); |
141 | extern void intel_dp_init(struct drm_device *dev, int dp_reg); | 145 | extern void intel_dp_init(struct drm_device *dev, int dp_reg); |
142 | void | 146 | void |