summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-07 13:38:59 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-07 13:38:59 +0200
commit01531fb6a7b14b7896329f6175af152e49598d57 (patch)
tree508b82f627f6a6d58ce7a069112c891d0a96f942
parentbsp/qoriq: Move BUCSR initialization (diff)
downloadrtems-01531fb6a7b14b7896329f6175af152e49598d57.tar.bz2
bsp/qoriq: Initilize FPU
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/start/start.S57
1 files changed, 57 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/start/start.S b/c/src/lib/libbsp/powerpc/qoriq/start/start.S
index 801fe89601..f43348f10a 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/start/start.S
+++ b/c/src/lib/libbsp/powerpc/qoriq/start/start.S
@@ -28,6 +28,10 @@
#include <bsp/vectors.h>
+#if (QORIQ_INITIAL_MSR & MSR_FP) != 0
+#define INITIALIZE_FPU
+#endif
+
#define FIRST_TLB 0
#define SCRATCH_TLB QORIQ_TLB1_ENTRY_COUNT - 1
#define INITIAL_MSR r14
@@ -72,6 +76,10 @@ _start:
li r0, 0
stw r0, 0(r1)
+#ifdef INITIALIZE_FPU
+ bl .Linitfpu
+#endif
+
/* Copy fast text */
LWI r3, bsp_section_fast_text_begin
LWI r4, bsp_section_fast_text_load_begin
@@ -173,6 +181,51 @@ _start:
blr
+#ifdef INITIALIZE_FPU
+ /*
+ * Write a value to the FPRs to initialize the hidden tag bits. See
+ * also "Core Software Initialization Requirements" of the e500mc
+ * reference manual for example.
+ */
+.Linitfpu:
+ li r0, 0
+ stw r0, 0(r1)
+ stw r0, 4(r1)
+ lfd f0, 0(r1)
+ fmr f1, f0
+ fmr f2, f0
+ fmr f3, f0
+ fmr f4, f0
+ fmr f5, f0
+ fmr f6, f0
+ fmr f7, f0
+ fmr f8, f0
+ fmr f9, f0
+ fmr f10, f0
+ fmr f11, f0
+ fmr f12, f0
+ fmr f13, f0
+ fmr f14, f0
+ fmr f15, f0
+ fmr f16, f0
+ fmr f17, f0
+ fmr f18, f0
+ fmr f19, f0
+ fmr f20, f0
+ fmr f21, f0
+ fmr f22, f0
+ fmr f23, f0
+ fmr f24, f0
+ fmr f25, f0
+ fmr f26, f0
+ fmr f27, f0
+ fmr f28, f0
+ fmr f29, f0
+ fmr f30, f0
+ fmr f31, f0
+ blr
+#endif
+
#ifdef RTEMS_SMP
#if QORIQ_THREAD_COUNT > 1
_start_thread:
@@ -223,6 +276,10 @@ _start_secondary_processor:
li r0, 0
stw r0, 0(r1)
+#ifdef INITIALIZE_FPU
+ bl .Linitfpu
+#endif
+
/* Configure MMU */
li r3, FIRST_TLB
li r4, SCRATCH_TLB