aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGraf Yang <graf.yang@analog.com>2010-03-07 22:01:35 -0500
committerMike Frysinger <vapier@gentoo.org>2010-03-09 00:30:53 -0500
commit7998a8787a8b35fede689c2bb716f65b231e7492 (patch)
tree07a9d6c0e27923cfdbe237aa0a0cfca6cb9f095c
parentf2b0cd61cf635cbdc110472f6edc97328322cb8b (diff)
Blackfin: scale calibration when cpu freq changes
Need to make sure we update the loops_per_jiffy values when we start changing the core clock. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--arch/blackfin/mach-common/cpufreq.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/blackfin/mach-common/cpufreq.c b/arch/blackfin/mach-common/cpufreq.c
index 5d7f8ab5509a..4391d03dc845 100644
--- a/arch/blackfin/mach-common/cpufreq.c
+++ b/arch/blackfin/mach-common/cpufreq.c
@@ -11,6 +11,7 @@
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/cpufreq.h> 12#include <linux/cpufreq.h>
13#include <linux/fs.h> 13#include <linux/fs.h>
14#include <linux/delay.h>
14#include <asm/blackfin.h> 15#include <asm/blackfin.h>
15#include <asm/time.h> 16#include <asm/time.h>
16#include <asm/dpmc.h> 17#include <asm/dpmc.h>
@@ -99,13 +100,15 @@ static unsigned int bfin_getfreq_khz(unsigned int cpu)
99 return get_cclk() / 1000; 100 return get_cclk() / 1000;
100} 101}
101 102
102
103static int bfin_target(struct cpufreq_policy *poli, 103static int bfin_target(struct cpufreq_policy *poli,
104 unsigned int target_freq, unsigned int relation) 104 unsigned int target_freq, unsigned int relation)
105{ 105{
106 unsigned int index, plldiv, cpu; 106 unsigned int index, plldiv, cpu;
107 unsigned long flags, cclk_hz; 107 unsigned long flags, cclk_hz;
108 struct cpufreq_freqs freqs; 108 struct cpufreq_freqs freqs;
109 static unsigned long lpj_ref;
110 static unsigned int lpj_ref_freq;
111
109#if defined(CONFIG_CYCLES_CLOCKSOURCE) 112#if defined(CONFIG_CYCLES_CLOCKSOURCE)
110 cycles_t cycles; 113 cycles_t cycles;
111#endif 114#endif
@@ -144,6 +147,14 @@ static int bfin_target(struct cpufreq_policy *poli,
144 (cycles << __bfin_cycles_mod) - (cycles << index); 147 (cycles << __bfin_cycles_mod) - (cycles << index);
145 __bfin_cycles_mod = index; 148 __bfin_cycles_mod = index;
146#endif 149#endif
150 if (!lpj_ref_freq) {
151 lpj_ref = loops_per_jiffy;
152 lpj_ref_freq = freqs.old;
153 }
154 if (freqs.new != freqs.old) {
155 loops_per_jiffy = cpufreq_scale(lpj_ref,
156 lpj_ref_freq, freqs.new);
157 }
147 local_irq_restore_hw(flags); 158 local_irq_restore_hw(flags);
148 } 159 }
149 /* TODO: just test case for cycles clock source, remove later */ 160 /* TODO: just test case for cycles clock source, remove later */