diff options
author | Dietmar Eggemann <dietmar.eggemann@arm.com> | 2018-02-26 08:11:03 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-02-26 17:27:56 -0500 |
commit | 9326fdf3fbdfbc3c78de001969df8256913d98e7 (patch) | |
tree | afab0468017276957e58cb86be1fa7abbc0bcdb6 | |
parent | 91ab883eb21325ad80f3473633f794c78ac87f51 (diff) |
cpufreq: scpi: invoke frequency-invariance setter function
Commit 343a8d17fa8d (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: 343a8d17fa8d (cpufreq: scpi: remove arm_big_little dependency)
Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Acked-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | drivers/cpufreq/scpi-cpufreq.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c index c32a833e1b00..d300a163945f 100644 --- a/drivers/cpufreq/scpi-cpufreq.c +++ b/drivers/cpufreq/scpi-cpufreq.c | |||
@@ -51,15 +51,23 @@ static unsigned int scpi_cpufreq_get_rate(unsigned int cpu) | |||
51 | static int | 51 | static int |
52 | scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index) | 52 | scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index) |
53 | { | 53 | { |
54 | unsigned long freq = policy->freq_table[index].frequency; | ||
54 | struct scpi_data *priv = policy->driver_data; | 55 | struct scpi_data *priv = policy->driver_data; |
55 | u64 rate = policy->freq_table[index].frequency * 1000; | 56 | u64 rate = freq * 1000; |
56 | int ret; | 57 | int ret; |
57 | 58 | ||
58 | ret = clk_set_rate(priv->clk, rate); | 59 | ret = clk_set_rate(priv->clk, rate); |
59 | if (!ret && (clk_get_rate(priv->clk) != rate)) | ||
60 | ret = -EIO; | ||
61 | 60 | ||
62 | return ret; | 61 | if (ret) |
62 | return ret; | ||
63 | |||
64 | if (clk_get_rate(priv->clk) != rate) | ||
65 | return -EIO; | ||
66 | |||
67 | arch_set_freq_scale(policy->related_cpus, freq, | ||
68 | policy->cpuinfo.max_freq); | ||
69 | |||
70 | return 0; | ||
63 | } | 71 | } |
64 | 72 | ||
65 | static int | 73 | static int |