From: Colin Cross Date: Fri, 20 Aug 2010 05:19:53 +0000 (-0700) Subject: [ARM] tegra: cpufreq: Adjust twds on frequency scaling X-Git-Tag: firefly_0821_release~9833^2~281 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0b4ec41425b95f7c629a45266e0624328386ce28;p=firefly-linux-kernel-4.4.55.git [ARM] tegra: cpufreq: Adjust twds on frequency scaling Change-Id: I8d187b861e18dfefcbf4566f4c695dfd1e17fe98 Signed-off-by: Colin Cross --- diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c index 8363a21a8e69..1a8a27a8649c 100644 --- a/arch/arm/mach-tegra/cpu-tegra.c +++ b/arch/arm/mach-tegra/cpu-tegra.c @@ -30,6 +30,7 @@ #include #include +#include #include #include @@ -72,6 +73,17 @@ unsigned int tegra_getspeed(unsigned int cpu) return rate; } +static void tegra_cpufreq_rescale_twd_other_cpu(void *data) { + unsigned long new_rate = *(unsigned long *)data; + twd_recalc_prescaler(new_rate); +} + +static void tegra_cpufreq_rescale_twds(unsigned long new_rate) +{ + twd_recalc_prescaler(new_rate); + smp_call_function(tegra_cpufreq_rescale_twd_other_cpu, &new_rate, 1); +} + static int tegra_update_cpu_speed(unsigned long rate) { int ret = 0; @@ -86,6 +98,9 @@ static int tegra_update_cpu_speed(unsigned long rate) for_each_online_cpu(freqs.cpu) cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); + if (freqs.new > freqs.old) + tegra_cpufreq_rescale_twds(freqs.new * 1000); + #ifdef CONFIG_CPU_FREQ_DEBUG printk(KERN_DEBUG "cpufreq-tegra: transition: %u --> %u\n", freqs.old, freqs.new); @@ -98,6 +113,9 @@ static int tegra_update_cpu_speed(unsigned long rate) return ret; } + if (freqs.new < freqs.old) + tegra_cpufreq_rescale_twds(freqs.new * 1000); + for_each_online_cpu(freqs.cpu) cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);