[Intel-gfx] [PATCH] drm/i915/lvds: don't restore hw state in the lid notifier for pch platforms

Daniel Vetter daniel.vetter at ffwll.ch
Wed Oct 9 10:47:12 CEST 2013

It's a pain for two reasons:
- The vga plane redisablign requires actual legacy vgao i/o to pull
  of. The hw engineers really botched this one here :(
- There seem to be some BIOS out there which send out lid events when
  unplugging. Together with our broken DP code, which disables the
  port when the cable is lost, this results in an immediate modeset
  call, which can hang on the wait for outstanding flips.

Cc: Roland Dreier <roland at kernel.org>
Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
 drivers/gpu/drm/i915/intel_lvds.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index ae0c843..19d055d 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -443,9 +443,19 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
 	if (dev_priv->modeset_restore == MODESET_DONE)
 		goto exit;
-	drm_modeset_lock_all(dev);
-	intel_modeset_setup_hw_state(dev, true);
-	drm_modeset_unlock_all(dev);
+	/*
+	 * Some old platform's BIOS love to wreak havoc while the lid is closed.
+	 * We try to detect this here and undo any damage. The split for PCH
+	 * platforms is rather conservative and a bit arbitrary expect that on
+	 * those platforms VGA disabling requires actual legacy VGA I/O access,
+	 * and as part of the cleanup in the hw state restore we also redisable
+	 * the vga plane.
+	 */
+	if (!HAS_PCH_SPLIT(dev)) {
+		drm_modeset_lock_all(dev);
+		intel_modeset_setup_hw_state(dev, true);
+		drm_modeset_unlock_all(dev);
+	}
 	dev_priv->modeset_restore = MODESET_DONE;

More information about the Intel-gfx mailing list