From fc936457f7f7f178184b5decf538ec3280adb7df Mon Sep 17 00:00:00 2001 From: Knut Petersen Date: Mon, 21 Apr 2014 17:37:10 +0200 Subject: [PATCH] [i915] Fix S3 resume regression introduced in 24576d2 Signed-off-by: Knut Petersen --- drivers/gpu/drm/i915/i915_drv.c | 19 ++++++------------- drivers/gpu/drm/i915/intel_display.c | 2 +- drivers/gpu/drm/i915/intel_drv.h | 1 + drivers/gpu/drm/i915/intel_fbdev.c | 3 --- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index ec7bb0f..fb1354a 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -527,16 +527,13 @@ static int i915_drm_freeze(struct drm_device *dev) cancel_delayed_work_sync(&dev_priv->rps.delayed_resume_work); + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + if (crtc->enabled) + intel_crtc_disable(crtc); + } + drm_irq_uninstall(dev); dev_priv->enable_hotplug_processing = false; - /* - * Disable CRTCs directly since we want to preserve sw state - * for _thaw. - */ - mutex_lock(&dev->mode_config.mutex); - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) - dev_priv->display.crtc_disable(crtc); - mutex_unlock(&dev->mode_config.mutex); intel_modeset_suspend_hw(dev); } @@ -648,11 +645,7 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings) drm_irq_install(dev); intel_modeset_init_hw(dev); - - drm_modeset_lock_all(dev); - drm_mode_config_reset(dev); - intel_modeset_setup_hw_state(dev, true); - drm_modeset_unlock_all(dev); + intel_modeset_setup_hw_state(dev, false); /* * ... but also need to make sure that hotplug processing diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 9b8a7c7..825e888 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -4346,7 +4346,7 @@ void intel_crtc_update_dpms(struct drm_crtc *crtc) intel_crtc_update_sarea(crtc, enable); } -static void intel_crtc_disable(struct drm_crtc *crtc) +void intel_crtc_disable(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_connector *connector; diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index fbfaaba..1cc01fa 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -634,6 +634,7 @@ void intel_mark_fb_busy(struct drm_i915_gem_object *obj, void intel_mark_idle(struct drm_device *dev); void intel_crtc_restore_mode(struct drm_crtc *crtc); void intel_crtc_update_dpms(struct drm_crtc *crtc); +void intel_crtc_disable(struct drm_crtc *crtc); void intel_encoder_destroy(struct drm_encoder *encoder); void intel_connector_dpms(struct drm_connector *, int mode); bool intel_connector_get_hw_state(struct intel_connector *connector); diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index 39eac99..10d70b8 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c @@ -184,9 +184,6 @@ static int intelfb_create(struct drm_fb_helper *helper, } info->screen_size = size; - /* This driver doesn't need a VT switch to restore the mode on resume */ - info->skip_vt_switch = true; - drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth); drm_fb_helper_fill_var(info, &ifbdev->helper, sizes->fb_width, sizes->fb_height); -- 1.8.4.5