diff options
author | Scott Wood <scottwood@freescale.com> | 2011-06-22 18:10:30 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2011-06-27 08:36:15 -0500 |
commit | ebf714ff37561331eb39963945d80bfc2a59e00f (patch) | |
tree | 4332a9b8ba4472a439db4d21ece64066d88358d1 /arch/powerpc/kernel/idle_e500.S | |
parent | f340fe69f5e87c9f630b077cf52142ec15964a41 (diff) | |
download | lwn-ebf714ff37561331eb39963945d80bfc2a59e00f.tar.gz lwn-ebf714ff37561331eb39963945d80bfc2a59e00f.zip |
powerpc/e500mc: Add support for the wait instruction in e500_idle
e500mc cannot doze or nap due to an erratum (as well as having a
different mechanism than previous e500), but it has a "wait" instruction
that is similar to doze.
On 64-bit, due to the soft-irq-disable mechanism, the existing
book3e_idle should be used instead.
Signed-off-by: Vakul Garg <vakul@freescale.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/idle_e500.S')
-rw-r--r-- | arch/powerpc/kernel/idle_e500.S | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/idle_e500.S b/arch/powerpc/kernel/idle_e500.S index 47a1a983ff88..3e2b95c6ae67 100644 --- a/arch/powerpc/kernel/idle_e500.S +++ b/arch/powerpc/kernel/idle_e500.S @@ -26,6 +26,17 @@ _GLOBAL(e500_idle) ori r4,r4,_TLF_NAPPING /* so when we take an exception */ stw r4,TI_LOCAL_FLAGS(r3) /* it will return to our caller */ +#ifdef CONFIG_E500MC + wrteei 1 +1: wait + + /* + * Guard against spurious wakeups (e.g. from a hypervisor) -- + * any real interrupt will cause us to return to LR due to + * _TLF_NAPPING. + */ + b 1b +#else /* Check if we can nap or doze, put HID0 mask in r3 */ lis r3,0 BEGIN_FTR_SECTION @@ -72,6 +83,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_L2CSR|CPU_FTR_CAN_NAP) mtmsr r7 isync 2: b 2b +#endif /* !E500MC */ /* * Return from NAP/DOZE mode, restore some CPU specific registers, |