summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/cpuidle-t3.c
diff options
context:
space:
mode:
authorJin Qian <jqian@nvidia.com>2011-03-10 19:09:08 -0800
committerDan Willemsen <dwillemsen@nvidia.com>2011-04-26 15:53:52 -0700
commit66683d58d3bba01980687b6ace3857321b5696c1 (patch)
tree575e3abd67f6aea43ea978b57cb8b3aa76146808 /arch/arm/mach-tegra/cpuidle-t3.c
parent70ee5e1a5e6d4b7b90013a91b13306186fb0274d (diff)
arm: tegra: move cpu_reset handler to iram
reserve first 1K from iram and copy cpu_reset_handler to this location Bug 786290 Original-Change-Id: I8baaaba7bcc30e4cad2e15a368d4fcbc8e44ce07 Reviewed-on: http://git-master/r/22295 Reviewed-by: Scott Williams <scwilliams@nvidia.com> Tested-by: Jin Qian <jqian@nvidia.com> Change-Id: I9c8010bb1d45df65ecc13d89d5168b68ed43c238
Diffstat (limited to 'arch/arm/mach-tegra/cpuidle-t3.c')
-rw-r--r--arch/arm/mach-tegra/cpuidle-t3.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/cpuidle-t3.c b/arch/arm/mach-tegra/cpuidle-t3.c
index bd46643330c2..105a8a06fec1 100644
--- a/arch/arm/mach-tegra/cpuidle-t3.c
+++ b/arch/arm/mach-tegra/cpuidle-t3.c
@@ -273,7 +273,10 @@ void tegra_idle_enter_lp2_cpu_n(struct cpuidle_device *dev,
twd_ctrl = readl(twd_base + 0x8);
twd_load = readl(twd_base + 0);
- cpu_set(dev->cpu, tegra_cpu_lp2_map);
+ spin_lock(&lp2_map_lock);
+ tegra_cpu_lp2_map |= (1 << dev->cpu);
+ spin_unlock(&lp2_map_lock);
+
flush_cache_all();
tegra_cpu_reset_handler_flush(false);
barrier();
@@ -287,7 +290,11 @@ void tegra_idle_enter_lp2_cpu_n(struct cpuidle_device *dev,
pr_err_ratelimited("WFI for LP2 failed for CPU %d: count %lu\n",
dev->cpu, tegra_wfi_fail_count[dev->cpu]);
}
- cpu_clear(dev->cpu, tegra_cpu_lp2_map);
+
+ spin_lock(&lp2_map_lock);
+ tegra_cpu_lp2_map &= ~(1 << dev->cpu);
+ spin_unlock(&lp2_map_lock);
+
writel(twd_ctrl, twd_base + 0x8);
writel(twd_load, twd_base + 0);
gic_cpu_init(0, IO_ADDRESS(TEGRA_ARM_PERIF_BASE) + 0x100);