drm/i915: Reorder hpd init vs. display resume
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / i915_drv.c
index 2641d7e16b5b7b1110acfd074190c47aba5e4405..ad0dcaacc1a2eb9e948a435e3742223b01c02d16 100644 (file)
@@ -1255,26 +1255,15 @@ static int i915_drm_resume(struct drm_device *dev)
 
        intel_modeset_init_hw(dev_priv);
        intel_init_clock_gating(dev_priv);
+       intel_hpd_init(dev_priv);
 
-       spin_lock_irq(&dev_priv->irq_lock);
-       if (dev_priv->display.hpd_irq_setup)
-               dev_priv->display.hpd_irq_setup(dev_priv);
-       spin_unlock_irq(&dev_priv->irq_lock);
-
+       /* MST sideband requires HPD interrupts enabled */
        intel_dp_mst_resume(dev_priv);
-
        intel_display_resume(dev);
 
+       intel_hpd_poll_disable(dev_priv);
        drm_kms_helper_poll_enable(dev);
 
-       /*
-        * ... but also need to make sure that hotplug processing
-        * doesn't cause havoc. Like in the driver load code we don't
-        * bother with the tiny race here where we might lose hotplug
-        * notifications.
-        * */
-       intel_hpd_init(dev_priv);
-
        intel_opregion_resume(dev_priv);
 
        intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false);
@@ -1586,7 +1575,7 @@ static int intel_runtime_suspend(struct device *kdev)
        assert_forcewakes_inactive(&dev_priv->uncore);
 
        if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
-               intel_hpd_poll_init(dev_priv);
+               intel_hpd_poll_enable(dev_priv);
 
        drm_dbg_kms(&dev_priv->drm, "Device suspended\n");
        return 0;
@@ -1631,8 +1620,10 @@ static int intel_runtime_resume(struct device *kdev)
         * power well, so hpd is reinitialized from there. For
         * everyone else do it here.
         */
-       if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
+       if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) {
                intel_hpd_init(dev_priv);
+               intel_hpd_poll_disable(dev_priv);
+       }
 
        intel_enable_ipc(dev_priv);