summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorBo Yan <byan@nvidia.com>2012-05-03 09:35:07 -0700
committerSimone Willett <swillett@nvidia.com>2012-05-21 18:33:29 -0700
commitf7d41977ecee52adc352e50ba55fa864a2782edf (patch)
tree043258ad3ae6fb2f928f0cbf23bb6cc43f1ef913 /arch
parenta50f70c144df72eb212a59e5efd0a3d48d192fe2 (diff)
ARM: tegra: decouple mode from flags
When doing LP2 on last standing CPU, we currently pass "mode | flag" to a few functions as argument, with the assumption that "mode" will be confined to lower 22 bits in PMC_CTRL register and "flags" will occupy higher 10 bits. If "flags" grows downward or "mode" grows upward, without this explicit knowledge, LP2 will break on the last standing CPU. Therefore we need to decouple them. Currently only "flags" part is being used when passed to other subroutines, so use "flags" only. Change-Id: I299c998145d81c17760bda8a0b56311fed553958 Signed-off-by: Bo Yan <byan@nvidia.com> Reviewed-on: http://git-master/r/100358 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-tegra/pm.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c
index 896e9576e1c0..054eb3aea358 100644
--- a/arch/arm/mach-tegra/pm.c
+++ b/arch/arm/mach-tegra/pm.c
@@ -586,7 +586,6 @@ unsigned int tegra_idle_lp2_last(unsigned int sleep_time, unsigned int flags)
mode |= TEGRA_POWER_PWRREQ_OE;
mode &= ~TEGRA_POWER_EFFECT_LP0;
writel(mode, pmc + PMC_CTRL);
- mode |= flags;
tegra_cluster_switch_time(flags, tegra_cluster_switch_time_id_start);
@@ -598,7 +597,7 @@ unsigned int tegra_idle_lp2_last(unsigned int sleep_time, unsigned int flags)
trace_cpu_cluster(POWER_CPU_CLUSTER_START);
set_power_timers(pdata->cpu_timer, 0,
clk_get_rate_all_locked(tegra_pclk));
- tegra_cluster_switch_prolog(mode);
+ tegra_cluster_switch_prolog(flags);
} else {
set_power_timers(pdata->cpu_timer, pdata->cpu_off_timer,
clk_get_rate_all_locked(tegra_pclk));
@@ -608,7 +607,7 @@ unsigned int tegra_idle_lp2_last(unsigned int sleep_time, unsigned int flags)
tegra_lp2_set_trigger(sleep_time);
cpu_complex_pm_enter();
- suspend_cpu_complex(mode);
+ suspend_cpu_complex(flags);
tegra_cluster_switch_time(flags, tegra_cluster_switch_time_id_prolog);
flush_cache_all();
/*
@@ -625,7 +624,7 @@ unsigned int tegra_idle_lp2_last(unsigned int sleep_time, unsigned int flags)
tegra_init_cache(false);
tegra_cluster_switch_time(flags, tegra_cluster_switch_time_id_switch);
- restore_cpu_complex(mode);
+ restore_cpu_complex(flags);
cpu_complex_pm_exit();
remain = tegra_lp2_timer_remain();
@@ -633,7 +632,7 @@ unsigned int tegra_idle_lp2_last(unsigned int sleep_time, unsigned int flags)
tegra_lp2_set_trigger(0);
if (flags & TEGRA_POWER_CLUSTER_MASK) {
- tegra_cluster_switch_epilog(mode);
+ tegra_cluster_switch_epilog(flags);
trace_cpu_cluster(POWER_CPU_CLUSTER_DONE);
}
tegra_cluster_switch_time(flags, tegra_cluster_switch_time_id_epilog);