[PATCH] cpuidle: psci: Avoid initializing faux device if no DT idle states are present
Ulf Hansson
ulf.hansson at linaro.org
Fri May 2 08:16:48 PDT 2025
On Fri, 2 May 2025 at 16:01, Sudeep Holla <sudeep.holla at arm.com> wrote:
>
> Commit af5376a77e87 ("cpuidle: psci: Transition to the faux device interface")
> transitioned the PSCI cpuidle driver from using a platform device to the
> faux device framework. However, unlike platform devices, the faux device
> infrastructure logs an error when the probe function fails, even if the
> failure is intentional or expected.
>
> To prevent unnecessary error logs, we can skip creating the faux device
> entirely if there are no PSCI idle states defined in the device tree.
> Introduce a check for DT idle states during initialization and avoid
> setting up the device if none are found.
>
> This ensures cleaner logs and avoids misleading probe failure messages
> when PSCI idle support is intentionally not described in DT.
>
> Cc: Lorenzo Pieralisi <lpieralisi at kernel.org>
> Cc: Ulf Hansson <ulf.hansson at linaro.org>
> Cc: "Rafael J. Wysocki" <rafael at kernel.org>
> Fixes: af5376a77e87 ("cpuidle: psci: Transition to the faux device interface")
> Reported-by: Jon Hunter <jonathanh at nvidia.com>
> Closes: https://lore.kernel.org/r/cf4e70e4-9fe5-4697-8744-8c12c41b5ff9@nvidia.com
> Signed-off-by: Sudeep Holla <sudeep.holla at arm.com>
Reviewed-by: Ulf Hansson <ulf.hansson at linaro.org>
Rafael, please pick this one.
BTW, I was not cced the original offending commit and it was funneld
via Rafael's tree. No worries this time, but probably easier to stick
with my pmdomain tree future wise, to avoid any churns. This is also
reflected in MAINTAINERS.
Kind regards
Uffe
> ---
> drivers/cpuidle/cpuidle-psci.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c
> index ee35ac816321..40f378c1dc9f 100644
> --- a/drivers/cpuidle/cpuidle-psci.c
> +++ b/drivers/cpuidle/cpuidle-psci.c
> @@ -438,10 +438,29 @@ static struct faux_device_ops psci_cpuidle_ops = {
> .probe = psci_cpuidle_probe,
> };
>
> +static bool __init dt_idle_state_present(void)
> +{
> + struct device_node *cpu_node __free(device_node);
> + struct device_node *state_node __free(device_node);
> +
> + cpu_node = of_cpu_device_node_get(cpumask_first(cpu_possible_mask));
> + if (!cpu_node)
> + return false;
> +
> + state_node = of_get_cpu_state_node(cpu_node, 0);
> + if (!state_node)
> + return false;
> +
> + return !!of_match_node(psci_idle_state_match, state_node);
> +}
> +
> static int __init psci_idle_init(void)
> {
> struct faux_device *fdev;
>
> + if (!dt_idle_state_present())
> + return 0;
> +
> fdev = faux_device_create("psci-cpuidle", NULL, &psci_cpuidle_ops);
> if (!fdev) {
> pr_err("Failed to create psci-cpuidle device\n");
> --
> 2.34.1
>
More information about the linux-arm-kernel
mailing list