Re: [PATCH/RFC] pmdomain: core: Support pd_ignore_unused with sync_state

From: Ulf Hansson

Date: Wed Mar 04 2026 - 05:57:19 EST


On Mon, 16 Feb 2026 at 19:47, Geert Uytterhoeven
<geert+renesas@xxxxxxxxx> wrote:
>
> Since the introduction of the sync_state mechanism, the
> "pd_ignore_unused" kernel command line option doesn't really work
> anymore. While genpd_power_off_unused() still checks for that flag
> before powering down unused domains, the new sync_state callbacks lack
> such checks, thus powering down unused domains regardless.
>
> Fix this by adding checks to the sync_state helpers and callbacks.
> Factor out the printing of the warning message, to make sure it is
> printed only once.
>
> Fixes: 002ebddd695a5399 ("pmdomain: core: Restore behaviour for disabling unused PM domains")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
> ---
> RFC as I have no need for this in upstream.

I am trying to understand the use case and whether we should consider
to land this upstream.

Would you mind elaborating on how this is useful for you?

Kind regards
Uffe

> ---
> drivers/pmdomain/core.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> index 7b563757935071dd..1f7d90bcc30d12e5 100644
> --- a/drivers/pmdomain/core.c
> +++ b/drivers/pmdomain/core.c
> @@ -1366,6 +1366,16 @@ static int __init pd_ignore_unused_setup(char *__unused)
> }
> __setup("pd_ignore_unused", pd_ignore_unused_setup);
>
> +static bool genpd_ignore_unused(void)
> +{
> + if (pd_ignore_unused) {
> + pr_warn_once("genpd: Not disabling unused power domains\n");
> + return true;
> + }
> +
> + return false;
> +}
> +
> /**
> * genpd_power_off_unused - Power off all PM domains with no devices in use.
> */
> @@ -1373,10 +1383,8 @@ static int __init genpd_power_off_unused(void)
> {
> struct generic_pm_domain *genpd;
>
> - if (pd_ignore_unused) {
> - pr_warn("genpd: Not disabling unused power domains\n");
> + if (genpd_ignore_unused())
> return 0;
> - }
>
> pr_info("genpd: Disabling unused power domains\n");
> mutex_lock(&gpd_list_lock);
> @@ -3510,6 +3518,9 @@ void of_genpd_sync_state(struct device_node *np)
> {
> struct generic_pm_domain *genpd;
>
> + if (genpd_ignore_unused())
> + return;
> +
> if (!np)
> return;
>
> @@ -3544,6 +3555,9 @@ static void genpd_provider_sync_state(struct device *dev)
> break;
>
> case GENPD_SYNC_STATE_SIMPLE:
> + if (genpd_ignore_unused())
> + return;
> +
> genpd_lock(genpd);
> genpd->stay_on = false;
> genpd_power_off(genpd, false, 0);
> --
> 2.43.0
>