summaryrefslogtreecommitdiffstats
path: root/sys/boot/arm
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2013-03-31 22:43:16 +0000
committerian <ian@FreeBSD.org>2013-03-31 22:43:16 +0000
commitf370876f88224b709659a34169f56abc39f89efb (patch)
treedf4d58c7d2d5d97b6e5368feef739d2989595ed2 /sys/boot/arm
parentfea6d14816e9fbab2a252512fbf68a6d4069ed18 (diff)
downloadFreeBSD-src-f370876f88224b709659a34169f56abc39f89efb.zip
FreeBSD-src-f370876f88224b709659a34169f56abc39f89efb.tar.gz
When running on armv6, set alignment checking to modulo-4 mode rather
than modulo-8, because clang emits ldrd and strd instructions for addresses that are only 4-byte aligned
Diffstat (limited to 'sys/boot/arm')
-rw-r--r--sys/boot/arm/uboot/start.S8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/boot/arm/uboot/start.S b/sys/boot/arm/uboot/start.S
index 65148c9..8af47f3 100644
--- a/sys/boot/arm/uboot/start.S
+++ b/sys/boot/arm/uboot/start.S
@@ -27,6 +27,7 @@
*/
#include <machine/asm.h>
+#include <machine/armreg.h>
/*
* Entry point to the loader that U-Boot passes control to.
@@ -42,6 +43,13 @@ _start:
ldr ip, =saved_regs
str r8, [ip, #0]
+#ifdef _ARM_ARCH_6
+ mrc p15, 0, r2, c1, c0, 0
+ orr r2, r2, #(CPU_CONTROL_UNAL_ENABLE)
+ orr r2, r2, #(CPU_CONTROL_AFLT_ENABLE)
+ mcr p15, 0, r2, c1, c0, 0
+#endif
+
/* Start loader */
b main
OpenPOWER on IntegriCloud