drm/i915: synchronize_irq() before turning off disp2d power well on VLV/CHV
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 19 Feb 2016 16:41:52 +0000 (18:41 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 22 Feb 2016 17:28:08 +0000 (19:28 +0200)
After we've told the irq code we don't want to handle display irqs
anymore, we must make sure any display irq handling already
kicked off has finished before we actually turn off the power well.

I wouldn't expect PIPESTAT based interrupts to occur anymore since
vblanks/page flips/gmbus/etc should all be quiescent at this point.
But at least hotplug interrupts could still occur. Hotplug
interrupts may also kick off the workqueue based hotplug processing,
but that code should take the required power domain references
itself, so there shouldn't be any need to synchronize with the
hotplug processing from the power well code.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1455900112-15387-1-git-send-email-ville.syrjala@linux.intel.com
Reviewed-by: Imre Deak <imre.deak@intel.com>
drivers/gpu/drm/i915/intel_runtime_pm.c

index 2b1e85de64833438c9f3aff87410f068990b2a92..ec4faae49b3f6a21208c1e87ca617950e6c06201 100644 (file)
@@ -987,6 +987,9 @@ static void vlv_display_power_well_deinit(struct drm_i915_private *dev_priv)
        valleyview_disable_display_irqs(dev_priv);
        spin_unlock_irq(&dev_priv->irq_lock);
 
+       /* make sure we're done processing display irqs */
+       synchronize_irq(dev_priv->dev->irq);
+
        vlv_power_sequencer_reset(dev_priv);
 }