[U-Boot] [PATCH 1/2] ARM: add wfi assembly macro

From: Rob Herring rob.herring@calxeda.com
Since wfi instruction is only available on ARMv7, add a conditional macro for it.
Signed-off-by: Rob Herring rob.herring@calxeda.com --- arch/arm/include/asm/system.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 2b28a26..2f6aecd 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -61,6 +61,12 @@
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
+#ifdef __ARM_ARCH_7A__ +#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") +#else +#define wfi() +#endif + static inline unsigned int get_cr(void) { unsigned int val;

From: Rob Herring rob.herring@calxeda.com
Older compilers don't recognize v7 wfi instruction, so use wfi macro to fix builds on old compilers.
Signed-off-by: Rob Herring rob.herring@calxeda.com --- board/highbank/highbank.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/board/highbank/highbank.c b/board/highbank/highbank.c index f41bf05..09cd45d 100644 --- a/board/highbank/highbank.c +++ b/board/highbank/highbank.c @@ -88,5 +88,6 @@ void dram_init_banksize(void) void reset_cpu(ulong addr) { writel(HB_PWR_HARD_RESET, HB_SREG_A9_PWR_REQ); - asm(" wfi"); + + wfi(); }

Hi Rob,
On Sun, 2 Dec 2012 21:06:22 -0600, Rob Herring robherring2@gmail.com wrote:
From: Rob Herring rob.herring@calxeda.com
Older compilers don't recognize v7 wfi instruction, so use wfi macro to fix builds on old compilers.
Signed-off-by: Rob Herring rob.herring@calxeda.com
board/highbank/highbank.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/board/highbank/highbank.c b/board/highbank/highbank.c index f41bf05..09cd45d 100644 --- a/board/highbank/highbank.c +++ b/board/highbank/highbank.c @@ -88,5 +88,6 @@ void dram_init_banksize(void) void reset_cpu(ulong addr) { writel(HB_PWR_HARD_RESET, HB_SREG_A9_PWR_REQ);
- asm(" wfi");
- wfi();
}
Applied to u-boot-arm/master, thanks!
Amicalement,

Dear Rob Herring,
From: Rob Herring rob.herring@calxeda.com
Since wfi instruction is only available on ARMv7, add a conditional macro for it.
Signed-off-by: Rob Herring rob.herring@calxeda.com
arch/arm/include/asm/system.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 2b28a26..2f6aecd 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -61,6 +61,12 @@
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
+#ifdef __ARM_ARCH_7A__ +#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") +#else +#define wfi() +#endif
Won't this break other (non-arm) systems? Moreover, maybe you can make this an (inline) function instead?
static inline unsigned int get_cr(void) { unsigned int val;
Best regards, Marek Vasut

On 12/02/2012 10:58 PM, Marek Vasut wrote:
Dear Rob Herring,
From: Rob Herring rob.herring@calxeda.com
Since wfi instruction is only available on ARMv7, add a conditional macro for it.
Signed-off-by: Rob Herring rob.herring@calxeda.com
arch/arm/include/asm/system.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 2b28a26..2f6aecd 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -61,6 +61,12 @@
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
+#ifdef __ARM_ARCH_7A__ +#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") +#else +#define wfi() +#endif
Won't this break other (non-arm) systems? Moreover, maybe you can make this an (inline) function instead?
How? It is in an ARM specific header and empty on anything but ARMv7 enabled compiler. This follows the kernel implementation and the nop above.
Rob
static inline unsigned int get_cr(void) { unsigned int val;
Best regards, Marek Vasut

Dear Rob Herring,
On 12/02/2012 10:58 PM, Marek Vasut wrote:
Dear Rob Herring,
From: Rob Herring rob.herring@calxeda.com
Since wfi instruction is only available on ARMv7, add a conditional macro for it.
Signed-off-by: Rob Herring rob.herring@calxeda.com
arch/arm/include/asm/system.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 2b28a26..2f6aecd 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -61,6 +61,12 @@
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
+#ifdef __ARM_ARCH_7A__ +#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") +#else +#define wfi() +#endif
Won't this break other (non-arm) systems? Moreover, maybe you can make this an (inline) function instead?
How? It is in an ARM specific header and empty on anything but ARMv7 enabled compiler. This follows the kernel implementation and the nop above.
Ok, I missed the arch/arm. It's ok then, sorry for the noise. [...]
Best regards, Marek Vasut

Hi Rob,
On Sun, 2 Dec 2012 21:06:21 -0600, Rob Herring robherring2@gmail.com wrote:
From: Rob Herring rob.herring@calxeda.com
Since wfi instruction is only available on ARMv7, add a conditional macro for it.
Signed-off-by: Rob Herring rob.herring@calxeda.com
arch/arm/include/asm/system.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 2b28a26..2f6aecd 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -61,6 +61,12 @@
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
+#ifdef __ARM_ARCH_7A__ +#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") +#else +#define wfi() +#endif
static inline unsigned int get_cr(void) { unsigned int val;
Applied to u-boot-arm/master, thanks!
Amicalement,
participants (3)
-
Albert ARIBAUD
-
Marek Vasut
-
Rob Herring