aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2013-08-06 17:57:16 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-23 08:52:28 -0400
commit333a820416ccb0e24974b6ebe7d447c0c28c7b76 (patch)
tree01b1d97d806e61d766f70db274716754a27d1ed9
parent605cd25b1ffa09a2f86b5c4bd120086dd5ea10a7 (diff)
drm/i915: don't disable/reenable IVB error interrupts when not needed
If the error interrupts are already disabled, don't disable and reenable them. This is going to be needed when we're in PC8+, where all the interrupts are disabled so we won't risk re-enabling DE_ERR_INT_IVB. v2: Use dev_priv->irq_mask (Chris) Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 8872e1955c45..976113af1859 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1373,6 +1373,7 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
1373 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 1373 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1374 u32 de_iir, gt_iir, de_ier, sde_ier = 0; 1374 u32 de_iir, gt_iir, de_ier, sde_ier = 0;
1375 irqreturn_t ret = IRQ_NONE; 1375 irqreturn_t ret = IRQ_NONE;
1376 bool err_int_reenable = false;
1376 1377
1377 atomic_inc(&dev_priv->irq_received); 1378 atomic_inc(&dev_priv->irq_received);
1378 1379
@@ -1401,7 +1402,9 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
1401 * handler. */ 1402 * handler. */
1402 if (IS_HASWELL(dev)) { 1403 if (IS_HASWELL(dev)) {
1403 spin_lock(&dev_priv->irq_lock); 1404 spin_lock(&dev_priv->irq_lock);
1404 ironlake_disable_display_irq(dev_priv, DE_ERR_INT_IVB); 1405 err_int_reenable = ~dev_priv->irq_mask & DE_ERR_INT_IVB;
1406 if (err_int_reenable)
1407 ironlake_disable_display_irq(dev_priv, DE_ERR_INT_IVB);
1405 spin_unlock(&dev_priv->irq_lock); 1408 spin_unlock(&dev_priv->irq_lock);
1406 } 1409 }
1407 1410
@@ -1437,7 +1440,7 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
1437 } 1440 }
1438 } 1441 }
1439 1442
1440 if (IS_HASWELL(dev)) { 1443 if (err_int_reenable) {
1441 spin_lock(&dev_priv->irq_lock); 1444 spin_lock(&dev_priv->irq_lock);
1442 if (ivb_can_enable_err_int(dev)) 1445 if (ivb_can_enable_err_int(dev))
1443 ironlake_enable_display_irq(dev_priv, DE_ERR_INT_IVB); 1446 ironlake_enable_display_irq(dev_priv, DE_ERR_INT_IVB);