[PATCH v2 1/5] ARM: omap4: Correct definition of do_wfi() forCONFIG_THUMB2_KERNEL
From: Dave Martin <hidden>
Date: 2011-02-04 10:58:06
Also in:
linux-omap
On Thu, Feb 3, 2011 at 7:30 PM, Santosh Shilimkar [off-list ref] wrote:
quoted
-----Original Message----- From: Russell King - ARM Linux [mailto:linux at arm.linux.org.uk] Sent: Friday, February 04, 2011 12:38 AM To: Santosh Shilimkar Cc: Dave Martin; linux-arm-kernel at lists.infradead.org; Tony Lindgren; Nicolas Pitre; linux-omap at vger.kernel.org; Jean Pihet-XID Subject: Re: [PATCH v2 1/5] ARM: omap4: Correct definition of do_wfi() forCONFIG_THUMB2_KERNEL On Fri, Feb 04, 2011 at 12:09:34AM +0530, Santosh Shilimkar wrote:quoted
quoted
-----Original Message----- From: Dave Martin [mailto:dave.martin at linaro.org] Sent: Thursday, February 03, 2011 11:33 PM To: linux-arm-kernel at lists.infradead.org Cc: Dave Martin; Tony Lindgren; Santosh Shilimkar; Jean Pihet; linux-omap at vger.kernel.org; Nicolas Pitre Subject: [PATCH v2 1/5] ARM: omap4: Correct definition ofdo_wfi()quoted
quoted
for CONFIG_THUMB2_KERNEL For the Thumb-2 case, the "wfi" mnemonic is used, since in this case the tools will necessarily be new enough to support it. Signed-off-by: Dave Martin <redacted>I guess, we discussed this patch in your previous post. Acked-by: Santosh Shilimkar <redacted>quoted
--- ?arch/arm/mach-omap2/include/mach/omap4-common.h | ? ?5 +++++ ?1 files changed, 5 insertions(+), 0 deletions(-)diff --git a/arch/arm/mach-omap2/include/mach/omap4-common.hb/arch/arm/mach-omap2/include/mach/omap4-common.h index 5b0270b..68ce058 100644--- a/arch/arm/mach-omap2/include/mach/omap4-common.h +++ b/arch/arm/mach-omap2/include/mach/omap4-common.h@@ -17,8 +17,13 @@? * wfi used in low power code. Directly opcode is used instead ? * of instruction to avoid mulit-omap build break ? */ +#ifdef CONFIG_THUMB2_KERNEL +#define do_wfi() ? ? ? ? ? ? ? ? \ + ? ? ? ? __asm__ __volatile__ ("wfi" : : : "memory") +#else ?#define do_wfi() ? ? ? ? ? ? ? ? \ ? ? ? ? ? __asm__ __volatile__ (".word ? ?0xe320f003" : : : "memory") +#endifWe actually have this: #if __LINUX_ARM_ARCH__ >= 7 || ? ? ? ? ?\ ? ? ? ? (__LINUX_ARM_ARCH__ == 6 && defined(CONFIG_CPU_32v6K)) #define sev() ? __asm__ __volatile__ ("sev" : : : "memory") #define wfe() ? __asm__ __volatile__ ("wfe" : : : "memory") #define wfi() ? __asm__ __volatile__ ("wfi" : : : "memory") #endif in asm/system.h, so maybe it should be using wfe() from asm/system.h ?I assume you mean wfi here. The problem is, omap2plus build breaks because it builds CPU_32v6 and CPU_32v7 as well which doesn't support the wfi instruction. Hence I used opcode directly to keep build working.
I guess that's right, OMAP2 is ARM1136 and doesn't have the K extensions.
Would it make sense to have the v6 MCR equivalent as an altetnative?
Something like:
#elseif __LINUX_ARM_ARCH__ >= 6
#define wfi() __asm__ __volatile__ ( \
"mov r0, #0\n\t" \
"mcr p15, 0, r0, c7, c0, 4\n\t" \
::: "r0"
)
#endif
This MCR is a mandatory part of the architecture for v6, but it's not
mandatory for older processors.
Cheers
---Dave