summaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/loongson2_cpufreq.c
diff options
context:
space:
mode:
authorAaro Koskinen <aaro.koskinen@iki.fi>2013-08-05 21:27:12 +0300
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-08-07 22:25:06 +0200
commitf54fe64d14dff3df6d45a48115d248a82557811f (patch)
treea0115b281230dbb0a1c3d50e95b81c64264e63c9 /drivers/cpufreq/loongson2_cpufreq.c
parentc095ba7224d8edc71dcef0d655911399a8bd4a3f (diff)
downloadlinux-stable-f54fe64d14dff3df6d45a48115d248a82557811f.tar.gz
linux-stable-f54fe64d14dff3df6d45a48115d248a82557811f.tar.bz2
linux-stable-f54fe64d14dff3df6d45a48115d248a82557811f.zip
cpufreq: loongson2: fix regression related to clock management
Commit 42913c799 (MIPS: Loongson2: Use clk API instead of direct dereferences) broke the cpufreq functionality on Loongson2 boards: clk_set_rate() is called before the CPU frequency table is initialized, and therefore will always fail. Fix by moving the clk_set_rate() after the table initialization. Tested on Lemote FuLoong mini-PC. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Cc: 3.9+ <stable@vger.kernel.org> # 3.9+ Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/cpufreq/loongson2_cpufreq.c')
-rw-r--r--drivers/cpufreq/loongson2_cpufreq.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/cpufreq/loongson2_cpufreq.c b/drivers/cpufreq/loongson2_cpufreq.c
index bb838b985077..9536852c504a 100644
--- a/drivers/cpufreq/loongson2_cpufreq.c
+++ b/drivers/cpufreq/loongson2_cpufreq.c
@@ -118,11 +118,6 @@ static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy)
clk_put(cpuclk);
return -EINVAL;
}
- ret = clk_set_rate(cpuclk, rate);
- if (ret) {
- clk_put(cpuclk);
- return ret;
- }
/* clock table init */
for (i = 2;
@@ -130,6 +125,12 @@ static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy)
i++)
loongson2_clockmod_table[i].frequency = (rate * i) / 8;
+ ret = clk_set_rate(cpuclk, rate);
+ if (ret) {
+ clk_put(cpuclk);
+ return ret;
+ }
+
policy->cur = loongson2_cpufreq_get(policy->cpu);
cpufreq_frequency_table_get_attr(&loongson2_clockmod_table[0],