The current implementation still carries a case for a deferred probe, but in practise this should not happen anymore.
Since the energy model expects to pass the number of OPPs, let us just move the call dev_pm_opp_get_opp_count closer to EM registration instead. Signed-off-by: Nicola Mazzucato <nicola.mazzuc...@arm.com> --- drivers/cpufreq/scmi-cpufreq.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c index 491a0a24fb1e..15b213ed78fa 100644 --- a/drivers/cpufreq/scmi-cpufreq.c +++ b/drivers/cpufreq/scmi-cpufreq.c @@ -153,13 +153,6 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) return ret; } - nr_opp = dev_pm_opp_get_opp_count(cpu_dev); - if (nr_opp <= 0) { - dev_dbg(cpu_dev, "OPP table is not ready, deferring probe\n"); - ret = -EPROBE_DEFER; - goto out_free_opp; - } - priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) { ret = -ENOMEM; @@ -190,6 +183,15 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) policy->fast_switch_possible = handle->perf_ops->fast_switch_possible(handle, cpu_dev); + nr_opp = dev_pm_opp_get_opp_count(cpu_dev); + if (nr_opp <= 0) { + dev_err(cpu_dev, "%s: No OPPs for this device: %d\n", + __func__, ret); + + ret = -ENODEV; + goto out_free_priv; + } + power_scale_mw = handle->perf_ops->power_scale_mw_get(handle); em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, policy->cpus, power_scale_mw); -- 2.27.0