summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-27 10:43:27 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-28 13:06:17 +0100
commitf966d608e22ba2b92fb39504200ba9cd300d732c (patch)
tree8632f9f387835e96fcddfde71035a9744fafaa51
parentbsp/qoriq: Invalidate L1 cache on boot processor (diff)
downloadrtems-f966d608e22ba2b92fb39504200ba9cd300d732c.tar.bz2
bsp/qoriq: Flush and invalidate L2 cache
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/configure.ac4
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/start/start.S23
2 files changed, 27 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/configure.ac b/c/src/lib/libbsp/powerpc/qoriq/configure.ac
index 466ddaf68d..a02f209455 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/configure.ac
+++ b/c/src/lib/libbsp/powerpc/qoriq/configure.ac
@@ -164,6 +164,10 @@ RTEMS_BSPOPTS_SET([QORIQ_MMU_DEVICE_MAS7],[qoriq_t*],[0xf])
RTEMS_BSPOPTS_SET([QORIQ_MMU_DEVICE_MAS7],[*],[0x0])
RTEMS_BSPOPTS_HELP([QORIQ_MMU_DEVICE_MAS7],[MAS7 value for device TLB1 entries])
+RTEMS_BSPOPTS_SET([QORIQ_L2CSR0],[qoriq_t*],[0xfec20000])
+RTEMS_BSPOPTS_SET([QORIQ_L2CSR0],[*],[])
+RTEMS_BSPOPTS_HELP([QORIQ_L2CSR0],[address of L2CSR0 register])
+
RTEMS_BSPOPTS_SET([QORIQ_CLOCK_TIMER],[qoriq_core_1],[4])
RTEMS_BSPOPTS_SET([QORIQ_CLOCK_TIMER],[*],[0])
RTEMS_BSPOPTS_HELP([QORIQ_CLOCK_TIMER],[global timer used for system clock, 0..3 maps to A0..A3, and 4..7 maps to B0..B3])
diff --git a/c/src/lib/libbsp/powerpc/qoriq/start/start.S b/c/src/lib/libbsp/powerpc/qoriq/start/start.S
index 10daf32c8a..5d2a09df48 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/start/start.S
+++ b/c/src/lib/libbsp/powerpc/qoriq/start/start.S
@@ -80,6 +80,29 @@ _start:
bne 1b
isync
+#ifdef QORIQ_L2CSR0
+ /* Flush L2 cache of first cluster */
+ LWI r4, QORIQ_L2CSR0
+ lwz r3, 0(r4)
+ oris r3, r3, FSL_EIS_L2CSR0_L2FL >> 16
+ stw r3, 0(r4)
+1:
+ lwz r3, 0(r4)
+ andis. r3, r3, FSL_EIS_L2CSR0_L2FL >> 16
+ bne 1b
+ isync
+
+ /* Invalidate L2 cache of first cluster */
+ lwz r3, 0(r4)
+ oris r3, r3, FSL_EIS_L2CSR0_L2FI >> 16
+ stw r3, 0(r4)
+1:
+ lwz r3, 0(r4)
+ andis. r3, r3, FSL_EIS_L2CSR0_L2FI >> 16
+ bne 1b
+ isync
+#endif
+
/* Get start stack */
LWI START_STACK, start_stack_end