]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
drm/i915: Disable crtcs gracefully before GPU reset on gen3/4
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 21 Nov 2014 19:54:30 +0000 (21:54 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 3 Dec 2014 08:29:39 +0000 (09:29 +0100)
The GPU reset also resets the display on gen3/4. The g33 docs say we
should disable all planes before flipping the reset switch. Just
disable all the crtcs instead. That seems a nicer thing to do anyway.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_uncore.c

index 56664e63e10f8e0f62c8080b1f25e7cfc05e0ed7..910df02840d62f21afb29d3e9ec9cf685e19c851 100644 (file)
@@ -2803,6 +2803,9 @@ static void intel_update_primary_planes(struct drm_device *dev)
 
 void intel_prepare_reset(struct drm_device *dev)
 {
+       struct drm_i915_private *dev_priv = to_i915(dev);
+       struct intel_crtc *crtc;
+
        /* no reset support for gen2 */
        if (IS_GEN2(dev))
                return;
@@ -2812,6 +2815,15 @@ void intel_prepare_reset(struct drm_device *dev)
                return;
 
        drm_modeset_lock_all(dev);
+
+       /*
+        * Disabling the crtcs gracefully seems nicer. Also the
+        * g33 docs say we should at least disable all the planes.
+        */
+       for_each_intel_crtc(dev, crtc) {
+               if (crtc->active)
+                       dev_priv->display.crtc_disable(&crtc->base);
+       }
 }
 
 void intel_finish_reset(struct drm_device *dev)
index cf8ecc01deb40e3978f6470bb82880b6a2054a83..2b34c046da6642b54c4cd83720e3175a9b64a6ae 100644 (file)
@@ -1371,8 +1371,6 @@ static int g4x_reset_complete(struct drm_device *dev)
 
 static int g33_do_reset(struct drm_device *dev)
 {
-       /* FIXME spec says to turn off all planes and wait 1 usec before reset */
-
        pci_write_config_byte(dev->pdev, I915_GDRST, GRDOM_RESET_ENABLE);
        return wait_for(g4x_reset_complete(dev), 500);
 }