diff mbox series

[v2,4/4] media: staging: tegra-vde: Power-cycle hardware on probe

Message ID 20200624150847.22672-5-digetx@gmail.com
State Deferred
Headers show
Series Tegra Video Decoder driver power management corrections | expand

Commit Message

Dmitry Osipenko June 24, 2020, 3:08 p.m. UTC
VDE partition is left turned ON after bootloader on most devices, hence
let's ensure that it's turned OFF in order to lower power leakage while
hardware is idling by turning it ON and OFF during of the driver's probe.

Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/staging/media/tegra-vde/vde.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Thierry Reding June 26, 2020, 7:48 a.m. UTC | #1
On Wed, Jun 24, 2020 at 06:08:47PM +0300, Dmitry Osipenko wrote:
> VDE partition is left turned ON after bootloader on most devices, hence
> let's ensure that it's turned OFF in order to lower power leakage while
> hardware is idling by turning it ON and OFF during of the driver's probe.
> 
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  drivers/staging/media/tegra-vde/vde.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/staging/media/tegra-vde/vde.c b/drivers/staging/media/tegra-vde/vde.c
> index b64e35b86fb4..3be96c36bf43 100644
> --- a/drivers/staging/media/tegra-vde/vde.c
> +++ b/drivers/staging/media/tegra-vde/vde.c
> @@ -1068,6 +1068,14 @@ static int tegra_vde_probe(struct platform_device *pdev)
>  	pm_runtime_use_autosuspend(dev);
>  	pm_runtime_set_autosuspend_delay(dev, 300);
>  
> +	/*
> +	 * VDE partition may be left ON after bootloader, hence let's
> +	 * power-cycle it in order to put hardware into a predictable lower
> +	 * power state.
> +	 */
> +	pm_runtime_get_sync(dev);
> +	pm_runtime_put(dev);
> +
>  	return 0;
>  
>  err_deinit_iommu:

Shouldn't this happen automatically? My understanding is that power
domains are turned on automatically before ->probe() and then unless a
runtime PM reference is taken during ->probe() it will get turned off
again after ->probe()?

Is that not happening? Is auto-suspend perhaps getting in the way
somehow?

Thierry
Dmitry Osipenko June 26, 2020, 1:42 p.m. UTC | #2
26.06.2020 10:48, Thierry Reding пишет:
> On Wed, Jun 24, 2020 at 06:08:47PM +0300, Dmitry Osipenko wrote:
>> VDE partition is left turned ON after bootloader on most devices, hence
>> let's ensure that it's turned OFF in order to lower power leakage while
>> hardware is idling by turning it ON and OFF during of the driver's probe.
>>
>> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
>> ---
>>  drivers/staging/media/tegra-vde/vde.c | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/drivers/staging/media/tegra-vde/vde.c b/drivers/staging/media/tegra-vde/vde.c
>> index b64e35b86fb4..3be96c36bf43 100644
>> --- a/drivers/staging/media/tegra-vde/vde.c
>> +++ b/drivers/staging/media/tegra-vde/vde.c
>> @@ -1068,6 +1068,14 @@ static int tegra_vde_probe(struct platform_device *pdev)
>>  	pm_runtime_use_autosuspend(dev);
>>  	pm_runtime_set_autosuspend_delay(dev, 300);
>>  
>> +	/*
>> +	 * VDE partition may be left ON after bootloader, hence let's
>> +	 * power-cycle it in order to put hardware into a predictable lower
>> +	 * power state.
>> +	 */
>> +	pm_runtime_get_sync(dev);
>> +	pm_runtime_put(dev);
>> +
>>  	return 0;
>>  
>>  err_deinit_iommu:
> 
> Shouldn't this happen automatically? My understanding is that power
> domains are turned on automatically before ->probe() and then unless a
> runtime PM reference is taken during ->probe() it will get turned off
> again after ->probe()?

Older Tegra SoCs haven't been converted to use the generic power-domain
API and today's VDE driver supports only T20 and T30 SoCs.

> Is that not happening? Is auto-suspend perhaps getting in the way
> somehow?

We're manually toggling the PD using legacy Tegra-PD API in the driver's
RPM callbacks, that's why the RPM needs to be toggled manually as well.

Perhaps this hunk could be removed if older Tergas would get a genpd
support. I guess it shouldn't be difficult to implement the genpd
support, but then there will be a compatibility trouble with older DTs,
so perhaps it's not really worth the effort.
diff mbox series

Patch

diff --git a/drivers/staging/media/tegra-vde/vde.c b/drivers/staging/media/tegra-vde/vde.c
index b64e35b86fb4..3be96c36bf43 100644
--- a/drivers/staging/media/tegra-vde/vde.c
+++ b/drivers/staging/media/tegra-vde/vde.c
@@ -1068,6 +1068,14 @@  static int tegra_vde_probe(struct platform_device *pdev)
 	pm_runtime_use_autosuspend(dev);
 	pm_runtime_set_autosuspend_delay(dev, 300);
 
+	/*
+	 * VDE partition may be left ON after bootloader, hence let's
+	 * power-cycle it in order to put hardware into a predictable lower
+	 * power state.
+	 */
+	pm_runtime_get_sync(dev);
+	pm_runtime_put(dev);
+
 	return 0;
 
 err_deinit_iommu: