diff options
author | Alex Frid <afrid@nvidia.com> | 2011-09-27 22:33:50 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:49:09 -0800 |
commit | 36dbc27d0dd8e6a44758ce1631a45fb0458421e8 (patch) | |
tree | 7caaf060743f23f504eec686dc8329f4af999fe2 /arch/arm/mach-tegra/cpuidle-t3.c | |
parent | f718f636a3c94b1cec48f69c0fd75e96e89ddc64 (diff) |
ARM: tegra: power: Clean Tegra3 LP2 entry procedure
- Do not save/restore local timer configuration across secondary CPU
LP2 state. It is always preserved, since local timer is neither power
gated nor reset when secondary CPU is in LP2.
- Do not configure external timer for secondary CPU wake up, since we
can use local timer instead. Moreover, in current code external timer
interrupt is registered too late on secondary CPU after it is brought
on-line, so the timer may not always be able to wake CPU up from LP2.
Change-Id: I864e9910fe7112bbce3ea4dbaef12be4b42fb5dc
Reviewed-on: http://git-master/r/55070
Tested-by: Aleksandr Frid <afrid@nvidia.com>
Reviewed-by: Scott Williams <scwilliams@nvidia.com>
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
Rebase-Id: R3407f05d200d81e29994daf278170d3619714bef
Diffstat (limited to 'arch/arm/mach-tegra/cpuidle-t3.c')
-rw-r--r-- | arch/arm/mach-tegra/cpuidle-t3.c | 12 |
1 files changed, 0 insertions, 12 deletions
diff --git a/arch/arm/mach-tegra/cpuidle-t3.c b/arch/arm/mach-tegra/cpuidle-t3.c index 9393ea3a51da..e8e552c7717c 100644 --- a/arch/arm/mach-tegra/cpuidle-t3.c +++ b/arch/arm/mach-tegra/cpuidle-t3.c @@ -268,9 +268,6 @@ static void tegra3_idle_enter_lp2_cpu_n(struct cpuidle_device *dev, struct cpuidle_state *state, s64 request) { #ifdef CONFIG_SMP - s64 sleep_time = request - tegra_lp2_exit_latency; - struct tegra_twd_context twd_context; - if (request < tegra_lp2_exit_latency) { /* * Not enough time left to enter LP2 @@ -279,8 +276,6 @@ static void tegra3_idle_enter_lp2_cpu_n(struct cpuidle_device *dev, return; } - tegra_lp2_set_trigger(sleep_time); - idle_stats.tear_down_count[cpu_number(dev->cpu)]++; trace_power_start(POWER_CSTATE, 2, dev->cpu); @@ -289,16 +284,9 @@ static void tegra3_idle_enter_lp2_cpu_n(struct cpuidle_device *dev, tegra_cpu_wake_by_time[dev->cpu] = ktime_to_us(ktime_get()) + request; smp_wmb(); - tegra_twd_suspend(&twd_context); - tegra3_sleep_cpu_secondary(PLAT_PHYS_OFFSET - PAGE_OFFSET); tegra_cpu_wake_by_time[dev->cpu] = LLONG_MAX; - - tegra_twd_resume(&twd_context); - - if (sleep_time) - tegra_lp2_set_trigger(0); #endif } |