[PATCH 2/2] drm/i915: Move display HW state readout to early resume phase 1

Imre Deak imre.deak at intel.com
Sat Sep 15 05:48:20 UTC 2018


Signed-off-by: Imre Deak <imre.deak at intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c | 52 +++++++++++++++++++++--------------------
 1 file changed, 27 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 643473d8d1d6..7a28aad21d34 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1891,7 +1891,6 @@ static int i915_drm_suspend(struct drm_device *dev)
 {
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct pci_dev *pdev = dev_priv->drm.pdev;
-	pci_power_t opregion_target_state;
 
 	disable_rpm_wakeref_asserts(dev_priv);
 
@@ -1916,19 +1915,6 @@ static int i915_drm_suspend(struct drm_device *dev)
 
 	i915_gem_suspend_gtt_mappings(dev_priv);
 
-	i915_save_state(dev_priv);
-
-	opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold;
-	intel_opregion_notify_adapter(dev_priv, opregion_target_state);
-
-	intel_opregion_unregister(dev_priv);
-
-	intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
-
-	dev_priv->suspend_count++;
-
-	intel_csr_ucode_suspend(dev_priv);
-
 	enable_rpm_wakeref_asserts(dev_priv);
 
 	return 0;
@@ -1950,10 +1936,24 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
 {
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct pci_dev *pdev = dev_priv->drm.pdev;
+	pci_power_t opregion_target_state;
 	int ret;
 
 	disable_rpm_wakeref_asserts(dev_priv);
 
+	i915_save_state(dev_priv);
+
+	opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold;
+	intel_opregion_notify_adapter(dev_priv, opregion_target_state);
+
+	intel_opregion_unregister(dev_priv);
+
+	intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
+
+	dev_priv->suspend_count++;
+
+	intel_csr_ucode_suspend(dev_priv);
+
 	i915_gem_suspend_late(dev_priv);
 
 	intel_uncore_suspend(dev_priv);
@@ -2025,20 +2025,9 @@ static int i915_suspend_switcheroo(struct drm_device *dev, pm_message_t state)
 static int i915_drm_resume(struct drm_device *dev)
 {
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	int ret;
 
 	disable_rpm_wakeref_asserts(dev_priv);
-	intel_sanitize_gt_powersave(dev_priv);
 
-	i915_gem_sanitize(dev_priv);
-
-	ret = i915_ggtt_enable_hw(dev_priv);
-	if (ret)
-		DRM_ERROR("failed to re-enable GGTT\n");
-
-	intel_csr_ucode_resume(dev_priv);
-
-	i915_restore_state(dev_priv);
 	intel_pps_unlock_regs_wa(dev_priv);
 	intel_opregion_setup(dev_priv);
 
@@ -2071,6 +2060,7 @@ static int i915_drm_resume(struct drm_device *dev)
 	intel_dp_mst_resume(dev_priv);
 
 	intel_display_readout_hw_state(dev_priv);
+
 	intel_display_resume(dev);
 
 	drm_kms_helper_poll_enable(dev);
@@ -2169,6 +2159,18 @@ static int i915_drm_resume_early(struct drm_device *dev)
 
 	intel_engines_sanitize(dev_priv);
 
+	intel_sanitize_gt_powersave(dev_priv);
+
+	i915_gem_sanitize(dev_priv);
+
+	ret = i915_ggtt_enable_hw(dev_priv);
+	if (ret)
+		DRM_ERROR("failed to re-enable GGTT\n");
+
+	intel_csr_ucode_resume(dev_priv);
+
+	i915_restore_state(dev_priv);
+
 	enable_rpm_wakeref_asserts(dev_priv);
 
 	return ret;
-- 
2.13.2



More information about the Intel-gfx-trybot mailing list