aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_drv.h
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2009-08-17 16:31:43 -0400
committerEric Anholt <eric@anholt.net>2009-09-04 16:05:38 -0400
commit652c393a3368af84359da37c45afc35a91144960 (patch)
tree35f76866301f0ee61819d6265068ca548d119c0e /drivers/gpu/drm/i915/intel_drv.h
parent043029655816ed4cfc2ed247020ef97e5d637392 (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.h4
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);
137extern bool intel_sdvo_init(struct drm_device *dev, int output_device); 140extern bool intel_sdvo_init(struct drm_device *dev, int output_device);
138extern void intel_dvo_init(struct drm_device *dev); 141extern void intel_dvo_init(struct drm_device *dev);
139extern void intel_tv_init(struct drm_device *dev); 142extern void intel_tv_init(struct drm_device *dev);
143extern void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj);
140extern void intel_lvds_init(struct drm_device *dev); 144extern void intel_lvds_init(struct drm_device *dev);
141extern void intel_dp_init(struct drm_device *dev, int dp_reg); 145extern void intel_dp_init(struct drm_device *dev, int dp_reg);
142void 146void