summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinit Azad <vinit.azad@intel.com>2013-08-14 13:34:33 -0700
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-22 13:31:48 +0200
commitfd547d25a8ac3f390fee4a689de86a64e3d65fe1 (patch)
tree02e3fc9d93273a253a1bf64dec1df8f69da57886
parent6aedd1f539f51b7b0c3d6be0088c3541f9d2c294 (diff)
downloadop-kernel-dev-fd547d25a8ac3f390fee4a689de86a64e3d65fe1.zip
op-kernel-dev-fd547d25a8ac3f390fee4a689de86a64e3d65fe1.tar.gz
drm/i915: Only unmask required PM interrupts
Un-masking all PM interrupts causes hardware to generate interrupts regardless of whether the interrupts are enabled on the DE side. Since turbo only need up/down threshold and rc6 timeout interrupt, mask all other interrupts bits to avoid unnecessary overhead/wake up. Note that our interrupt handler isn't being fired since we do set the IER bits properly (IIR bits aren't set). The overhead isn't because our driver is reacting to these interrupts, but because hardware keeps generating internal messages when PMINTRMSK doesn't mask out the up/down EI interrupts (which happen periodically). Change-Id: I6c947df6fd5f60584d39b9e8b8c89faa51a5e827 Signed-off-by: Vinit Azad <vinit.azad@intel.com> [danvet: Add follow-up explanation of the precise effects from Vinit as a note to the commit message.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 0d90064..7bc3f17 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3453,8 +3453,8 @@ static void gen6_enable_rps_interrupts(struct drm_device *dev)
I915_WRITE(GEN6_PMIMR, I915_READ(GEN6_PMIMR) & ~GEN6_PM_RPS_EVENTS);
I915_WRITE(GEN6_PMIIR, GEN6_PM_RPS_EVENTS);
spin_unlock_irq(&dev_priv->irq_lock);
- /* unmask all PM interrupts */
- I915_WRITE(GEN6_PMINTRMSK, 0);
+ /* only unmask PM interrupts we need. Mask all others. */
+ I915_WRITE(GEN6_PMINTRMSK, ~GEN6_PM_RPS_EVENTS);
}
static void gen6_enable_rps(struct drm_device *dev)
OpenPOWER on IntegriCloud