diff options
author | Alex Frid <afrid@nvidia.com> | 2011-09-20 18:45:53 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:48:56 -0800 |
commit | 9e0e071ed1f511016fae774eb8ca707fc9c42878 (patch) | |
tree | 88d9f6c0646c073957405c602b7a01d553df2dc4 /arch/arm/mach-tegra/hotplug.c | |
parent | 539401120ceff2241b4b8e90d8d80d6115fc3663 (diff) |
ARM: tegra: power: Flush cache just before cpu shutdown
Re-arranged cpu die procedure to flush L1 cache just before shutdown.
This is necessary as code executed after L1 flush included spin-lock
protected sections, and the unlock operation was not properly detected
by SCU. As a result CPUs that stayed on-line hanged trying to acquire
the same spin-lock.
Bug 864256
Change-Id: I415160d60686094059e62d91cdcf4b264a4fb69f
Reviewed-on: http://git-master/r/53637
Tested-by: Aleksandr Frid <afrid@nvidia.com>
Reviewed-by: Krishna Reddy <vdumpa@nvidia.com>
Tested-by: Gaurav Sarode <gsarode@nvidia.com>
Reviewed-by: Scott Williams <scwilliams@nvidia.com>
Rebase-Id: R0663eac9b5c3c84d8b7380873bde6af6b2a74a9f
Diffstat (limited to 'arch/arm/mach-tegra/hotplug.c')
-rw-r--r-- | arch/arm/mach-tegra/hotplug.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/hotplug.c b/arch/arm/mach-tegra/hotplug.c index 6fb618e7841b..d44e457e7182 100644 --- a/arch/arm/mach-tegra/hotplug.c +++ b/arch/arm/mach-tegra/hotplug.c @@ -53,10 +53,10 @@ int platform_cpu_kill(unsigned int cpu) void platform_cpu_die(unsigned int cpu) { +#ifdef CONFIG_ARCH_TEGRA_2x_SOC /* Flush the L1 data cache. */ flush_cache_all(); -#ifdef CONFIG_ARCH_TEGRA_2x_SOC /* Place the current CPU in reset. */ tegra2_hotplug_shutdown(); #else @@ -69,6 +69,9 @@ void platform_cpu_die(unsigned int cpu) have affinity to this CPU. */ tegra_gic_pass_through_disable(); + /* Flush the L1 data cache. */ + flush_cache_all(); + /* Shut down the current CPU. */ tegra3_hotplug_shutdown(); #endif |