Commit 3760081f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pmdomain-v6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm

Pull pmdomain fixes from Ulf Hansson:
 "Core:
   - Move the unused cleanup to a _sync initcall

  Providers:
   - mediatek: Fix race conditions at probe/remove with genpd
   - renesas: r8a77980-sysc: CR7 must be always on"

* tag 'pmdomain-v6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm:
  pmdomain: mediatek: fix race conditions with genpd
  pmdomain: renesas: r8a77980-sysc: CR7 must be always on
  pmdomain: core: Move the unused cleanup to a _sync initcall
parents 4a8e4b3c c41336f4
...@@ -1109,7 +1109,7 @@ static int __init genpd_power_off_unused(void) ...@@ -1109,7 +1109,7 @@ static int __init genpd_power_off_unused(void)
return 0; return 0;
} }
late_initcall(genpd_power_off_unused); late_initcall_sync(genpd_power_off_unused);
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
......
...@@ -561,6 +561,11 @@ static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *paren ...@@ -561,6 +561,11 @@ static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *paren
goto err_put_node; goto err_put_node;
} }
/* recursive call to add all subdomains */
ret = scpsys_add_subdomain(scpsys, child);
if (ret)
goto err_put_node;
ret = pm_genpd_add_subdomain(parent_pd, child_pd); ret = pm_genpd_add_subdomain(parent_pd, child_pd);
if (ret) { if (ret) {
dev_err(scpsys->dev, "failed to add %s subdomain to parent %s\n", dev_err(scpsys->dev, "failed to add %s subdomain to parent %s\n",
...@@ -570,11 +575,6 @@ static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *paren ...@@ -570,11 +575,6 @@ static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *paren
dev_dbg(scpsys->dev, "%s add subdomain: %s\n", parent_pd->name, dev_dbg(scpsys->dev, "%s add subdomain: %s\n", parent_pd->name,
child_pd->name); child_pd->name);
} }
/* recursive call to add all subdomains */
ret = scpsys_add_subdomain(scpsys, child);
if (ret)
goto err_put_node;
} }
return 0; return 0;
...@@ -588,9 +588,6 @@ static void scpsys_remove_one_domain(struct scpsys_domain *pd) ...@@ -588,9 +588,6 @@ static void scpsys_remove_one_domain(struct scpsys_domain *pd)
{ {
int ret; int ret;
if (scpsys_domain_is_on(pd))
scpsys_power_off(&pd->genpd);
/* /*
* We're in the error cleanup already, so we only complain, * We're in the error cleanup already, so we only complain,
* but won't emit another error on top of the original one. * but won't emit another error on top of the original one.
...@@ -600,6 +597,8 @@ static void scpsys_remove_one_domain(struct scpsys_domain *pd) ...@@ -600,6 +597,8 @@ static void scpsys_remove_one_domain(struct scpsys_domain *pd)
dev_err(pd->scpsys->dev, dev_err(pd->scpsys->dev,
"failed to remove domain '%s' : %d - state may be inconsistent\n", "failed to remove domain '%s' : %d - state may be inconsistent\n",
pd->genpd.name, ret); pd->genpd.name, ret);
if (scpsys_domain_is_on(pd))
scpsys_power_off(&pd->genpd);
clk_bulk_put(pd->num_clks, pd->clks); clk_bulk_put(pd->num_clks, pd->clks);
clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks); clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks);
......
...@@ -25,7 +25,8 @@ static const struct rcar_sysc_area r8a77980_areas[] __initconst = { ...@@ -25,7 +25,8 @@ static const struct rcar_sysc_area r8a77980_areas[] __initconst = {
PD_CPU_NOCR }, PD_CPU_NOCR },
{ "ca53-cpu3", 0x200, 3, R8A77980_PD_CA53_CPU3, R8A77980_PD_CA53_SCU, { "ca53-cpu3", 0x200, 3, R8A77980_PD_CA53_CPU3, R8A77980_PD_CA53_SCU,
PD_CPU_NOCR }, PD_CPU_NOCR },
{ "cr7", 0x240, 0, R8A77980_PD_CR7, R8A77980_PD_ALWAYS_ON }, { "cr7", 0x240, 0, R8A77980_PD_CR7, R8A77980_PD_ALWAYS_ON,
PD_CPU_NOCR },
{ "a3ir", 0x180, 0, R8A77980_PD_A3IR, R8A77980_PD_ALWAYS_ON }, { "a3ir", 0x180, 0, R8A77980_PD_A3IR, R8A77980_PD_ALWAYS_ON },
{ "a2ir0", 0x400, 0, R8A77980_PD_A2IR0, R8A77980_PD_A3IR }, { "a2ir0", 0x400, 0, R8A77980_PD_A2IR0, R8A77980_PD_A3IR },
{ "a2ir1", 0x400, 1, R8A77980_PD_A2IR1, R8A77980_PD_A3IR }, { "a2ir1", 0x400, 1, R8A77980_PD_A2IR1, R8A77980_PD_A3IR },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment