Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pmdomain: arm: scmi_pm_domain: Remove redundant state verification

Currently, scmi_pd_power() explicitly verifies whether the requested
power state was applied by calling state_get(). While this check could
detect failures where the state was not properly updated, ensuring
correctness is the responsibility of the SCMI firmware.

Removing this redundant state_get() call eliminates an unnecessary
round-trip to the firmware, improving efficiency. Any mismatches
between the requested and actual states should be handled by the SCMI
firmware, which must return a failure if state_set() is unsuccessful.

Additionally, in some cases, checking the state after powering off a
domain may be unreliable or unsafe, depending on the firmware
implementation.

This patch removes the redundant verification, simplifying the function
without compromising correctness.

Reported-and-tested-by: Ranjani Vaidyanathan <ranjani.vaidyanathan@nxp.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
Link: https://lore.kernel.org/r/20250314095851.443979-1-sudeep.holla@arm.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Sudeep Holla and committed by
Ulf Hansson
6cf5db71 6ec7c4a2

+2 -9
+2 -9
drivers/pmdomain/arm/scmi_pm_domain.c
··· 24 24 25 25 static int scmi_pd_power(struct generic_pm_domain *domain, bool power_on) 26 26 { 27 - int ret; 28 - u32 state, ret_state; 27 + u32 state; 29 28 struct scmi_pm_domain *pd = to_scmi_pd(domain); 30 29 31 30 if (power_on) ··· 32 33 else 33 34 state = SCMI_POWER_STATE_GENERIC_OFF; 34 35 35 - ret = power_ops->state_set(pd->ph, pd->domain, state); 36 - if (!ret) 37 - ret = power_ops->state_get(pd->ph, pd->domain, &ret_state); 38 - if (!ret && state != ret_state) 39 - return -EIO; 40 - 41 - return ret; 36 + return power_ops->state_set(pd->ph, pd->domain, state); 42 37 } 43 38 44 39 static int scmi_pd_power_on(struct generic_pm_domain *domain)