summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/shared/start/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/shared/start/start.S')
-rw-r--r--c/src/lib/libbsp/arm/shared/start/start.S15
1 files changed, 15 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/shared/start/start.S b/c/src/lib/libbsp/arm/shared/start/start.S
index 096e9bd513..63b32501f5 100644
--- a/c/src/lib/libbsp/arm/shared/start/start.S
+++ b/c/src/lib/libbsp/arm/shared/start/start.S
@@ -266,6 +266,8 @@ twiddle:
#elif defined(ARM_MULTILIB_ARCH_V7M)
+#include <rtems/score/armv7m.h>
+
.syntax unified
.extern bsp_stack_main_end
@@ -300,6 +302,19 @@ bsp_start_vector_table_end:
_start:
+#ifdef ARM_MULTILIB_VFP
+ /*
+ * Enable CP10 and CP11 coprocessors for privileged and user mode in
+ * CPACR (bits 20-23). Ensure that write to register completes.
+ */
+ ldr r0, =ARMV7M_CPACR
+ ldr r1, [r0]
+ orr r1, r1, #(0xf << 20)
+ str r1, [r0]
+ dsb
+ isb
+#endif
+
ldr sp, =bsp_stack_main_end
ldr lr, =bsp_start_hook_0_done + 1
b bsp_start_hook_0