Merge tag 'drm-misc-next-2024-02-15' of git://anongit.freedesktop.org/drm/drm-misc...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / i915_driver.c
index c1cf5ba7ba14dd7b1bae04ba2aa5ed7693a50e8a..9ee902d5b72c491152d42f197da8cb85008b00bd 100644 (file)
@@ -1004,8 +1004,10 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
        intel_runtime_pm_disable(&i915->runtime_pm);
        intel_power_domains_disable(i915);
 
+       intel_fbdev_set_suspend(&i915->drm, FBINFO_STATE_SUSPENDED, true);
        if (HAS_DISPLAY(i915)) {
                drm_kms_helper_poll_disable(&i915->drm);
+               intel_display_driver_disable_user_access(i915);
 
                drm_atomic_helper_shutdown(&i915->drm);
        }
@@ -1015,6 +1017,9 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
        intel_runtime_pm_disable_interrupts(i915);
        intel_hpd_cancel_work(i915);
 
+       if (HAS_DISPLAY(i915))
+               intel_display_driver_suspend_access(i915);
+
        intel_suspend_encoders(i915);
        intel_shutdown_encoders(i915);
 
@@ -1081,8 +1086,11 @@ static int i915_drm_suspend(struct drm_device *dev)
        /* We do a lot of poking in a lot of registers, make sure they work
         * properly. */
        intel_power_domains_disable(dev_priv);
-       if (HAS_DISPLAY(dev_priv))
+       intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
+       if (HAS_DISPLAY(dev_priv)) {
                drm_kms_helper_poll_disable(dev);
+               intel_display_driver_disable_user_access(dev_priv);
+       }
 
        pci_save_state(pdev);
 
@@ -1093,6 +1101,9 @@ static int i915_drm_suspend(struct drm_device *dev)
        intel_runtime_pm_disable_interrupts(dev_priv);
        intel_hpd_cancel_work(dev_priv);
 
+       if (HAS_DISPLAY(dev_priv))
+               intel_display_driver_suspend_access(dev_priv);
+
        intel_suspend_encoders(dev_priv);
 
        /* Must be called before GGTT is suspended. */
@@ -1104,8 +1115,6 @@ static int i915_drm_suspend(struct drm_device *dev)
        opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold;
        intel_opregion_suspend(dev_priv, opregion_target_state);
 
-       intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
-
        dev_priv->suspend_count++;
 
        intel_dmc_suspend(dev_priv);
@@ -1244,15 +1253,21 @@ static int i915_drm_resume(struct drm_device *dev)
        intel_display_driver_init_hw(dev_priv);
 
        intel_clock_gating_init(dev_priv);
+
+       if (HAS_DISPLAY(dev_priv))
+               intel_display_driver_resume_access(dev_priv);
+
        intel_hpd_init(dev_priv);
 
        /* MST sideband requires HPD interrupts enabled */
        intel_dp_mst_resume(dev_priv);
        intel_display_driver_resume(dev_priv);
 
-       intel_hpd_poll_disable(dev_priv);
-       if (HAS_DISPLAY(dev_priv))
+       if (HAS_DISPLAY(dev_priv)) {
+               intel_display_driver_enable_user_access(dev_priv);
                drm_kms_helper_poll_enable(dev);
+       }
+       intel_hpd_poll_disable(dev_priv);
 
        intel_opregion_resume(dev_priv);