瀏覽代碼

drm/i915: After a reset perform a forced modeset

On more recent chipsets, restoring the display is not as simple as
writing a few registers, so force a full modeset of the current
configuration in order to retrain the display link.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Chris Wilson 14 年之前
父節點
當前提交
9fd981413e
共有 1 個文件被更改,包括 10 次插入7 次删除
  1. 10 7
      drivers/gpu/drm/i915/i915_drv.c

+ 10 - 7
drivers/gpu/drm/i915/i915_drv.c

@@ -385,9 +385,6 @@ int i965_reset(struct drm_device *dev, u8 flags)
 	 */
 	i915_gem_retire_requests(dev);
 
-	if (need_display)
-		i915_save_display(dev);
-
 	/*
 	 * Set the domains we want to reset (GRDOM/bits 2 and 3) as
 	 * well as the reset bit (GR/bit 0).  Setting the GR bit
@@ -428,13 +425,19 @@ int i965_reset(struct drm_device *dev, u8 flags)
 		mutex_lock(&dev->struct_mutex);
 	}
 
+	mutex_unlock(&dev->struct_mutex);
+
 	/*
-	 * Display needs restore too...
+	 * Perform a full modeset as on later generations, e.g. Ironlake, we may
+	 * need to retrain the display link and cannot just restore the register
+	 * values.
 	 */
-	if (need_display)
-		i915_restore_display(dev);
+	if (need_display) {
+		mutex_lock(&dev->mode_config.mutex);
+		drm_helper_resume_force_mode(dev);
+		mutex_unlock(&dev->mode_config.mutex);
+	}
 
-	mutex_unlock(&dev->struct_mutex);
 	return 0;
 }