[PATCH 2/4] cpuidle: psci: Allow skipping the suspend mode switch

From: Reza Kurniawan

Date: Sat Oct 17 2026 - 12:59:20 EST


From: Alejandro Tafalla <atafalla@xxxxxxxxx>

On some SoCs (e.g. Qualcomm MSM8917 and MSM8937), PSCI reports that OSI
mode is supported but rejects any PSCI_SET_SUSPEND_MODE call with
NOT_SUPPORTED. psci_set_osi_mode() then fails with -EOPNOTSUPP and the
probe is aborted:

psci-cpuidle-domain psci: probe with driver psci-cpuidle-domain failed
with error -95

Add support for the "skip-suspend-mode-switch" property. When present,
do not call psci_set_osi_mode() and continue with the topology that was
already built.

Signed-off-by: Alejandro Tafalla <atafalla@xxxxxxxxx>
[Reza Kurniawan: split out the patch, added log message for skip case, renamed
the property]
Co-developed-by: Reza Kurniawan <imkyufie@xxxxxxxxx>
Signed-off-by: Reza Kurniawan <imkyufie@xxxxxxxxx>
---
drivers/cpuidle/cpuidle-psci-domain.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/cpuidle-psci-domain.c b/drivers/cpuidle/cpuidle-psci-domain.c
index 5722365b94..cc9f14769b 100644
--- a/drivers/cpuidle/cpuidle-psci-domain.c
+++ b/drivers/cpuidle/cpuidle-psci-domain.c
@@ -159,13 +159,17 @@ static int psci_cpuidle_domain_probe(struct platform_device *pdev)
if (ret)
goto remove_pd;

- /* let's try to enable OSI. */
- ret = psci_set_osi_mode(use_osi);
- if (ret)
- goto remove_pd;
+ if (of_property_read_bool(np, "skip-suspend-mode-switch")) {
+ pr_info("Initialized CPU PM domain topology, keeping firmware-set mode\n");
+ } else {
+ ret = psci_set_osi_mode(use_osi);
+ if (ret)
+ goto remove_pd;
+
+ pr_info("Initialized CPU PM domain topology using %s mode\n",
+ use_osi ? "OSI" : "PC");
+ }

- pr_info("Initialized CPU PM domain topology using %s mode\n",
- use_osi ? "OSI" : "PC");
return 0;

remove_pd:

--
2.55.0