diff options
author | Jin Qian <jqian@nvidia.com> | 2011-03-10 19:09:08 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-04-26 15:53:52 -0700 |
commit | 66683d58d3bba01980687b6ace3857321b5696c1 (patch) | |
tree | 575e3abd67f6aea43ea978b57cb8b3aa76146808 /arch/arm/mach-tegra/cpuidle-t3.c | |
parent | 70ee5e1a5e6d4b7b90013a91b13306186fb0274d (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.c | 11 |
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); |