diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 113 | 
1 files changed, 52 insertions, 61 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index ba6862f5b6b2..c1a5377caff0 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -574,6 +574,7 @@ static int i915_drm_suspend(struct drm_device *dev)  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_crtc *crtc;  	pci_power_t opregion_target_state; +	int error;  	/* ignore lid events during suspend */  	mutex_lock(&dev_priv->modeset_restore_lock); @@ -588,37 +589,32 @@ static int i915_drm_suspend(struct drm_device *dev)  	pci_save_state(dev->pdev); -	/* If KMS is active, we do the leavevt stuff here */ -	if (drm_core_check_feature(dev, DRIVER_MODESET)) { -		int error; - -		error = i915_gem_suspend(dev); -		if (error) { -			dev_err(&dev->pdev->dev, -				"GEM idle failed, resume might fail\n"); -			return error; -		} +	error = i915_gem_suspend(dev); +	if (error) { +		dev_err(&dev->pdev->dev, +			"GEM idle failed, resume might fail\n"); +		return error; +	} -		intel_suspend_gt_powersave(dev); +	intel_suspend_gt_powersave(dev); -		/* -		 * Disable CRTCs directly since we want to preserve sw state -		 * for _thaw. Also, power gate the CRTC power wells. -		 */ -		drm_modeset_lock_all(dev); -		for_each_crtc(dev, crtc) -			intel_crtc_control(crtc, false); -		drm_modeset_unlock_all(dev); +	/* +	 * Disable CRTCs directly since we want to preserve sw state +	 * for _thaw. Also, power gate the CRTC power wells. +	 */ +	drm_modeset_lock_all(dev); +	for_each_crtc(dev, crtc) +		intel_crtc_control(crtc, false); +	drm_modeset_unlock_all(dev); -		intel_dp_mst_suspend(dev); +	intel_dp_mst_suspend(dev); -		intel_runtime_pm_disable_interrupts(dev_priv); -		intel_hpd_cancel_work(dev_priv); +	intel_runtime_pm_disable_interrupts(dev_priv); +	intel_hpd_cancel_work(dev_priv); -		intel_suspend_encoders(dev_priv); +	intel_suspend_encoders(dev_priv); -		intel_suspend_hw(dev); -	} +	intel_suspend_hw(dev);  	i915_gem_suspend_gtt_mappings(dev); @@ -690,53 +686,48 @@ static int i915_drm_resume(struct drm_device *dev)  {  	struct drm_i915_private *dev_priv = dev->dev_private; -	if (drm_core_check_feature(dev, DRIVER_MODESET)) { -		mutex_lock(&dev->struct_mutex); -		i915_gem_restore_gtt_mappings(dev); -		mutex_unlock(&dev->struct_mutex); -	} +	mutex_lock(&dev->struct_mutex); +	i915_gem_restore_gtt_mappings(dev); +	mutex_unlock(&dev->struct_mutex);  	i915_restore_state(dev);  	intel_opregion_setup(dev); -	/* KMS EnterVT equivalent */ -	if (drm_core_check_feature(dev, DRIVER_MODESET)) { -		intel_init_pch_refclk(dev); -		drm_mode_config_reset(dev); +	intel_init_pch_refclk(dev); +	drm_mode_config_reset(dev); -		mutex_lock(&dev->struct_mutex); -		if (i915_gem_init_hw(dev)) { -			DRM_ERROR("failed to re-initialize GPU, declaring wedged!\n"); -			atomic_set_mask(I915_WEDGED, &dev_priv->gpu_error.reset_counter); -		} -		mutex_unlock(&dev->struct_mutex); +	mutex_lock(&dev->struct_mutex); +	if (i915_gem_init_hw(dev)) { +		DRM_ERROR("failed to re-initialize GPU, declaring wedged!\n"); +		atomic_set_mask(I915_WEDGED, &dev_priv->gpu_error.reset_counter); +	} +	mutex_unlock(&dev->struct_mutex); -		/* We need working interrupts for modeset enabling ... */ -		intel_runtime_pm_enable_interrupts(dev_priv); +	/* We need working interrupts for modeset enabling ... */ +	intel_runtime_pm_enable_interrupts(dev_priv); -		intel_modeset_init_hw(dev); +	intel_modeset_init_hw(dev); -		spin_lock_irq(&dev_priv->irq_lock); -		if (dev_priv->display.hpd_irq_setup) -			dev_priv->display.hpd_irq_setup(dev); -		spin_unlock_irq(&dev_priv->irq_lock); +	spin_lock_irq(&dev_priv->irq_lock); +	if (dev_priv->display.hpd_irq_setup) +		dev_priv->display.hpd_irq_setup(dev); +	spin_unlock_irq(&dev_priv->irq_lock); -		drm_modeset_lock_all(dev); -		intel_modeset_setup_hw_state(dev, true); -		drm_modeset_unlock_all(dev); +	drm_modeset_lock_all(dev); +	intel_modeset_setup_hw_state(dev, true); +	drm_modeset_unlock_all(dev); -		intel_dp_mst_resume(dev); +	intel_dp_mst_resume(dev); -		/* -		 * ... but also need to make sure that hotplug processing -		 * doesn't cause havoc. Like in the driver load code we don't -		 * bother with the tiny race here where we might loose hotplug -		 * notifications. -		 * */ -		intel_hpd_init(dev_priv); -		/* Config may have changed between suspend and resume */ -		drm_helper_hpd_irq_event(dev); -	} +	/* +	 * ... but also need to make sure that hotplug processing +	 * doesn't cause havoc. Like in the driver load code we don't +	 * bother with the tiny race here where we might loose hotplug +	 * notifications. +	 * */ +	intel_hpd_init(dev_priv); +	/* Config may have changed between suspend and resume */ +	drm_helper_hpd_irq_event(dev);  	intel_opregion_init(dev);  | 
