From f98ce92fea8a865b044d3bc4097e88a81efb74b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Fri, 21 Nov 2014 21:54:30 +0200 Subject: [PATCH] drm/i915: Disable crtcs gracefully before GPU reset on gen3/4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ä Signed-off-by: Daniel Vetter --- drivers/gpu/drm/i915/intel_display.c | 12 ++++++++++++ drivers/gpu/drm/i915/intel_uncore.c | 2 -- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 56664e63e10f..910df02840d6 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -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) diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index cf8ecc01deb4..2b34c046da66 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c @@ -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); }