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.
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:
- genpd->get_performance_state() -> dev_pm_opp_get_current_opp() //New API -> dev_pm_genpd_set_performance_state(dev, current_opp->pstate);
This can be done just once from probe() then.
How would dev_pm_opp_get_current_opp() work? Do you have a suggestion?
I am not sure if/why that approach seemed insufficient?
Another option to solve the problem, I think, is simply to patch drivers to let them call dev_pm_opp_set_rate() during ->probe(), this should synchronize the HW state too.
Dmitry already mentioned that this will make the device start consuming power, and he doesn't want that, else we need an explicit disble call as well.
I am sure I understand the problem. When a device is getting probed, it needs to consume power, how else can the corresponding driver successfully probe it?
-- viresh
Kind regards Uffe