[PATCH 1/2] pmdomain: arm_scmi: Skip domains that fail initialization
Sudeep Holla
sudeep.holla at kernel.org
Fri Oct 23 07:34:19 PDT 2026
Hi Ulf,
Not sure how, I seem to have used your kernel.org email on this
couple of fixes I had. Let me know if you want me to repost with
Qcom email id.
On Wed, Sep 23, 2026 at 11:16:07AM +0100, Sudeep Holla wrote:
> pm_genpd_init() can fail while allocating generic power-domain state.
> The SCMI driver ignores that error and stores the partially initialized
> domain in the onecell array. Provider registration then fails because that
> domain was never added to the global genpd list.
>
> Preserve support for partially available SCMI power domains. Log the
> failure and leave the corresponding onecell entry NULL so the other
> initialized domains remain available. Explicitly skip empty slots when
> unwinding provider registration failures.
>
> Fixes: 898216c97ed2 ("firmware: arm_scmi: add device power domain support using genpd")
> Signed-off-by: Sudeep Holla <sudeep.holla at kernel.org>
> ---
> drivers/pmdomain/arm/scmi_pm_domain.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pmdomain/arm/scmi_pm_domain.c b/drivers/pmdomain/arm/scmi_pm_domain.c
> index 3d73aef21d2f..00192472f325 100644
> --- a/drivers/pmdomain/arm/scmi_pm_domain.c
> +++ b/drivers/pmdomain/arm/scmi_pm_domain.c
> @@ -99,8 +99,13 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev)
> scmi_pd->genpd.power_on = scmi_pd_power_on;
> scmi_pd->genpd.flags = GENPD_FLAG_ACTIVE_WAKEUP;
>
> - pm_genpd_init(&scmi_pd->genpd, NULL,
> - state == SCMI_POWER_STATE_GENERIC_OFF);
> + ret = pm_genpd_init(&scmi_pd->genpd, NULL,
> + state == SCMI_POWER_STATE_GENERIC_OFF);
> + if (ret) {
> + dev_warn(dev, "failed to initialize domain %d: %d\n",
> + i, ret);
> + continue;
> + }
>
> domains[i] = &scmi_pd->genpd;
> }
> @@ -126,8 +131,11 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev)
>
> return 0;
> err_rm_genpds:
> - for (i = num_domains - 1; i >= 0; i--)
> + for (i = num_domains - 1; i >= 0; i--) {
> + if (!domains[i])
> + continue;
> pm_genpd_remove(domains[i]);
> + }
>
> return ret;
> }
> --
> 2.43.0
>
--
Regards,
Sudeep
More information about the linux-arm-kernel
mailing list