Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9326fdf3 authored by Dietmar Eggemann's avatar Dietmar Eggemann Committed by Rafael J. Wysocki
Browse files

cpufreq: scpi: invoke frequency-invariance setter function



Commit 343a8d17 (cpufreq: scpi: remove arm_big_little dependency)
changed the cpufreq driver on juno from arm_big_little to scpi.

The scpi set_target function does not call the frequency-invariance
setter function arch_set_freq_scale() like the arm_big_little set_target
function does. As a result the task scheduler load and utilization
signals are not frequency-invariant on this platform anymore.

Fix this by adding a call to arch_set_freq_scale() into
scpi_cpufreq_set_target().

Fixes: 343a8d17 (cpufreq: scpi: remove arm_big_little dependency)
Signed-off-by: default avatarDietmar Eggemann <dietmar.eggemann@arm.com>
Acked-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 91ab883e
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -51,15 +51,23 @@ static unsigned int scpi_cpufreq_get_rate(unsigned int cpu)
static int
scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
{
	unsigned long freq = policy->freq_table[index].frequency;
	struct scpi_data *priv = policy->driver_data;
	u64 rate = policy->freq_table[index].frequency * 1000;
	u64 rate = freq * 1000;
	int ret;

	ret = clk_set_rate(priv->clk, rate);
	if (!ret && (clk_get_rate(priv->clk) != rate))
		ret = -EIO;

	if (ret)
		return ret;

	if (clk_get_rate(priv->clk) != rate)
		return -EIO;

	arch_set_freq_scale(policy->related_cpus, freq,
			    policy->cpuinfo.max_freq);

	return 0;
}

static int