]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/xe_sysctrl: Add System Controller power management support
authorAnoop Vijay <anoop.c.vijay@intel.com>
Fri, 27 Mar 2026 13:18:43 +0000 (06:18 -0700)
committerUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Mon, 30 Mar 2026 17:06:55 +0000 (10:06 -0700)
Add resume handling for System Controller to support system (S3/S4) and
runtime power management transitions.

On resume, restore SoC remapper configuration and mailbox interface to
re‑establish communication with firmware.

Signed-off-by: Anoop Vijay <anoop.c.vijay@intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Badal Nilawar <badal.nilawar@intel.com>
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Link: https://patch.msgid.link/20260327131837.2192929-15-anoop.c.vijay@intel.com
drivers/gpu/drm/xe/xe_pm.c
drivers/gpu/drm/xe/xe_sysctrl.c
drivers/gpu/drm/xe/xe_sysctrl.h

index 01185f10a8835788ce6f6181c80718e9744d526b..d4672eb0747621a8bbf852a7474189650014fa68 100644 (file)
@@ -26,6 +26,7 @@
 #include "xe_pcode.h"
 #include "xe_pxp.h"
 #include "xe_sriov_vf_ccs.h"
+#include "xe_sysctrl.h"
 #include "xe_trace.h"
 #include "xe_vm.h"
 #include "xe_wa.h"
@@ -259,6 +260,8 @@ int xe_pm_resume(struct xe_device *xe)
 
        xe_i2c_pm_resume(xe, true);
 
+       xe_sysctrl_pm_resume(xe);
+
        xe_irq_resume(xe);
 
        for_each_gt(gt, xe, id) {
@@ -670,6 +673,9 @@ int xe_pm_runtime_resume(struct xe_device *xe)
 
        xe_i2c_pm_resume(xe, xe->d3cold.allowed);
 
+       if (xe->d3cold.allowed)
+               xe_sysctrl_pm_resume(xe);
+
        xe_irq_resume(xe);
 
        for_each_gt(gt, xe, id) {
index 850f9dd7e9f08921486f3367f090f6c989dfba09..2bcef304eb9ac8371db3710d22e9929759f05e43 100644 (file)
@@ -77,3 +77,25 @@ int xe_sysctrl_init(struct xe_device *xe)
 
        return 0;
 }
+
+/**
+ * xe_sysctrl_pm_resume() - System Controller resume handler
+ * @xe: xe device instance
+ *
+ * Invoked during system resume (S3/S4 to S0) and runtime resume from D3cold.
+ * Restores SoC remapper configuration and reinitializes mailbox interface.
+ */
+void xe_sysctrl_pm_resume(struct xe_device *xe)
+{
+       struct xe_sysctrl *sc = &xe->sc;
+
+       if (!xe->info.has_soc_remapper_sysctrl)
+               return;
+
+       if (!xe->info.has_sysctrl)
+               return;
+
+       xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
+
+       xe_sysctrl_mailbox_init(sc);
+}
index d5d8735038ae10c883b4d6df1f064eedefa7be45..f3b0f3716b2f7c8ff042014c9a40116e9a9ed8be 100644 (file)
@@ -17,5 +17,6 @@ static inline struct xe_device *sc_to_xe(struct xe_sysctrl *sc)
 }
 
 int xe_sysctrl_init(struct xe_device *xe);
+void xe_sysctrl_pm_resume(struct xe_device *xe);
 
 #endif