[PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers

Ulf Hansson posted 24 patches 3 months, 1 week ago
[PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Ulf Hansson 3 months, 1 week ago
Unless the typical platform driver that act as genpd provider, has its own
->sync_state() callback implemented let's default to use
of_genpd_sync_state().

More precisely, while adding a genpd OF provider let's assign the
->sync_state() callback, in case the fwnode has a device and its driver
doesn't have the ->sync_state() set already. In this way the typical
platform driver doesn't need to assign ->sync_state(), unless it has some
additional things to manage beyond genpds.

Suggested-by: Saravana Kannan <saravanak@google.com>
Tested-by: Hiago De Franco <hiago.franco@toradex.com> # Colibri iMX8X
Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> # TI AM62A,Xilinx ZynqMP ZCU106
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
 drivers/pmdomain/core.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index ca47f91b9e91..5cef6de60c72 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -2600,6 +2600,11 @@ static bool genpd_present(const struct generic_pm_domain *genpd)
 	return ret;
 }
 
+static void genpd_sync_state(struct device *dev)
+{
+	return of_genpd_sync_state(dev->of_node);
+}
+
 /**
  * of_genpd_add_provider_simple() - Register a simple PM domain provider
  * @np: Device node pointer associated with the PM domain provider.
@@ -2628,6 +2633,8 @@ int of_genpd_add_provider_simple(struct device_node *np,
 	if (!dev && !genpd_is_no_sync_state(genpd)) {
 		genpd->sync_state = GENPD_SYNC_STATE_SIMPLE;
 		device_set_node(&genpd->dev, fwnode);
+	} else {
+		dev_set_drv_sync_state(dev, genpd_sync_state);
 	}
 
 	put_device(dev);
@@ -2700,6 +2707,8 @@ int of_genpd_add_provider_onecell(struct device_node *np,
 	dev = get_dev_from_fwnode(fwnode);
 	if (!dev)
 		sync_state = true;
+	else
+		dev_set_drv_sync_state(dev, genpd_sync_state);
 
 	put_device(dev);
 
-- 
2.43.0
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Jon Hunter 2 months, 1 week ago
Hi Ulf,

On 01/07/2025 12:47, Ulf Hansson wrote:
> Unless the typical platform driver that act as genpd provider, has its own
> ->sync_state() callback implemented let's default to use
> of_genpd_sync_state().
> 
> More precisely, while adding a genpd OF provider let's assign the
> ->sync_state() callback, in case the fwnode has a device and its driver
> doesn't have the ->sync_state() set already. In this way the typical
> platform driver doesn't need to assign ->sync_state(), unless it has some
> additional things to manage beyond genpds.
> 
> Suggested-by: Saravana Kannan <saravanak@google.com>
> Tested-by: Hiago De Franco <hiago.franco@toradex.com> # Colibri iMX8X
> Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> # TI AM62A,Xilinx ZynqMP ZCU106
> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
> ---
>   drivers/pmdomain/core.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> index ca47f91b9e91..5cef6de60c72 100644
> --- a/drivers/pmdomain/core.c
> +++ b/drivers/pmdomain/core.c
> @@ -2600,6 +2600,11 @@ static bool genpd_present(const struct generic_pm_domain *genpd)
>   	return ret;
>   }
>   
> +static void genpd_sync_state(struct device *dev)
> +{
> +	return of_genpd_sync_state(dev->of_node);
> +}
> +
>   /**
>    * of_genpd_add_provider_simple() - Register a simple PM domain provider
>    * @np: Device node pointer associated with the PM domain provider.
> @@ -2628,6 +2633,8 @@ int of_genpd_add_provider_simple(struct device_node *np,
>   	if (!dev && !genpd_is_no_sync_state(genpd)) {
>   		genpd->sync_state = GENPD_SYNC_STATE_SIMPLE;
>   		device_set_node(&genpd->dev, fwnode);
> +	} else {
> +		dev_set_drv_sync_state(dev, genpd_sync_state);
>   	}
>   
>   	put_device(dev);
> @@ -2700,6 +2707,8 @@ int of_genpd_add_provider_onecell(struct device_node *np,
>   	dev = get_dev_from_fwnode(fwnode);
>   	if (!dev)
>   		sync_state = true;
> +	else
> +		dev_set_drv_sync_state(dev, genpd_sync_state);
>   
>   	put_device(dev);
>   

Following this change I am seeing the following warning on our Tegra194
devices ...

  WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 17000000.gpu
  WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 3960000.cec
  WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 15380000.nvjpg
  WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 154c0000.nvenc
  WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 15a80000.nvenc

Per your change [0], the 'GENPD_FLAG_NO_SYNC_STATE' is set for Tegra
and so should Tegra be using of_genpd_sync_state() by default?

Thanks
Jon

[0] https://lore.kernel.org/all/20250701114733.636510-10-ulf.hansson@linaro.org/
-- 
nvpublic
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Ulf Hansson 1 month, 3 weeks ago
On Thu, 31 Jul 2025 at 17:07, Jon Hunter <jonathanh@nvidia.com> wrote:
>
> Hi Ulf,
>
> On 01/07/2025 12:47, Ulf Hansson wrote:
> > Unless the typical platform driver that act as genpd provider, has its own
> > ->sync_state() callback implemented let's default to use
> > of_genpd_sync_state().
> >
> > More precisely, while adding a genpd OF provider let's assign the
> > ->sync_state() callback, in case the fwnode has a device and its driver
> > doesn't have the ->sync_state() set already. In this way the typical
> > platform driver doesn't need to assign ->sync_state(), unless it has some
> > additional things to manage beyond genpds.
> >
> > Suggested-by: Saravana Kannan <saravanak@google.com>
> > Tested-by: Hiago De Franco <hiago.franco@toradex.com> # Colibri iMX8X
> > Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> # TI AM62A,Xilinx ZynqMP ZCU106
> > Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
> > ---
> >   drivers/pmdomain/core.c | 9 +++++++++
> >   1 file changed, 9 insertions(+)
> >
> > diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> > index ca47f91b9e91..5cef6de60c72 100644
> > --- a/drivers/pmdomain/core.c
> > +++ b/drivers/pmdomain/core.c
> > @@ -2600,6 +2600,11 @@ static bool genpd_present(const struct generic_pm_domain *genpd)
> >       return ret;
> >   }
> >
> > +static void genpd_sync_state(struct device *dev)
> > +{
> > +     return of_genpd_sync_state(dev->of_node);
> > +}
> > +
> >   /**
> >    * of_genpd_add_provider_simple() - Register a simple PM domain provider
> >    * @np: Device node pointer associated with the PM domain provider.
> > @@ -2628,6 +2633,8 @@ int of_genpd_add_provider_simple(struct device_node *np,
> >       if (!dev && !genpd_is_no_sync_state(genpd)) {
> >               genpd->sync_state = GENPD_SYNC_STATE_SIMPLE;
> >               device_set_node(&genpd->dev, fwnode);
> > +     } else {
> > +             dev_set_drv_sync_state(dev, genpd_sync_state);
> >       }
> >
> >       put_device(dev);
> > @@ -2700,6 +2707,8 @@ int of_genpd_add_provider_onecell(struct device_node *np,
> >       dev = get_dev_from_fwnode(fwnode);
> >       if (!dev)
> >               sync_state = true;
> > +     else
> > +             dev_set_drv_sync_state(dev, genpd_sync_state);
> >
> >       put_device(dev);
> >
>
> Following this change I am seeing the following warning on our Tegra194
> devices ...
>
>   WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 17000000.gpu
>   WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 3960000.cec
>   WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 15380000.nvjpg
>   WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 154c0000.nvenc
>   WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 15a80000.nvenc
>
> Per your change [0], the 'GENPD_FLAG_NO_SYNC_STATE' is set for Tegra
> and so should Tegra be using of_genpd_sync_state() by default?

This is a different power-domain provider (bpmp) in
drivers/firmware/tegra/bpmp.c and
drivers/pmdomain/tegra/powergate-bpmp.c.

For the bpmp we don't need GENPD_FLAG_NO_SYNC_STATE, as the
power-domain provider is described along with the
"nvidia,tegra186-bpmp" compatible string. In the other case
(drivers/soc/tegra/pmc.c) the "core-domain" and "powergates" are
described through child-nodes, while ->sync_state() is managed by the
parent-device-node.

In the bpmp case there is no ->sync_state() callback assigned, which
means genpd decides to assign a default one.

The reason for the warnings above is because we are still waiting for
those devices to be probed, hence the ->sync_state() callback is still
waiting to be invoked. Enforcing ->sync_state() callback to be invoked
can be done via user-space if that is needed.

Did that make sense?

>
> Thanks
> Jon
>
> [0] https://lore.kernel.org/all/20250701114733.636510-10-ulf.hansson@linaro.org/
> --
> nvpublic
>

Kind regards
Uffe
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Jon Hunter 1 month ago
Hi Ulf,

On 11/08/2025 13:11, Ulf Hansson wrote:
> On Thu, 31 Jul 2025 at 17:07, Jon Hunter <jonathanh@nvidia.com> wrote:
>>
>> Hi Ulf,
>>
>> On 01/07/2025 12:47, Ulf Hansson wrote:
>>> Unless the typical platform driver that act as genpd provider, has its own
>>> ->sync_state() callback implemented let's default to use
>>> of_genpd_sync_state().
>>>
>>> More precisely, while adding a genpd OF provider let's assign the
>>> ->sync_state() callback, in case the fwnode has a device and its driver
>>> doesn't have the ->sync_state() set already. In this way the typical
>>> platform driver doesn't need to assign ->sync_state(), unless it has some
>>> additional things to manage beyond genpds.
>>>
>>> Suggested-by: Saravana Kannan <saravanak@google.com>
>>> Tested-by: Hiago De Franco <hiago.franco@toradex.com> # Colibri iMX8X
>>> Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> # TI AM62A,Xilinx ZynqMP ZCU106
>>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>>> ---
>>>    drivers/pmdomain/core.c | 9 +++++++++
>>>    1 file changed, 9 insertions(+)
>>>
>>> diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
>>> index ca47f91b9e91..5cef6de60c72 100644
>>> --- a/drivers/pmdomain/core.c
>>> +++ b/drivers/pmdomain/core.c
>>> @@ -2600,6 +2600,11 @@ static bool genpd_present(const struct generic_pm_domain *genpd)
>>>        return ret;
>>>    }
>>>
>>> +static void genpd_sync_state(struct device *dev)
>>> +{
>>> +     return of_genpd_sync_state(dev->of_node);
>>> +}
>>> +
>>>    /**
>>>     * of_genpd_add_provider_simple() - Register a simple PM domain provider
>>>     * @np: Device node pointer associated with the PM domain provider.
>>> @@ -2628,6 +2633,8 @@ int of_genpd_add_provider_simple(struct device_node *np,
>>>        if (!dev && !genpd_is_no_sync_state(genpd)) {
>>>                genpd->sync_state = GENPD_SYNC_STATE_SIMPLE;
>>>                device_set_node(&genpd->dev, fwnode);
>>> +     } else {
>>> +             dev_set_drv_sync_state(dev, genpd_sync_state);
>>>        }
>>>
>>>        put_device(dev);
>>> @@ -2700,6 +2707,8 @@ int of_genpd_add_provider_onecell(struct device_node *np,
>>>        dev = get_dev_from_fwnode(fwnode);
>>>        if (!dev)
>>>                sync_state = true;
>>> +     else
>>> +             dev_set_drv_sync_state(dev, genpd_sync_state);
>>>
>>>        put_device(dev);
>>>
>>
>> Following this change I am seeing the following warning on our Tegra194
>> devices ...
>>
>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 17000000.gpu
>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 3960000.cec
>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 15380000.nvjpg
>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 154c0000.nvenc
>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 15a80000.nvenc
>>
>> Per your change [0], the 'GENPD_FLAG_NO_SYNC_STATE' is set for Tegra
>> and so should Tegra be using of_genpd_sync_state() by default?
> 
> This is a different power-domain provider (bpmp) in
> drivers/firmware/tegra/bpmp.c and
> drivers/pmdomain/tegra/powergate-bpmp.c.
> 
> For the bpmp we don't need GENPD_FLAG_NO_SYNC_STATE, as the
> power-domain provider is described along with the
> "nvidia,tegra186-bpmp" compatible string. In the other case
> (drivers/soc/tegra/pmc.c) the "core-domain" and "powergates" are
> described through child-nodes, while ->sync_state() is managed by the
> parent-device-node.
> 
> In the bpmp case there is no ->sync_state() callback assigned, which
> means genpd decides to assign a default one.
> 
> The reason for the warnings above is because we are still waiting for
> those devices to be probed, hence the ->sync_state() callback is still
> waiting to be invoked. Enforcing ->sync_state() callback to be invoked
> can be done via user-space if that is needed.
> 
> Did that make sense?

Sorry for the delay, I was on vacation. Yes makes sense and drivers for 
some of the above drivers are not yet upstreamed to mainline and so this 
would be expected for now.

Thanks
Jon

-- 
nvpublic
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Jon Hunter 1 week, 6 days ago
Hi Ulf,

On 03/09/2025 13:33, Jon Hunter wrote:

...

>>> Following this change I am seeing the following warning on our Tegra194
>>> devices ...
>>>
>>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 
>>> 17000000.gpu
>>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 3960000.cec
>>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 
>>> 15380000.nvjpg
>>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 
>>> 154c0000.nvenc
>>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 
>>> 15a80000.nvenc
>>>
>>> Per your change [0], the 'GENPD_FLAG_NO_SYNC_STATE' is set for Tegra
>>> and so should Tegra be using of_genpd_sync_state() by default?
>>
>> This is a different power-domain provider (bpmp) in
>> drivers/firmware/tegra/bpmp.c and
>> drivers/pmdomain/tegra/powergate-bpmp.c.
>>
>> For the bpmp we don't need GENPD_FLAG_NO_SYNC_STATE, as the
>> power-domain provider is described along with the
>> "nvidia,tegra186-bpmp" compatible string. In the other case
>> (drivers/soc/tegra/pmc.c) the "core-domain" and "powergates" are
>> described through child-nodes, while ->sync_state() is managed by the
>> parent-device-node.
>>
>> In the bpmp case there is no ->sync_state() callback assigned, which
>> means genpd decides to assign a default one.
>>
>> The reason for the warnings above is because we are still waiting for
>> those devices to be probed, hence the ->sync_state() callback is still
>> waiting to be invoked. Enforcing ->sync_state() callback to be invoked
>> can be done via user-space if that is needed.
>>
>> Did that make sense?
> 
> Sorry for the delay, I was on vacation. Yes makes sense and drivers for 
> some of the above drivers are not yet upstreamed to mainline and so this 
> would be expected for now.


I have been doing more testing and do see a lot of "tegra-bpmp bpmp: 
sync_state() pending due to" on our platforms for basically are driver 
that is built as a module. It seems a bit noisy given that these do 
eventually probe OK. I am wondering if this should be more of a 
dev_info() or dev_dbg() print?

Cheers
Jon

-- 
nvpublic

Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Saravana Kannan 1 week, 5 days ago
On Wed, Sep 24, 2025 at 4:41 AM Jon Hunter <jonathanh@nvidia.com> wrote:
>
> Hi Ulf,
>
> On 03/09/2025 13:33, Jon Hunter wrote:
>
> ...
>
> >>> Following this change I am seeing the following warning on our Tegra194
> >>> devices ...
> >>>
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 17000000.gpu
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 3960000.cec
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 15380000.nvjpg
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 154c0000.nvenc
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 15a80000.nvenc
> >>>
> >>> Per your change [0], the 'GENPD_FLAG_NO_SYNC_STATE' is set for Tegra
> >>> and so should Tegra be using of_genpd_sync_state() by default?
> >>
> >> This is a different power-domain provider (bpmp) in
> >> drivers/firmware/tegra/bpmp.c and
> >> drivers/pmdomain/tegra/powergate-bpmp.c.
> >>
> >> For the bpmp we don't need GENPD_FLAG_NO_SYNC_STATE, as the
> >> power-domain provider is described along with the
> >> "nvidia,tegra186-bpmp" compatible string. In the other case
> >> (drivers/soc/tegra/pmc.c) the "core-domain" and "powergates" are
> >> described through child-nodes, while ->sync_state() is managed by the
> >> parent-device-node.
> >>
> >> In the bpmp case there is no ->sync_state() callback assigned, which
> >> means genpd decides to assign a default one.
> >>
> >> The reason for the warnings above is because we are still waiting for
> >> those devices to be probed, hence the ->sync_state() callback is still
> >> waiting to be invoked. Enforcing ->sync_state() callback to be invoked
> >> can be done via user-space if that is needed.
> >>
> >> Did that make sense?
> >
> > Sorry for the delay, I was on vacation. Yes makes sense and drivers for
> > some of the above drivers are not yet upstreamed to mainline and so this
> > would be expected for now.
>
>
> I have been doing more testing and do see a lot of "tegra-bpmp bpmp:
> sync_state() pending due to" on our platforms for basically are driver
> that is built as a module.

It being "built as a module" is not reason enough for this warning to
happen though. One of the main points of fw_devlink is for things to
work just as well with modules.

In this particular system, do you never plan to load the modules? Or
is the module load just missing this timeout by a few seconds or
something?

If these can be turned off, why not turn these off using the sysfs
file or the timeout commandline option to turn them off? You are
burning power by leaving these on. A warning seems appropriate to me.

-Saravana
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Jon Hunter 1 week, 4 days ago
On 25/09/2025 23:31, Saravana Kannan wrote:

...

>> I have been doing more testing and do see a lot of "tegra-bpmp bpmp:
>> sync_state() pending due to" on our platforms for basically are driver
>> that is built as a module.
> 
> It being "built as a module" is not reason enough for this warning to
> happen though. One of the main points of fw_devlink is for things to
> work just as well with modules.
> 
> In this particular system, do you never plan to load the modules? Or
> is the module load just missing this timeout by a few seconds or
> something?

We absolutely do load the drivers. Initially, I observed cases where 
drivers are missing, but doing more testing with the necessary drivers 
present, I still see such messages. A lot of our test infrastructure is 
set up to use NFS for mounting to the rootfs and so I am wondering if 
that can also be a factor?

> If these can be turned off, why not turn these off using the sysfs
> file or the timeout commandline option to turn them off? You are
> burning power by leaving these on. A warning seems appropriate to me.

Again the drivers get loaded, so that shouldn't be the case.

Jon

-- 
nvpublic
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Ulf Hansson 1 week ago
On Fri, 26 Sept 2025 at 17:32, Jon Hunter <jonathanh@nvidia.com> wrote:
>
>
> On 25/09/2025 23:31, Saravana Kannan wrote:
>
> ...
>
> >> I have been doing more testing and do see a lot of "tegra-bpmp bpmp:
> >> sync_state() pending due to" on our platforms for basically are driver
> >> that is built as a module.
> >
> > It being "built as a module" is not reason enough for this warning to
> > happen though. One of the main points of fw_devlink is for things to
> > work just as well with modules.
> >
> > In this particular system, do you never plan to load the modules? Or
> > is the module load just missing this timeout by a few seconds or
> > something?
>
> We absolutely do load the drivers. Initially, I observed cases where
> drivers are missing, but doing more testing with the necessary drivers
> present, I still see such messages. A lot of our test infrastructure is
> set up to use NFS for mounting to the rootfs and so I am wondering if
> that can also be a factor?
>
> > If these can be turned off, why not turn these off using the sysfs
> > file or the timeout commandline option to turn them off? You are
> > burning power by leaving these on. A warning seems appropriate to me.
>
> Again the drivers get loaded, so that shouldn't be the case.
>

I realized that we also have an orthogonal, but related problem.

In fact, the genpd in question actually may already have been
powered-off, completely defeating the purpose of the printed warning
that we are discussing.

In genpd we enable the ->sync_state() support, no matter whether the
genpd is powered-on or powered-off at initialization. Although, it's
only when a genpd is powered-on at init, when we prevent it from being
powered-off until the ->sync_state() callback gets invoked. Ideally,
we should be able to skip enabling the ->sync_state() support for
genpd in these cases, possibly silencing some of these prints. I will
have a look at this and get back to you.

Kind regards
Uffe
Re: [PATCH v3 20/24] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers
Posted by Ulf Hansson 1 week, 6 days ago
On Wed, 24 Sept 2025 at 13:41, Jon Hunter <jonathanh@nvidia.com> wrote:
>
> Hi Ulf,
>
> On 03/09/2025 13:33, Jon Hunter wrote:
>
> ...
>
> >>> Following this change I am seeing the following warning on our Tegra194
> >>> devices ...
> >>>
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 17000000.gpu
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to 3960000.cec
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 15380000.nvjpg
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 154c0000.nvenc
> >>>    WARNING KERN tegra-bpmp bpmp: sync_state() pending due to
> >>> 15a80000.nvenc
> >>>
> >>> Per your change [0], the 'GENPD_FLAG_NO_SYNC_STATE' is set for Tegra
> >>> and so should Tegra be using of_genpd_sync_state() by default?
> >>
> >> This is a different power-domain provider (bpmp) in
> >> drivers/firmware/tegra/bpmp.c and
> >> drivers/pmdomain/tegra/powergate-bpmp.c.
> >>
> >> For the bpmp we don't need GENPD_FLAG_NO_SYNC_STATE, as the
> >> power-domain provider is described along with the
> >> "nvidia,tegra186-bpmp" compatible string. In the other case
> >> (drivers/soc/tegra/pmc.c) the "core-domain" and "powergates" are
> >> described through child-nodes, while ->sync_state() is managed by the
> >> parent-device-node.
> >>
> >> In the bpmp case there is no ->sync_state() callback assigned, which
> >> means genpd decides to assign a default one.
> >>
> >> The reason for the warnings above is because we are still waiting for
> >> those devices to be probed, hence the ->sync_state() callback is still
> >> waiting to be invoked. Enforcing ->sync_state() callback to be invoked
> >> can be done via user-space if that is needed.
> >>
> >> Did that make sense?
> >
> > Sorry for the delay, I was on vacation. Yes makes sense and drivers for
> > some of the above drivers are not yet upstreamed to mainline and so this
> > would be expected for now.
>
>
> I have been doing more testing and do see a lot of "tegra-bpmp bpmp:
> sync_state() pending due to" on our platforms for basically are driver
> that is built as a module. It seems a bit noisy given that these do
> eventually probe OK. I am wondering if this should be more of a
> dev_info() or dev_dbg() print?

Yes, I agree. We have had similar reports for other platforms too.

I intend to send a patch for this in the next day or so.

Kind regards
Uffe