Re: [PATCH] PM: domains: Fix handling of unavailable/disabled idle states

From: Ulf Hansson
Date: Tue Oct 25 2022 - 09:01:31 EST


On Tue, 25 Oct 2022 at 14:34, Sudeep Holla <sudeep.holla@xxxxxxx> wrote:
>
> Platforms can provide the information about the availability of each
> idle states via status flag. Platforms may have to disable one or more
> idle states for various reasons like broken firmware or other unmet
> dependencies.
>
> Fix handling of such unavailable/disabled idle states by ignoring them
> while parsing the states.
>
> Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
> Cc: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Fixes: a3381e3a65cb ("PM / domains: Fix up domain-idle-states OF parsing")
> Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>

I think this should be tagged for stable kernels too. Rafael, can you
pick this up as a fix for v6.1rc[n]?

Reviewed-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>

Kind regards
Uffe

> ---
> drivers/base/power/domain.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> Hi Ulf,
>
> As you already know, this change alone doesn't fix the issue reported here[1].
> It also needs the fixes you have posted [2].
>
> Regards,
> Sudeep
>
> [1] https://lore.kernel.org/all/20221018145348.4051809-1-amit.pundir@xxxxxxxxxx
> [2] https://lore.kernel.org/all/20221021151013.148457-1-ulf.hansson@xxxxxxxxxx

Well, I think it's better if we replace [1] with a patch that only
disables the cluster idle state. In that case, it would be sufficient
with $subject patch. In that case, we can just manage [2] separately.

Amit, can you submit a new version and test it together with $subject patch?

Kind regards
Uffe

>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index ead135c7044c..6471b559230e 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -2952,6 +2952,10 @@ static int genpd_iterate_idle_states(struct device_node *dn,
> np = it.node;
> if (!of_match_node(idle_state_match, np))
> continue;
> +
> + if (!of_device_is_available(np))
> + continue;
> +
> if (states) {
> ret = genpd_parse_state(&states[i], np);
> if (ret) {
> --
> 2.38.1
>