18.08.2021 12:41, Ulf Hansson пишет:
On Wed, 18 Aug 2021 at 11:14, Viresh Kumar viresh.kumar@linaro.org wrote:
On 18-08-21, 10:29, Ulf Hansson wrote:
Me and Dmitry discussed adding a new genpd callback for this. I agreed that it seems like a reasonable thing to add, if he insists.
Either way gives the equal result. The new callback allows to remove the boilerplate dev_pm_opp_set_rate(clk_get_rate() code from the rpm-resume of consumer devices, that's it.
The intent was to invoke the new callback from __genpd_dev_pm_attach() when the device has been attached to its genpd. This allows the callback, to invoke clk_get_rate() and then dev_pm_opp_set_rate(), to update the vote according to the current state of the HW.
I wouldn't call dev_pm_opp_set_rate() from there, since it means configure and enable (both) for different resources, clk, regulator, genpd, etc..
Right, good point!
dev_pm_opp_set_rate() is best called from consumer drivers, as they need to be in control.
What we need here is just configure. So something like this then:
The intent wasn't to use dev_pm_opp_set_rate() from __genpd_dev_pm_attach(), but to set genpd->rpm_pstate in accordance to the h/w configuration.
On Tegra we have a chain of PDs and it's not trivial to convert the device's OPP into pstate because only the parent domain can translate the required OPP.
Viresh, please take a look at what I did in [1]. Maybe it could be done in another way.
[1] https://patchwork.ozlabs.org/project/linux-tegra/patch/20210701232728.23591-...