drm/xe: Remove runtime argument from display s/r functions
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Thu, 5 Sep 2024 15:00:50 +0000 (17:00 +0200)
committerLucas De Marchi <lucas.demarchi@intel.com>
Tue, 29 Oct 2024 14:12:55 +0000 (07:12 -0700)
The previous change ensures that pm_suspend is only called when
suspending or resuming. This ensures no further bugs like those
in the previous commit.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240905150052.174895-3-maarten.lankhorst@linux.intel.com
(cherry picked from commit f90491d4b64e302e940133103d3d9908e70e454f)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/display/xe_display.c
drivers/gpu/drm/xe/display/xe_display.h
drivers/gpu/drm/xe/xe_pm.c

index 75736fa..1c25c4f 100644 (file)
@@ -309,18 +309,7 @@ static void xe_display_flush_cleanup_work(struct xe_device *xe)
 }
 
 /* TODO: System and runtime suspend/resume sequences will be sanitized as a follow-up. */
-void xe_display_pm_runtime_suspend(struct xe_device *xe)
-{
-       if (!xe->info.probe_display)
-               return;
-
-       if (xe->d3cold.allowed)
-               xe_display_pm_suspend(xe, true);
-
-       intel_hpd_poll_enable(xe);
-}
-
-void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
+static void __xe_display_pm_suspend(struct xe_device *xe, bool runtime)
 {
        struct intel_display *display = &xe->display;
        bool s2idle = suspend_to_idle();
@@ -355,26 +344,31 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
        intel_dmc_suspend(xe);
 }
 
-void xe_display_pm_suspend_late(struct xe_device *xe)
+void xe_display_pm_suspend(struct xe_device *xe)
+{
+       __xe_display_pm_suspend(xe, false);
+}
+
+void xe_display_pm_runtime_suspend(struct xe_device *xe)
 {
-       bool s2idle = suspend_to_idle();
        if (!xe->info.probe_display)
                return;
 
-       intel_power_domains_suspend(xe, s2idle);
+       if (xe->d3cold.allowed)
+               __xe_display_pm_suspend(xe, true);
 
-       intel_display_power_suspend_late(xe);
+       intel_hpd_poll_enable(xe);
 }
 
-void xe_display_pm_runtime_resume(struct xe_device *xe)
+void xe_display_pm_suspend_late(struct xe_device *xe)
 {
+       bool s2idle = suspend_to_idle();
        if (!xe->info.probe_display)
                return;
 
-       intel_hpd_poll_disable(xe);
+       intel_power_domains_suspend(xe, s2idle);
 
-       if (xe->d3cold.allowed)
-               xe_display_pm_resume(xe, true);
+       intel_display_power_suspend_late(xe);
 }
 
 void xe_display_pm_resume_early(struct xe_device *xe)
@@ -387,7 +381,7 @@ void xe_display_pm_resume_early(struct xe_device *xe)
        intel_power_domains_resume(xe);
 }
 
-void xe_display_pm_resume(struct xe_device *xe, bool runtime)
+static void __xe_display_pm_resume(struct xe_device *xe, bool runtime)
 {
        struct intel_display *display = &xe->display;
 
@@ -421,6 +415,23 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime)
        intel_power_domains_enable(xe);
 }
 
+void xe_display_pm_resume(struct xe_device *xe)
+{
+       __xe_display_pm_resume(xe, false);
+}
+
+void xe_display_pm_runtime_resume(struct xe_device *xe)
+{
+       if (!xe->info.probe_display)
+               return;
+
+       intel_hpd_poll_disable(xe);
+
+       if (xe->d3cold.allowed)
+               __xe_display_pm_resume(xe, true);
+}
+
+
 static void display_device_remove(struct drm_device *dev, void *arg)
 {
        struct xe_device *xe = arg;
index 53d727f..bed55fd 100644 (file)
@@ -34,10 +34,10 @@ void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir);
 void xe_display_irq_reset(struct xe_device *xe);
 void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt);
 
-void xe_display_pm_suspend(struct xe_device *xe, bool runtime);
+void xe_display_pm_suspend(struct xe_device *xe);
 void xe_display_pm_suspend_late(struct xe_device *xe);
 void xe_display_pm_resume_early(struct xe_device *xe);
-void xe_display_pm_resume(struct xe_device *xe, bool runtime);
+void xe_display_pm_resume(struct xe_device *xe);
 void xe_display_pm_runtime_suspend(struct xe_device *xe);
 void xe_display_pm_runtime_resume(struct xe_device *xe);
 
@@ -65,10 +65,10 @@ static inline void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)
 static inline void xe_display_irq_reset(struct xe_device *xe) {}
 static inline void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt) {}
 
-static inline void xe_display_pm_suspend(struct xe_device *xe, bool runtime) {}
+static inline void xe_display_pm_suspend(struct xe_device *xe) {}
 static inline void xe_display_pm_suspend_late(struct xe_device *xe) {}
 static inline void xe_display_pm_resume_early(struct xe_device *xe) {}
-static inline void xe_display_pm_resume(struct xe_device *xe, bool runtime) {}
+static inline void xe_display_pm_resume(struct xe_device *xe) {}
 static inline void xe_display_pm_runtime_suspend(struct xe_device *xe) {}
 static inline void xe_display_pm_runtime_resume(struct xe_device *xe) {}
 
index 7cf2160..33eb039 100644 (file)
@@ -123,7 +123,7 @@ int xe_pm_suspend(struct xe_device *xe)
        for_each_gt(gt, xe, id)
                xe_gt_suspend_prepare(gt);
 
-       xe_display_pm_suspend(xe, false);
+       xe_display_pm_suspend(xe);
 
        /* FIXME: Super racey... */
        err = xe_bo_evict_all(xe);
@@ -133,7 +133,7 @@ int xe_pm_suspend(struct xe_device *xe)
        for_each_gt(gt, xe, id) {
                err = xe_gt_suspend(gt);
                if (err) {
-                       xe_display_pm_resume(xe, false);
+                       xe_display_pm_resume(xe);
                        goto err;
                }
        }
@@ -187,7 +187,7 @@ int xe_pm_resume(struct xe_device *xe)
        for_each_gt(gt, xe, id)
                xe_gt_resume(gt);
 
-       xe_display_pm_resume(xe, false);
+       xe_display_pm_resume(xe);
 
        err = xe_bo_restore_user(xe);
        if (err)