drivers/pmdomain/core.c | 4 ---- 1 file changed, 4 deletions(-)
This reverts commit de141a9aa52d6b2fbeb63f98975c2c72276f0878.
On RK3576, the UFS controller's power domain has a quirk that requires
it to stay enabled, infrastricture for which was added in Commit
cd3fa304ba5c ("pmdomain: core: Introduce dev_pm_genpd_rpm_always_on()").
Unfortunately, Commit de141a9aa52d ("pmdomain: core: Leave powered-on
genpds on until sync_state") appears to break this quirk wholesale. The
result is that RK3576 devices with the UFS controller enabled but unused
will freeze once pmdomain shuts off unused domains.
Revert it until a better fix can be found.
Fixes: de141a9aa52d ("pmdomain: core: Leave powered-on genpds on until sync_state")
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
drivers/pmdomain/core.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index 0006ab3d078972cc72a6dd22a2144fb31443e3da..4eba30c7c2fabcb250444fee27d7554473a4d0c2 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -1357,7 +1357,6 @@ static int genpd_runtime_resume(struct device *dev)
return ret;
}
-#ifndef CONFIG_PM_GENERIC_DOMAINS_OF
static bool pd_ignore_unused;
static int __init pd_ignore_unused_setup(char *__unused)
{
@@ -1393,7 +1392,6 @@ static int __init genpd_power_off_unused(void)
return 0;
}
late_initcall_sync(genpd_power_off_unused);
-#endif
#ifdef CONFIG_PM_SLEEP
@@ -3494,7 +3492,6 @@ void of_genpd_sync_state(struct device_node *np)
list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
if (genpd->provider == of_fwnode_handle(np)) {
genpd_lock(genpd);
- genpd->stay_on = false;
genpd_power_off(genpd, false, 0);
genpd_unlock(genpd);
}
@@ -3522,7 +3519,6 @@ static void genpd_provider_sync_state(struct device *dev)
case GENPD_SYNC_STATE_SIMPLE:
genpd_lock(genpd);
- genpd->stay_on = false;
genpd_power_off(genpd, false, 0);
genpd_unlock(genpd);
break;
---
base-commit: 5cc61f86dff464a63b6a6e4758f26557fda4d494
change-id: 20250902-rk3576-lockup-regression-5b1f1fb7ff21
Best regards,
--
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
On Tue, 2 Sept 2025 at 20:23, Nicolas Frattaroli <nicolas.frattaroli@collabora.com> wrote: > > This reverts commit de141a9aa52d6b2fbeb63f98975c2c72276f0878. I can't find this commit hash. What tree are you using when testing this? Are you trying to revert 0e789b491ba04c31de5c71249487593e386baa67 ? > > On RK3576, the UFS controller's power domain has a quirk that requires > it to stay enabled, infrastricture for which was added in Commit > cd3fa304ba5c ("pmdomain: core: Introduce dev_pm_genpd_rpm_always_on()"). > > Unfortunately, Commit de141a9aa52d ("pmdomain: core: Leave powered-on > genpds on until sync_state") appears to break this quirk wholesale. The > result is that RK3576 devices with the UFS controller enabled but unused > will freeze once pmdomain shuts off unused domains. > > Revert it until a better fix can be found. This sounds a bit vague to me, can you please clarify and elaborate a bit more so I can try to help. What does "UFS controller enabled but unused" actually mean? Has the UFS controller driver been probed successfully and thus its corresponding device been attached to its PM domain? Moreover, the behaviour of dev_pm_genpd_rpm_always_on() is orthogonal to what 0e789b491ba0 ("pmdomain: core: Leave powered-on genpds on until sync_state") brings along with its corresponding sync_state series for genpd [1]. Again, more information is needed to understand what goes wrong. Kind regards Uffe [1] https://lore.kernel.org/all/20250701114733.636510-1-ulf.hansson@linaro.org/ > > Fixes: de141a9aa52d ("pmdomain: core: Leave powered-on genpds on until sync_state") > Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com> > --- > drivers/pmdomain/core.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c > index 0006ab3d078972cc72a6dd22a2144fb31443e3da..4eba30c7c2fabcb250444fee27d7554473a4d0c2 100644 > --- a/drivers/pmdomain/core.c > +++ b/drivers/pmdomain/core.c > @@ -1357,7 +1357,6 @@ static int genpd_runtime_resume(struct device *dev) > return ret; > } > > -#ifndef CONFIG_PM_GENERIC_DOMAINS_OF > static bool pd_ignore_unused; > static int __init pd_ignore_unused_setup(char *__unused) > { > @@ -1393,7 +1392,6 @@ static int __init genpd_power_off_unused(void) > return 0; > } > late_initcall_sync(genpd_power_off_unused); > -#endif > > #ifdef CONFIG_PM_SLEEP > > @@ -3494,7 +3492,6 @@ void of_genpd_sync_state(struct device_node *np) > list_for_each_entry(genpd, &gpd_list, gpd_list_node) { > if (genpd->provider == of_fwnode_handle(np)) { > genpd_lock(genpd); > - genpd->stay_on = false; > genpd_power_off(genpd, false, 0); > genpd_unlock(genpd); > } > @@ -3522,7 +3519,6 @@ static void genpd_provider_sync_state(struct device *dev) > > case GENPD_SYNC_STATE_SIMPLE: > genpd_lock(genpd); > - genpd->stay_on = false; > genpd_power_off(genpd, false, 0); > genpd_unlock(genpd); > break; > > --- > base-commit: 5cc61f86dff464a63b6a6e4758f26557fda4d494 > change-id: 20250902-rk3576-lockup-regression-5b1f1fb7ff21 > > Best regards, > -- > Nicolas Frattaroli <nicolas.frattaroli@collabora.com> >
© 2016 - 2025 Red Hat, Inc.