diff options
author | Stephan Gerhold <stephan@gerhold.net> | 2020-07-27 11:30:47 +0200 |
---|---|---|
committer | Viresh Kumar <viresh.kumar@linaro.org> | 2020-09-16 13:56:08 +0530 |
commit | dc279ac6e5b4e06ec9c15b82e30e8bf2576b14f9 (patch) | |
tree | 4688e14481445afedbb68e200381798550331697 /drivers/cpufreq/sfi-cpufreq.c | |
parent | 90d46d71cce279d878793a0ed4b326b4027aca6c (diff) |
cpufreq: dt: Refactor initialization to handle probe deferral properly
cpufreq-dt is currently unable to handle -EPROBE_DEFER properly
because the error code is not propagated for the cpufreq_driver->init()
callback. Instead, it attempts to avoid the situation by temporarily
requesting all resources within resources_available() and releasing them
again immediately after. This has several disadvantages:
- Whenever we add something like interconnect handling to the OPP core
we need to patch cpufreq-dt to request these resources early.
- resources_available() is only run for CPU0, but other clusters may
eventually depend on other resources that are not available yet.
(See FIXME comment removed by this commit...)
- All resources need to be looked up several times.
Now that the OPP core can propagate -EPROBE_DEFER during initialization,
it would be nice to avoid all that trouble and just propagate its error
code when necessary.
This commit refactors the cpufreq-dt driver to initialize private_data
before registering the cpufreq driver. We do this by iterating over
all possible CPUs and ensure that all resources are initialized:
1. dev_pm_opp_get_opp_table() ensures the OPP table is allocated
and initialized with clock and interconnects.
2. dev_pm_opp_set_regulators() requests the regulators and assigns
them to the OPP table.
3. We call dev_pm_opp_of_get_sharing_cpus() early so that we only
initialize the OPP table once for each shared policy.
With these changes, we actually end up saving a few lines of code,
the resources are no longer looked up multiple times and everything
should be much more robust.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
[ Viresh: Use list_head structure for maintaining the list and minor
changes ]
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Diffstat (limited to 'drivers/cpufreq/sfi-cpufreq.c')
0 files changed, 0 insertions, 0 deletions