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@xxxxxxxxxx> >> --- >> Dmitry, >> >> This is based over the patches sent here: >> >> https://lore.kernel.org/lkml/6c2160ff30a8f421563793020264cf9f533f293c.1611738228.git.viresh.kumar@xxxxxxxxxx/ >> >> 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().