pmdomain: core: fix "sd_count" field setting

Message ID 20241024094930.3221729-1-dario.binacchi@amarulasolutions.com
State New
Headers show
Series
  • pmdomain: core: fix "sd_count" field setting
Related show

Commit Message

Dario Binacchi Oct. 24, 2024, 9:49 a.m. UTC
The "sd_count" field keeps track of the number of subdomains with power
"on," so if pm_genpd_init() is called with the "is_off" parameter set to
false, it means that the power domain is already on, and therefore its
"sd_count" must be 1.

Co-developed-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>

---

 drivers/pmdomain/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ulf Hansson Oct. 28, 2024, 1:33 p.m. UTC | #1
On Thu, 24 Oct 2024 at 11:49, Dario Binacchi
<dario.binacchi@amarulasolutions.com> wrote:
>
> The "sd_count" field keeps track of the number of subdomains with power
> "on," so if pm_genpd_init() is called with the "is_off" parameter set to
> false, it means that the power domain is already on, and therefore its
> "sd_count" must be 1.

genpd_sd_counter_inc() is being called when adding subdomains. Doesn't
that work correctly for you?

>
> Co-developed-by: Michael Trimarchi <michael@amarulasolutions.com>
> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
>

Kind regards
Uffe

> ---
>
>  drivers/pmdomain/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> index 5ede0f7eda09..2df6dda98021 100644
> --- a/drivers/pmdomain/core.c
> +++ b/drivers/pmdomain/core.c
> @@ -2221,7 +2221,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
>         genpd_lock_init(genpd);
>         genpd->gov = gov;
>         INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn);
> -       atomic_set(&genpd->sd_count, 0);
> +       atomic_set(&genpd->sd_count, is_off ? 0 : 1);
>         genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON;
>         genpd->device_count = 0;
>         genpd->provider = NULL;
> --
> 2.43.0
>

To unsubscribe from this group and stop receiving emails from it, send an email to linux-amarula+unsubscribe@amarulasolutions.com.
Dario Binacchi Oct. 28, 2024, 3:07 p.m. UTC | #2
On Mon, Oct 28, 2024 at 2:34 PM Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Thu, 24 Oct 2024 at 11:49, Dario Binacchi
> <dario.binacchi@amarulasolutions.com> wrote:
> >
> > The "sd_count" field keeps track of the number of subdomains with power
> > "on," so if pm_genpd_init() is called with the "is_off" parameter set to
> > false, it means that the power domain is already on, and therefore its
> > "sd_count" must be 1.
>
> genpd_sd_counter_inc() is being called when adding subdomains. Doesn't
> that work correctly for you?

In my use case the genpd_add_subdomain() is not called.
I am working on :
drivers/pmdomain/imx/gpcv2.c
drivers/pmdomain/imx/imx8m-blk-ctrl.c

Thanks and regards,
Dario

>
> >
> > Co-developed-by: Michael Trimarchi <michael@amarulasolutions.com>
> > Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> > Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
> >
>
> Kind regards
> Uffe
>
> > ---
> >
> >  drivers/pmdomain/core.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> > index 5ede0f7eda09..2df6dda98021 100644
> > --- a/drivers/pmdomain/core.c
> > +++ b/drivers/pmdomain/core.c
> > @@ -2221,7 +2221,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
> >         genpd_lock_init(genpd);
> >         genpd->gov = gov;
> >         INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn);
> > -       atomic_set(&genpd->sd_count, 0);
> > +       atomic_set(&genpd->sd_count, is_off ? 0 : 1);
> >         genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON;
> >         genpd->device_count = 0;
> >         genpd->provider = NULL;
> > --
> > 2.43.0
> >
Ulf Hansson Oct. 28, 2024, 9:51 p.m. UTC | #3
On Mon, 28 Oct 2024 at 16:07, Dario Binacchi
<dario.binacchi@amarulasolutions.com> wrote:
>
> On Mon, Oct 28, 2024 at 2:34 PM Ulf Hansson <ulf.hansson@linaro.org> wrote:
> >
> > On Thu, 24 Oct 2024 at 11:49, Dario Binacchi
> > <dario.binacchi@amarulasolutions.com> wrote:
> > >
> > > The "sd_count" field keeps track of the number of subdomains with power
> > > "on," so if pm_genpd_init() is called with the "is_off" parameter set to
> > > false, it means that the power domain is already on, and therefore its
> > > "sd_count" must be 1.
> >
> > genpd_sd_counter_inc() is being called when adding subdomains. Doesn't
> > that work correctly for you?
>
> In my use case the genpd_add_subdomain() is not called.
> I am working on :
> drivers/pmdomain/imx/gpcv2.c
> drivers/pmdomain/imx/imx8m-blk-ctrl.c

In that case you don't have a child-domain (subdomain), which means
the sd_count should be 0.

[...]

Kind regards
Uffe

To unsubscribe from this group and stop receiving emails from it, send an email to linux-amarula+unsubscribe@amarulasolutions.com.

Patch

diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index 5ede0f7eda09..2df6dda98021 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -2221,7 +2221,7 @@  int pm_genpd_init(struct generic_pm_domain *genpd,
 	genpd_lock_init(genpd);
 	genpd->gov = gov;
 	INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn);
-	atomic_set(&genpd->sd_count, 0);
+	atomic_set(&genpd->sd_count, is_off ? 0 : 1);
 	genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON;
 	genpd->device_count = 0;
 	genpd->provider = NULL;