diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-10-07 13:38:59 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-10-07 13:38:59 +0200 |
commit | 01531fb6a7b14b7896329f6175af152e49598d57 (patch) | |
tree | 508b82f627f6a6d58ce7a069112c891d0a96f942 | |
parent | bsp/qoriq: Move BUCSR initialization (diff) | |
download | rtems-01531fb6a7b14b7896329f6175af152e49598d57.tar.bz2 |
bsp/qoriq: Initilize FPU
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/start/start.S | 57 |
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 |