summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/cpu-tegra.c
diff options
context:
space:
mode:
authorAlex Frid <afrid@nvidia.com>2012-10-25 19:19:25 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 12:40:27 -0700
commita35c6f28c84f717d6f1b21fb4cb8deb210f925a4 (patch)
treeb31bbd46f6f2302934607284963b6d97c6347ad6 /arch/arm/mach-tegra/cpu-tegra.c
parent67fcc20e1df0dec4e70d215a221fd0b2c9ade0fc (diff)
ARM: tegra: clock: Clip CPU boot rate to cpufreq table
Clipped CPU boot rate to cpufreq table during cpufreq driver initialization. This would help avoid futile attempts by cpufreq governor to adjust the rate while dvfs regulators are not ready. Bug 1060647 Change-Id: I8984c0c53798413887f866f03704b9097f40a361 Signed-off-by: Alex Frid <afrid@nvidia.com> Reviewed-on: http://git-master/r/147792 (cherry picked from commit d9325e0bd3cdd1b8d8e4989a0018718dfddb84d0) Reviewed-on: http://git-master/r/159644 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com> Rebase-Id: Rd6c8d658c0d1931ba3cabb9c544d5f5bf29ab031
Diffstat (limited to 'arch/arm/mach-tegra/cpu-tegra.c')
-rw-r--r--arch/arm/mach-tegra/cpu-tegra.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c
index 2318de73c9f7..6af5934af2b5 100644
--- a/arch/arm/mach-tegra/cpu-tegra.c
+++ b/arch/arm/mach-tegra/cpu-tegra.c
@@ -724,6 +724,9 @@ static struct notifier_block tegra_cpu_pm_notifier = {
static int tegra_cpu_init(struct cpufreq_policy *policy)
{
+ int idx, ret;
+ unsigned int freq;
+
if (policy->cpu >= CONFIG_NR_CPUS)
return -EINVAL;
@@ -742,7 +745,17 @@ static int tegra_cpu_init(struct cpufreq_policy *policy)
cpufreq_frequency_table_cpuinfo(policy, freq_table);
cpufreq_frequency_table_get_attr(freq_table, policy->cpu);
- policy->cur = tegra_getspeed(policy->cpu);
+
+ /* clip boot frequency to table entry */
+ freq = tegra_getspeed(policy->cpu);
+ ret = cpufreq_frequency_table_target(policy, freq_table, freq,
+ CPUFREQ_RELATION_H, &idx);
+ if (!ret && (freq != freq_table[idx].frequency)) {
+ ret = tegra_update_cpu_speed(freq_table[idx].frequency);
+ if (!ret)
+ freq = freq_table[idx].frequency;
+ }
+ policy->cur = freq;
target_cpu_speed[policy->cpu] = policy->cur;
/* FIXME: what's the actual transition time? */