diff mbox series

[V2,11/13] devfreq: tegra30: Migrate to dev_pm_opp_set_opp()

Message ID f0341655361aa0107266ed9c838aa8bcfe50a3ed.1611738418.git.viresh.kumar@linaro.org
State Accepted
Commit c7f142190d91a7e8b3df0a6ef9fabb591fb83c71
Headers show
Series None | expand

Commit Message

Viresh Kumar Jan. 27, 2021, 9:10 a.m. UTC
dev_pm_opp_set_bw() is getting removed and dev_pm_opp_set_opp() should
be used instead. Migrate to the new API.

We don't want the OPP core to manage the clk for this driver, migrate to
dev_pm_opp_of_add_table_noclk() to make sure dev_pm_opp_set_opp()
doesn't have any side effects.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

---
Dmitry,

This is based over the patches sent here:

https://lore.kernel.org/lkml/6c2160ff30a8f421563793020264cf9f533f293c.1611738228.git.viresh.kumar@linaro.org/

This should fix the problem you mentioned earlier. Will push this for
linux-next unless you have any issues with it.

 drivers/devfreq/tegra30-devfreq.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.25.0.rc1.19.g042ed3e048af

Comments

Viresh Kumar Jan. 27, 2021, 10:02 a.m. UTC | #1
On 27-01-21, 14:40, Viresh Kumar wrote:
> dev_pm_opp_set_bw() is getting removed and dev_pm_opp_set_opp() should

> be used instead. Migrate to the new API.

> 

> We don't want the OPP core to manage the clk for this driver, migrate to

> dev_pm_opp_of_add_table_noclk() to make sure dev_pm_opp_set_opp()

> doesn't have any side effects.

> 

> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

> ---

> Dmitry,

> 

> This is based over the patches sent here:

> 

> https://lore.kernel.org/lkml/6c2160ff30a8f421563793020264cf9f533f293c.1611738228.git.viresh.kumar@linaro.org/

> 

> This should fix the problem you mentioned earlier. Will push this for

> linux-next unless you have any issues with it.

> 

>  drivers/devfreq/tegra30-devfreq.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

> 

> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c

> index 117cad7968ab..31f7dec5990b 100644

> --- a/drivers/devfreq/tegra30-devfreq.c

> +++ b/drivers/devfreq/tegra30-devfreq.c

> @@ -647,7 +647,7 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq,

>  		return PTR_ERR(opp);

>  	}

>  

> -	ret = dev_pm_opp_set_bw(dev, opp);

> +	ret = dev_pm_opp_set_opp(dev, opp);

>  	dev_pm_opp_put(opp);

>  

>  	return ret;

> @@ -849,7 +849,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)

>  		return err;

>  	}

>  

> -	err = dev_pm_opp_of_add_table(&pdev->dev);

> +	err = dev_pm_opp_of_add_table_noclk(&pdev->dev);


Plus this, somehow was left uncommited in my tree :(

diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
index 31f7dec5990b..ce83f883ca65 100644
--- a/drivers/devfreq/tegra30-devfreq.c
+++ b/drivers/devfreq/tegra30-devfreq.c
@@ -849,7 +849,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
                return err;
        }
 
-       err = dev_pm_opp_of_add_table_noclk(&pdev->dev);
+       err = dev_pm_opp_of_add_table_noclk(&pdev->dev, 0);
        if (err) {
                dev_err(&pdev->dev, "Failed to add OPP table: %d\n", err);
                goto put_hw;

-- 
viresh
Dmitry Osipenko Jan. 27, 2021, 3:58 p.m. UTC | #2
27.01.2021 13:02, Viresh Kumar пишет:
> On 27-01-21, 14:40, Viresh Kumar wrote:

>> dev_pm_opp_set_bw() is getting removed and dev_pm_opp_set_opp() should

>> be used instead. Migrate to the new API.

>>

>> We don't want the OPP core to manage the clk for this driver, migrate to

>> dev_pm_opp_of_add_table_noclk() to make sure dev_pm_opp_set_opp()

>> doesn't have any side effects.

>>

>> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

>> ---

>> Dmitry,

>>

>> This is based over the patches sent here:

>>

>> https://lore.kernel.org/lkml/6c2160ff30a8f421563793020264cf9f533f293c.1611738228.git.viresh.kumar@linaro.org/

>>

>> This should fix the problem you mentioned earlier. Will push this for

>> linux-next unless you have any issues with it.

>>

>>  drivers/devfreq/tegra30-devfreq.c | 4 ++--

>>  1 file changed, 2 insertions(+), 2 deletions(-)

>>

>> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c

>> index 117cad7968ab..31f7dec5990b 100644

>> --- a/drivers/devfreq/tegra30-devfreq.c

>> +++ b/drivers/devfreq/tegra30-devfreq.c

>> @@ -647,7 +647,7 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq,

>>  		return PTR_ERR(opp);

>>  	}

