drm/i915: Restore the display config after a GPU reset on gen4
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 21 Nov 2014 19:54:26 +0000 (21:54 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 3 Dec 2014 08:29:37 +0000 (09:29 +0100)
On pre-ctg GPU reset also resets the display hardware. Force a mode
restore after the GPU reset, and also re-init clock gating.

v2: Use intel_modeset_init_hw() instead of intel_init_clock_gating()
    in case more relevant stuff gets added there at some point
    Restore interrupts after the reset as well

Tested-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_drv.c

index 1e9c136a874cf1741e09aecc33c6cea37e26e1d4..68e42392f59c24ceee8a1dde781367950b040a35 100644 (file)
@@ -880,6 +880,24 @@ int i915_reset(struct drm_device *dev)
                 */
                if (INTEL_INFO(dev)->gen > 5)
                        intel_reset_gt_powersave(dev);
+
+               if (IS_GEN4(dev) && !IS_G4X(dev)) {
+                       intel_runtime_pm_disable_interrupts(dev_priv);
+                       intel_runtime_pm_enable_interrupts(dev_priv);
+
+                       intel_modeset_init_hw(dev);
+
+                       spin_lock_irq(&dev_priv->irq_lock);
+                       if (dev_priv->display.hpd_irq_setup)
+                               dev_priv->display.hpd_irq_setup(dev);
+                       spin_unlock_irq(&dev_priv->irq_lock);
+
+                       drm_modeset_lock_all(dev);
+                       intel_modeset_setup_hw_state(dev, true);
+                       drm_modeset_unlock_all(dev);
+
+                       intel_hpd_init(dev_priv);
+               }
        } else {
                mutex_unlock(&dev->struct_mutex);
        }