mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 18:51:21 +02:00
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. commitc5ae5a0c61("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:a96e40f4af("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>
This commit is contained in:
parent
c2078a9855
commit
92b69eff80
|
|
@ -2323,7 +2323,6 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
|
||||||
device_initialize(&genpd->dev);
|
device_initialize(&genpd->dev);
|
||||||
genpd->dev.release = genpd_provider_release;
|
genpd->dev.release = genpd_provider_release;
|
||||||
genpd->dev.bus = &genpd_provider_bus_type;
|
genpd->dev.bus = &genpd_provider_bus_type;
|
||||||
genpd->dev.parent = genpd_provider_bus;
|
|
||||||
|
|
||||||
if (!genpd_is_dev_name_fw(genpd)) {
|
if (!genpd_is_dev_name_fw(genpd)) {
|
||||||
dev_set_name(&genpd->dev, "%s", genpd->name);
|
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))
|
if (!genpd_present(genpd))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
genpd->dev.parent = genpd_provider_bus;
|
||||||
genpd->dev.of_node = np;
|
genpd->dev.of_node = np;
|
||||||
|
|
||||||
fwnode = of_fwnode_handle(np);
|
fwnode = of_fwnode_handle(np);
|
||||||
|
|
@ -2782,6 +2782,7 @@ int of_genpd_add_provider_onecell(struct device_node *np,
|
||||||
if (!genpd_present(genpd))
|
if (!genpd_present(genpd))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
genpd->dev.parent = genpd_provider_bus;
|
||||||
genpd->dev.of_node = np;
|
genpd->dev.of_node = np;
|
||||||
|
|
||||||
if (sync_state && !genpd_is_no_sync_state(genpd)) {
|
if (sync_state && !genpd_is_no_sync_state(genpd)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user