Commit 9918271e authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915: Skip display irq setup if display irqs aren't flagged as enabled

During runtime PM we'll be reinitializing interrupt support from the
ground up. However since the display power well will be off at that
time, well end up with a ton of unclaimed register accesses from the
display irq setup. Since we turned off the power well already before
runtime suspend, we've flagged display irqs as disabled during runtime
PM transitions. So we can just check that flag to see if we should do
skip display irqs during irq setup.

During driver load display irqs will be flagged as enabled since we've
turned on the power well already, however the power well code will have
skipped the display irq setup since irq support as a whole wasn't yet
enabled when the power well was enabled. So we'll want to do the display
irq setup in that case.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94164Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1460382992-28728-4-git-send-email-ville.syrjala@linux.intel.comReviewed-by: default avatarImre Deak <imre.deak@intel.com>
parent ad22d106
...@@ -3329,7 +3329,8 @@ static void valleyview_irq_preinstall(struct drm_device *dev) ...@@ -3329,7 +3329,8 @@ static void valleyview_irq_preinstall(struct drm_device *dev)
I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK); I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK);
spin_lock_irq(&dev_priv->irq_lock); spin_lock_irq(&dev_priv->irq_lock);
vlv_display_irq_reset(dev_priv); if (dev_priv->display_irqs_enabled)
vlv_display_irq_reset(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
} }
...@@ -3406,7 +3407,8 @@ static void cherryview_irq_preinstall(struct drm_device *dev) ...@@ -3406,7 +3407,8 @@ static void cherryview_irq_preinstall(struct drm_device *dev)
I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK_CHV); I915_WRITE(DPINVGTT, DPINVGTT_STATUS_MASK_CHV);
spin_lock_irq(&dev_priv->irq_lock); spin_lock_irq(&dev_priv->irq_lock);
vlv_display_irq_reset(dev_priv); if (dev_priv->display_irqs_enabled)
vlv_display_irq_reset(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
} }
...@@ -3728,7 +3730,8 @@ static int valleyview_irq_postinstall(struct drm_device *dev) ...@@ -3728,7 +3730,8 @@ static int valleyview_irq_postinstall(struct drm_device *dev)
#endif #endif
spin_lock_irq(&dev_priv->irq_lock); spin_lock_irq(&dev_priv->irq_lock);
vlv_display_irq_postinstall(dev_priv); if (dev_priv->display_irqs_enabled)
vlv_display_irq_postinstall(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
I915_WRITE(VLV_MASTER_IER, MASTER_INTERRUPT_ENABLE); I915_WRITE(VLV_MASTER_IER, MASTER_INTERRUPT_ENABLE);
...@@ -3834,7 +3837,8 @@ static int cherryview_irq_postinstall(struct drm_device *dev) ...@@ -3834,7 +3837,8 @@ static int cherryview_irq_postinstall(struct drm_device *dev)
gen8_gt_irq_postinstall(dev_priv); gen8_gt_irq_postinstall(dev_priv);
spin_lock_irq(&dev_priv->irq_lock); spin_lock_irq(&dev_priv->irq_lock);
vlv_display_irq_postinstall(dev_priv); if (dev_priv->display_irqs_enabled)
vlv_display_irq_postinstall(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
I915_WRITE(GEN8_MASTER_IRQ, MASTER_INTERRUPT_ENABLE); I915_WRITE(GEN8_MASTER_IRQ, MASTER_INTERRUPT_ENABLE);
...@@ -3867,7 +3871,8 @@ static void valleyview_irq_uninstall(struct drm_device *dev) ...@@ -3867,7 +3871,8 @@ static void valleyview_irq_uninstall(struct drm_device *dev)
I915_WRITE(HWSTAM, 0xffffffff); I915_WRITE(HWSTAM, 0xffffffff);
spin_lock_irq(&dev_priv->irq_lock); spin_lock_irq(&dev_priv->irq_lock);
vlv_display_irq_reset(dev_priv); if (dev_priv->display_irqs_enabled)
vlv_display_irq_reset(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
} }
...@@ -3886,7 +3891,8 @@ static void cherryview_irq_uninstall(struct drm_device *dev) ...@@ -3886,7 +3891,8 @@ static void cherryview_irq_uninstall(struct drm_device *dev)
GEN5_IRQ_RESET(GEN8_PCU_); GEN5_IRQ_RESET(GEN8_PCU_);
spin_lock_irq(&dev_priv->irq_lock); spin_lock_irq(&dev_priv->irq_lock);
vlv_display_irq_reset(dev_priv); if (dev_priv->display_irqs_enabled)
vlv_display_irq_reset(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment