drivers/amba/bus.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Starting with commit f99508074e78 ("PM: domains: Detach on
device_unbind_cleanup()"), there is no longer a need to call
dev_pm_domain_detach() in the bus remove function. The
device_unbind_cleanup() function now handles this to avoid
invoking devres cleanup handlers while the PM domain is
powered off, which could otherwise lead to failures as
described in the above-mentioned commit.
Drop the explicit dev_pm_domain_detach() call and rely instead
on the flags passed to dev_pm_domain_attach() to power off the
domain.
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
drivers/amba/bus.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 74e34a07ef72..952c45ca6e48 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -291,15 +291,14 @@ static int amba_probe(struct device *dev)
if (ret < 0)
break;
- ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON);
+ ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON |
+ PD_FLAG_DETACH_POWER_OFF);
if (ret)
break;
ret = amba_get_enable_pclk(pcdev);
- if (ret) {
- dev_pm_domain_detach(dev, true);
+ if (ret)
break;
- }
pm_runtime_get_noresume(dev);
pm_runtime_set_active(dev);
@@ -314,7 +313,6 @@ static int amba_probe(struct device *dev)
pm_runtime_put_noidle(dev);
amba_put_disable_pclk(pcdev);
- dev_pm_domain_detach(dev, true);
} while (0);
return ret;
@@ -336,7 +334,6 @@ static void amba_remove(struct device *dev)
pm_runtime_put_noidle(dev);
amba_put_disable_pclk(pcdev);
- dev_pm_domain_detach(dev, true);
}
static void amba_shutdown(struct device *dev)
--
2.43.0
On Wed, 27 Aug 2025 at 12:03, Claudiu <claudiu.beznea@tuxon.dev> wrote:
>
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> Starting with commit f99508074e78 ("PM: domains: Detach on
> device_unbind_cleanup()"), there is no longer a need to call
> dev_pm_domain_detach() in the bus remove function. The
> device_unbind_cleanup() function now handles this to avoid
> invoking devres cleanup handlers while the PM domain is
> powered off, which could otherwise lead to failures as
> described in the above-mentioned commit.
>
> Drop the explicit dev_pm_domain_detach() call and rely instead
> on the flags passed to dev_pm_domain_attach() to power off the
> domain.
>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
If it helps, let me know if you want me to pick this up via my pmdomain tree.
Kind regards
Uffe
> ---
> drivers/amba/bus.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> index 74e34a07ef72..952c45ca6e48 100644
> --- a/drivers/amba/bus.c
> +++ b/drivers/amba/bus.c
> @@ -291,15 +291,14 @@ static int amba_probe(struct device *dev)
> if (ret < 0)
> break;
>
> - ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON);
> + ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON |
> + PD_FLAG_DETACH_POWER_OFF);
> if (ret)
> break;
>
> ret = amba_get_enable_pclk(pcdev);
> - if (ret) {
> - dev_pm_domain_detach(dev, true);
> + if (ret)
> break;
> - }
>
> pm_runtime_get_noresume(dev);
> pm_runtime_set_active(dev);
> @@ -314,7 +313,6 @@ static int amba_probe(struct device *dev)
> pm_runtime_put_noidle(dev);
>
> amba_put_disable_pclk(pcdev);
> - dev_pm_domain_detach(dev, true);
> } while (0);
>
> return ret;
> @@ -336,7 +334,6 @@ static void amba_remove(struct device *dev)
> pm_runtime_put_noidle(dev);
>
> amba_put_disable_pclk(pcdev);
> - dev_pm_domain_detach(dev, true);
> }
>
> static void amba_shutdown(struct device *dev)
> --
> 2.43.0
>
Hi, Ulf,
On 8/27/25 14:35, Ulf Hansson wrote:
> On Wed, 27 Aug 2025 at 12:03, Claudiu <claudiu.beznea@tuxon.dev> wrote:
>>
>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>
>> Starting with commit f99508074e78 ("PM: domains: Detach on
>> device_unbind_cleanup()"), there is no longer a need to call
>> dev_pm_domain_detach() in the bus remove function. The
>> device_unbind_cleanup() function now handles this to avoid
>> invoking devres cleanup handlers while the PM domain is
>> powered off, which could otherwise lead to failures as
>> described in the above-mentioned commit.
>>
>> Drop the explicit dev_pm_domain_detach() call and rely instead
>> on the flags passed to dev_pm_domain_attach() to power off the
>> domain.
>>
>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
>
> If it helps, let me know if you want me to pick this up via my pmdomain tree.
This wasn't picked up so far. Could you please take it through your tree if
everything looks good?
Thank you,
Claudiu
>
> Kind regards
> Uffe
>
>
>> ---
>> drivers/amba/bus.c | 9 +++------
>> 1 file changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
>> index 74e34a07ef72..952c45ca6e48 100644
>> --- a/drivers/amba/bus.c
>> +++ b/drivers/amba/bus.c
>> @@ -291,15 +291,14 @@ static int amba_probe(struct device *dev)
>> if (ret < 0)
>> break;
>>
>> - ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON);
>> + ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON |
>> + PD_FLAG_DETACH_POWER_OFF);
>> if (ret)
>> break;
>>
>> ret = amba_get_enable_pclk(pcdev);
>> - if (ret) {
>> - dev_pm_domain_detach(dev, true);
>> + if (ret)
>> break;
>> - }
>>
>> pm_runtime_get_noresume(dev);
>> pm_runtime_set_active(dev);
>> @@ -314,7 +313,6 @@ static int amba_probe(struct device *dev)
>> pm_runtime_put_noidle(dev);
>>
>> amba_put_disable_pclk(pcdev);
>> - dev_pm_domain_detach(dev, true);
>> } while (0);
>>
>> return ret;
>> @@ -336,7 +334,6 @@ static void amba_remove(struct device *dev)
>> pm_runtime_put_noidle(dev);
>>
>> amba_put_disable_pclk(pcdev);
>> - dev_pm_domain_detach(dev, true);
>> }
>>
>> static void amba_shutdown(struct device *dev)
>> --
>> 2.43.0
>>
>
>
On Tue, 4 Nov 2025 at 15:04, Claudiu Beznea <claudiu.beznea@tuxon.dev> wrote:
>
> Hi, Ulf,
>
> On 8/27/25 14:35, Ulf Hansson wrote:
> > On Wed, 27 Aug 2025 at 12:03, Claudiu <claudiu.beznea@tuxon.dev> wrote:
> >>
> >> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >>
> >> Starting with commit f99508074e78 ("PM: domains: Detach on
> >> device_unbind_cleanup()"), there is no longer a need to call
> >> dev_pm_domain_detach() in the bus remove function. The
> >> device_unbind_cleanup() function now handles this to avoid
> >> invoking devres cleanup handlers while the PM domain is
> >> powered off, which could otherwise lead to failures as
> >> described in the above-mentioned commit.
> >>
> >> Drop the explicit dev_pm_domain_detach() call and rely instead
> >> on the flags passed to dev_pm_domain_attach() to power off the
> >> domain.
> >>
> >> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >
> > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
> >
> > If it helps, let me know if you want me to pick this up via my pmdomain tree.
>
> This wasn't picked up so far. Could you please take it through your tree if
> everything looks good?
>
> Thank you,
> Claudiu
Okay, I have picked this up via my pmdomain tree and queued it for
v6.19 on my next branch.
If anyone has objections, please let me know.
Kind regards
Uffe
> >
> > Kind regards
> > Uffe
> >
> >
> >> ---
> >> drivers/amba/bus.c | 9 +++------
> >> 1 file changed, 3 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> >> index 74e34a07ef72..952c45ca6e48 100644
> >> --- a/drivers/amba/bus.c
> >> +++ b/drivers/amba/bus.c
> >> @@ -291,15 +291,14 @@ static int amba_probe(struct device *dev)
> >> if (ret < 0)
> >> break;
> >>
> >> - ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON);
> >> + ret = dev_pm_domain_attach(dev, PD_FLAG_ATTACH_POWER_ON |
> >> + PD_FLAG_DETACH_POWER_OFF);
> >> if (ret)
> >> break;
> >>
> >> ret = amba_get_enable_pclk(pcdev);
> >> - if (ret) {
> >> - dev_pm_domain_detach(dev, true);
> >> + if (ret)
> >> break;
> >> - }
> >>
> >> pm_runtime_get_noresume(dev);
> >> pm_runtime_set_active(dev);
> >> @@ -314,7 +313,6 @@ static int amba_probe(struct device *dev)
> >> pm_runtime_put_noidle(dev);
> >>
> >> amba_put_disable_pclk(pcdev);
> >> - dev_pm_domain_detach(dev, true);
> >> } while (0);
> >>
> >> return ret;
> >> @@ -336,7 +334,6 @@ static void amba_remove(struct device *dev)
> >> pm_runtime_put_noidle(dev);
> >>
> >> amba_put_disable_pclk(pcdev);
> >> - dev_pm_domain_detach(dev, true);
> >> }
> >>
> >> static void amba_shutdown(struct device *dev)
> >> --
> >> 2.43.0
> >>
> >
> >
>
© 2016 - 2026 Red Hat, Inc.