diff options
author | Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com> | 2013-03-14 14:07:20 +0000 |
---|---|---|
committer | Jon Medhurst <tixy@linaro.org> | 2013-07-01 11:05:14 +0100 |
commit | aa55d8151df4cc277cd453d9e8dbfabdbced761f (patch) | |
tree | 4683cae2ff5b6251ba629cd013a7a9d9e1f1a395 /arch/arm/mach-vexpress/tc2_pm.c | |
parent | 62373580b24749b621529f0dcc8e64719e189fa9 (diff) |
ARM: TC2: reset CPUs spuriously woken up on cluster power up
On TC2, all CPUs in a cluster are woken up when an IRQ event triggers for a
CPU in a cluster in shutdown state.
This patch puts spuriously woken CPUs back in reset by checking the
pending IRQ status in the SPC wake-up interrupt status register; if the
CPU has no pending IRQ routed to it, the core reexecutes wfi and it is put
in reset by FW straight away.
Tested-by: Viresh Kumar <viresh.kumar2@arm.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Diffstat (limited to 'arch/arm/mach-vexpress/tc2_pm.c')
-rw-r--r-- | arch/arm/mach-vexpress/tc2_pm.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm/mach-vexpress/tc2_pm.c b/arch/arm/mach-vexpress/tc2_pm.c index a5e18df801d..54757301ca5 100644 --- a/arch/arm/mach-vexpress/tc2_pm.c +++ b/arch/arm/mach-vexpress/tc2_pm.c @@ -172,13 +172,15 @@ static void tc2_pm_power_down(void) static void tc2_pm_suspend(u64 residency) { + extern void tc2_resume(void); unsigned int mpidr, cpu, cluster; mpidr = read_cpuid_mpidr(); cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); vexpress_spc_write_bxaddr_reg(cluster, cpu, - virt_to_phys(mcpm_entry_point)); + virt_to_phys(tc2_resume)); + tc2_pm_down(residency); } |