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

Commit 7998a878 authored by Graf Yang's avatar Graf Yang Committed by Mike Frysinger
Browse files

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: default avatarGraf Yang <graf.yang@analog.com>
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent f2b0cd61
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/fs.h>
#include <linux/delay.h>
#include <asm/blackfin.h>
#include <asm/time.h>
#include <asm/dpmc.h>
@@ -99,13 +100,15 @@ static unsigned int bfin_getfreq_khz(unsigned int cpu)
	return get_cclk() / 1000;
}


static int bfin_target(struct cpufreq_policy *poli,
			unsigned int target_freq, unsigned int relation)
{
	unsigned int index, plldiv, cpu;
	unsigned long flags, cclk_hz;
	struct cpufreq_freqs freqs;
	static unsigned long lpj_ref;
	static unsigned int  lpj_ref_freq;

#if defined(CONFIG_CYCLES_CLOCKSOURCE)
	cycles_t cycles;
#endif
@@ -144,6 +147,14 @@ static int bfin_target(struct cpufreq_policy *poli,
			    (cycles << __bfin_cycles_mod) - (cycles << index);
			__bfin_cycles_mod = index;
#endif
			if (!lpj_ref_freq) {
				lpj_ref = loops_per_jiffy;
				lpj_ref_freq = freqs.old;
			}
			if (freqs.new != freqs.old) {
				loops_per_jiffy = cpufreq_scale(lpj_ref,
						lpj_ref_freq, freqs.new);
			}
			local_irq_restore_hw(flags);
		}
		/* TODO: just test case for cycles clock source, remove later */