>>  

>> -	ret = dev_pm_opp_set_bw(dev, opp);

>> +	ret = dev_pm_opp_set_opp(dev, opp);

>>  	dev_pm_opp_put(opp);

>>  

>>  	return ret;

>> @@ -849,7 +849,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)

>>  		return err;

>>  	}

>>  

>> -	err = dev_pm_opp_of_add_table(&pdev->dev);

>> +	err = dev_pm_opp_of_add_table_noclk(&pdev->dev);

> 

> Plus this, somehow was left uncommited in my tree :(

> 

> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c

> index 31f7dec5990b..ce83f883ca65 100644

> --- a/drivers/devfreq/tegra30-devfreq.c

> +++ b/drivers/devfreq/tegra30-devfreq.c

> @@ -849,7 +849,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)

>                 return err;

>         }

>  

> -       err = dev_pm_opp_of_add_table_noclk(&pdev->dev);

> +       err = dev_pm_opp_of_add_table_noclk(&pdev->dev, 0);

>         if (err) {

>                 dev_err(&pdev->dev, "Failed to add OPP table: %d\n", err);

>                 goto put_hw;

> 


Sadly this doesn't work because we missed that clk is assigned to
opp_table when OPP table is allocated and not when it's added to device.

Hence we're now set back to the dev_pm_opp_clear_clk() variant.

What about to add a new OPP API which will allow OPP users to configure
behaviour that user wants from OPP core in a generic way, something like
this:

struct opp_config {
	bool no_clk;
	...
};

devm_pm_opp_set_config(dev, struct opp_config);
dev_pm_opp_set_config(dev, struct opp_config);
dev_pm_opp_unset_config(dev);

Or maybe even rename it dev_pm_opp_allocate_table(dev, struct
opp_config), which will allow users to directly allocate OPP table
instead of relying on the implicit allocations. Then there won't be a
need for drivers to use a dummy devm_pm_opp_set_clkname(dev, NULL) just
to allocate the table usable for dev_pm_opp_set_rate().
Viresh Kumar Jan. 28, 2021, 7:01 a.m. UTC | #3
On 27-01-21, 18:58, Dmitry Osipenko wrote:
> Sadly this doesn't work because we missed that clk is assigned to

> opp_table when OPP table is allocated and not when it's added to device.


Ahh, I missed that.

I have bumped up the other patchset to V2, that should work fine with
this patch for tegra30 (this shouldn't require any update).

Everything is pushed in opp/linux-next, fetch and try it. Thanks.

-- 
viresh
Chanwoo Choi Feb. 1, 2021, 12:21 a.m. UTC | #4
On 1/27/21 6:10 PM, Viresh Kumar wrote:
> dev_pm_opp_set_bw() is getting removed and dev_pm_opp_set_opp() should
> be used instead. Migrate to the new API.
> 
> We don't want the OPP core to manage the clk for this driver, migrate to
> dev_pm_opp_of_add_table_noclk() to make sure dev_pm_opp_set_opp()
> doesn't have any side effects.
> 
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
> Dmitry,
> 
> This is based over the patches sent here:
> 
> https://protect2.fireeye.com/v1/url?k=72d88562-2d43bc78-72d90e2d-000babff24ad-e4764030101eaedc&q=1&e=a25b5db7-346b-47b2-9c0a-3945e579f389&u=https%3A%2F%2Flore.kernel.org%2Flkml%2F6c2160ff30a8f421563793020264cf9f533f293c.1611738228.git.viresh.kumar%40linaro.org%2F
> 
> This should fix the problem you mentioned earlier. Will push this for
> linux-next unless you have any issues with it.
> 
>  drivers/devfreq/tegra30-devfreq.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
> index 117cad7968ab..31f7dec5990b 100644
> --- a/drivers/devfreq/tegra30-devfreq.c
> +++ b/drivers/devfreq/tegra30-devfreq.c
> @@ -647,7 +647,7 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq,
>  		return PTR_ERR(opp);
>  	}
>  
> -	ret = dev_pm_opp_set_bw(dev, opp);
> +	ret = dev_pm_opp_set_opp(dev, opp);
>  	dev_pm_opp_put(opp);
>  
>  	return ret;
> @@ -849,7 +849,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
>  		return err;
>  	}
>  
> -	err = dev_pm_opp_of_add_table(&pdev->dev);
> +	err = dev_pm_opp_of_add_table_noclk(&pdev->dev);
>  	if (err) {
>  		dev_err(&pdev->dev, "Failed to add OPP table: %d\n", err);
>  		goto put_hw;
> 

Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
Dmitry Osipenko Feb. 1, 2021, 7:57 p.m. UTC | #5
27.01.2021 12:10, Viresh Kumar пишет:
> dev_pm_opp_set_bw() is getting removed and dev_pm_opp_set_opp() should

> be used instead. Migrate to the new API.

> 

> We don't want the OPP core to manage the clk for this driver, migrate to

> dev_pm_opp_of_add_table_noclk() to make sure dev_pm_opp_set_opp()

> doesn't have any side effects.

> 

> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

> ---

> Dmitry,

> 

> This is based over the patches sent here:

> 

> https://lore.kernel.org/lkml/6c2160ff30a8f421563793020264cf9f533f293c.1611738228.git.viresh.kumar@linaro.org/

> 

> This should fix the problem you mentioned earlier. Will push this for

> linux-next unless you have any issues with it.

> 

>  drivers/devfreq/tegra30-devfreq.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

> 

> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c

> index 117cad7968ab..31f7dec5990b 100644

> --- a/drivers/devfreq/tegra30-devfreq.c

> +++ b/drivers/devfreq/tegra30-devfreq.c

> @@ -647,7 +647,7 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq,

>  		return PTR_ERR(opp);

>  	}

