summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-01-01 23:18:37 +0000
committerian <ian@FreeBSD.org>2015-01-01 23:18:37 +0000
commitae849d329324f5a09144807b1fa6b7e2da19e20a (patch)
tree9289a5459fda5c08eef70572cdae7405356cfbae /sys/arm
parent3f4a298808d1178d5c321267e94a8b0e29223f00 (diff)
downloadFreeBSD-src-ae849d329324f5a09144807b1fa6b7e2da19e20a.zip
FreeBSD-src-ae849d329324f5a09144807b1fa6b7e2da19e20a.tar.gz
Define a WFI macro that expands to the right form of wait-for-interrupt
depending on the architecture.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/locore-v6.S2
-rw-r--r--sys/arm/include/asm.h3
-rw-r--r--sys/arm/include/sysreg.h1
3 files changed, 5 insertions, 1 deletions
diff --git a/sys/arm/arm/locore-v6.S b/sys/arm/arm/locore-v6.S
index d90dd60..1e29545 100644
--- a/sys/arm/arm/locore-v6.S
+++ b/sys/arm/arm/locore-v6.S
@@ -461,7 +461,7 @@ ENTRY_NP(cpu_halt)
teq r4, #0
movne pc, r4
1:
- wfi
+ WFI
b 1b
/*
diff --git a/sys/arm/include/asm.h b/sys/arm/include/asm.h
index 9122e6e..a182863 100644
--- a/sys/arm/include/asm.h
+++ b/sys/arm/include/asm.h
@@ -227,14 +227,17 @@
#define ISB isb
#define DSB dsb
#define DMB dmb
+#define WFI wfi
#elif __ARM_ARCH == 6
#define ISB mcr CP15_CP15ISB
#define DSB mcr CP15_CP15DSB
#define DMB mcr CP15_CP15DMB
+#define WFI mcr CP15_CP15WFI
#else
#define ISB mcr CP15_CP15ISB
#define DSB mcr CP15_CP15DSB /* DSB and DMB are the */
#define DMB mcr CP15_CP15DSB /* same prior to v6.*/
+/* No form of WFI available on v4, define nothing to get an error on use. */
#endif
#endif /* !_MACHINE_ASM_H_ */
diff --git a/sys/arm/include/sysreg.h b/sys/arm/include/sysreg.h
index b1c7fd3..ad29703 100644
--- a/sys/arm/include/sysreg.h
+++ b/sys/arm/include/sysreg.h
@@ -166,6 +166,7 @@
/* Only ARMv6: */
#define CP15_CP15DSB p15, 0, r0, c7, c10, 4 /* DSB */
#define CP15_CP15DMB p15, 0, r0, c7, c10, 5 /* DMB */
+#define CP15_CP15WFI p15, 0, r0, c7, c0, 4 /* WFI */
#endif
#if __ARM_ARCH >= 7
OpenPOWER on IntegriCloud