diff options
| author | Johan Hovold <johan@kernel.org> | 2026-06-09 18:06:34 +0200 |
|---|---|---|
| committer | Ulf Hansson <ulfh@kernel.org> | 2026-06-11 16:05:45 +0200 |
| commit | 92b69eff8012f1c8d79f2153857208f36277e0e5 (patch) | |
| tree | 9315ca435b5a9619cd302a919399edb3f03164de /drivers/pmdomain | |
| parent | c2078a985537e43a61bfc99a905d61c10339c22f (diff) | |
pmdomain: core: fix early domain registration
A recent change switching to a dynamically allocated root device broke
platforms like rcar-sysc that registers PM domains before the PM domain
bus itself has been registered (cf. commit c5ae5a0c6112 ("pmdomain:
renesas: rcar-sysc: Add genpd OF provider at postcore_initcall")).
Defer the assignment of the parent root device until the domain is
registered with driver core to avoid it being left unset.
Fixes: a96e40f4afdc ("pmdomain: core: switch to dynamic root device")
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/CAMuHMdUHabMGJyJ7e7yp7DLC+JJc9k6NK9p4anj2wRKNuwZUng@mail.gmail.com
Signed-off-by: Johan Hovold <johan@kernel.org>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Ulf Hansson <ulfh@kernel.org>
Diffstat (limited to 'drivers/pmdomain')
| -rw-r--r-- | drivers/pmdomain/core.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 7c96e88302d3..7796042e3f37 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2323,7 +2323,6 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd) device_initialize(&genpd->dev); genpd->dev.release = genpd_provider_release; genpd->dev.bus = &genpd_provider_bus_type; - genpd->dev.parent = genpd_provider_bus; if (!genpd_is_dev_name_fw(genpd)) { dev_set_name(&genpd->dev, "%s", genpd->name); @@ -2688,6 +2687,7 @@ int of_genpd_add_provider_simple(struct device_node *np, if (!genpd_present(genpd)) return -EINVAL; + genpd->dev.parent = genpd_provider_bus; genpd->dev.of_node = np; fwnode = of_fwnode_handle(np); @@ -2782,6 +2782,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, if (!genpd_present(genpd)) goto error; + genpd->dev.parent = genpd_provider_bus; genpd->dev.of_node = np; if (sync_state && !genpd_is_no_sync_state(genpd)) { |