>  

> -	ret = dev_pm_opp_set_bw(dev, opp);

> +	ret = dev_pm_opp_set_opp(dev, opp);

>  	dev_pm_opp_put(opp);

>  

>  	return ret;

> @@ -849,7 +849,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)

>  		return err;

>  	}

>  

> -	err = dev_pm_opp_of_add_table(&pdev->dev);

> +	err = dev_pm_opp_of_add_table_noclk(&pdev->dev);

>  	if (err) {

>  		dev_err(&pdev->dev, "Failed to add OPP table: %d\n", err);

>  		goto put_hw;

> 


Tested-by: Dmitry Osipenko <digetx@gmail.com>
diff mbox series

Patch

diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
index 117cad7968ab..31f7dec5990b 100644
--- a/drivers/devfreq/tegra30-devfreq.c
+++ b/drivers/devfreq/tegra30-devfreq.c
@@ -647,7 +647,7 @@  static int tegra_devfreq_target(struct device *dev, unsigned long *freq,
 		return PTR_ERR(opp);
 	}
 
-	ret = dev_pm_opp_set_bw(dev, opp);
+	ret = dev_pm_opp_set_opp(dev, opp);
 	dev_pm_opp_put(opp);
 
 	return ret;
@@ -849,7 +849,7 @@  static int tegra_devfreq_probe(struct platform_device *pdev)
 		return err;
 	}
 
-	err = dev_pm_opp_of_add_table(&pdev->dev);
+	err = dev_pm_opp_of_add_table_noclk(&pdev->dev);
 	if (err) {
 		dev_err(&pdev->dev, "Failed to add OPP table: %d\n", err);
 		goto put_hw;