diff options
author | Deepak S <deepak.s@intel.com> | 2013-11-23 04:25:43 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-11-28 02:31:45 -0500 |
commit | 940aece471bd6656b86f5d77132b6670a3b88dc8 (patch) | |
tree | 479111c25b0c7826256450875a028324eb6239df /drivers/gpu/drm/i915/intel_pm.c | |
parent | c8d9a5905e45d856fb21cce2e20f186ce6719560 (diff) |
drm/i915/vlv: Valleyview support for forcewake Individual power wells.
Split vlv force wake routines to help individually control Media/Render
well based on the register access.
We've seen power savings in the lower sub-1W range on workloads that
only need on of the power wells, e.g. glbenchmark, media playback
Note: The same split isn't there for the forcewake queue, only the
forcwake domains are split.
Signed-off-by: Deepak S <deepak.s@intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
[danvet: Rebase on top of the removed forcewake hack in the ring irq
get/put code and add a note to add Deepak's answer to Chris question.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index fd2537d429f2..1659265a7f7a 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -191,7 +191,10 @@ static void sandybridge_blit_fbc_update(struct drm_device *dev) | |||
191 | u32 blt_ecoskpd; | 191 | u32 blt_ecoskpd; |
192 | 192 | ||
193 | /* Make sure blitter notifies FBC of writes */ | 193 | /* Make sure blitter notifies FBC of writes */ |
194 | gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL); | 194 | |
195 | /* Blitter is part of Media powerwell on VLV. No impact of | ||
196 | * his param in other platforms for now */ | ||
197 | gen6_gt_force_wake_get(dev_priv, FORCEWAKE_MEDIA); | ||
195 | 198 | ||
196 | blt_ecoskpd = I915_READ(GEN6_BLITTER_ECOSKPD); | 199 | blt_ecoskpd = I915_READ(GEN6_BLITTER_ECOSKPD); |
197 | blt_ecoskpd |= GEN6_BLITTER_FBC_NOTIFY << | 200 | blt_ecoskpd |= GEN6_BLITTER_FBC_NOTIFY << |
@@ -204,7 +207,7 @@ static void sandybridge_blit_fbc_update(struct drm_device *dev) | |||
204 | I915_WRITE(GEN6_BLITTER_ECOSKPD, blt_ecoskpd); | 207 | I915_WRITE(GEN6_BLITTER_ECOSKPD, blt_ecoskpd); |
205 | POSTING_READ(GEN6_BLITTER_ECOSKPD); | 208 | POSTING_READ(GEN6_BLITTER_ECOSKPD); |
206 | 209 | ||
207 | gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL); | 210 | gen6_gt_force_wake_put(dev_priv, FORCEWAKE_MEDIA); |
208 | } | 211 | } |
209 | 212 | ||
210 | static void ironlake_enable_fbc(struct drm_crtc *crtc, unsigned long interval) | 213 | static void ironlake_enable_fbc(struct drm_crtc *crtc, unsigned long interval) |