|
@@ -33,6 +33,24 @@ ENTRY(v7_flush_icache_all)
|
|
|
mov pc, lr
|
|
|
ENDPROC(v7_flush_icache_all)
|
|
|
|
|
|
+ /*
|
|
|
+ * v7_flush_dcache_louis()
|
|
|
+ *
|
|
|
+ * Flush the D-cache up to the Level of Unification Inner Shareable
|
|
|
+ *
|
|
|
+ * Corrupted registers: r0-r7, r9-r11 (r6 only in Thumb mode)
|
|
|
+ */
|
|
|
+
|
|
|
+ENTRY(v7_flush_dcache_louis)
|
|
|
+ dmb @ ensure ordering with previous memory accesses
|
|
|
+ mrc p15, 1, r0, c0, c0, 1 @ read clidr, r0 = clidr
|
|
|
+ ands r3, r0, #0xe00000 @ extract LoUIS from clidr
|
|
|
+ mov r3, r3, lsr #20 @ r3 = LoUIS * 2
|
|
|
+ moveq pc, lr @ return if level == 0
|
|
|
+ mov r10, #0 @ r10 (starting level) = 0
|
|
|
+ b loop1 @ start flushing cache levels
|
|
|
+ENDPROC(v7_flush_dcache_louis)
|
|
|
+
|
|
|
/*
|
|
|
* v7_flush_dcache_all()
|
|
|
*
|
|
@@ -120,6 +138,24 @@ ENTRY(v7_flush_kern_cache_all)
|
|
|
mov pc, lr
|
|
|
ENDPROC(v7_flush_kern_cache_all)
|
|
|
|
|
|
+ /*
|
|
|
+ * v7_flush_kern_cache_louis(void)
|
|
|
+ *
|
|
|
+ * Flush the data cache up to Level of Unification Inner Shareable.
|
|
|
+ * Invalidate the I-cache to the point of unification.
|
|
|
+ */
|
|
|
+ENTRY(v7_flush_kern_cache_louis)
|
|
|
+ ARM( stmfd sp!, {r4-r5, r7, r9-r11, lr} )
|
|
|
+ THUMB( stmfd sp!, {r4-r7, r9-r11, lr} )
|
|
|
+ bl v7_flush_dcache_louis
|
|
|
+ mov r0, #0
|
|
|
+ ALT_SMP(mcr p15, 0, r0, c7, c1, 0) @ invalidate I-cache inner shareable
|
|
|
+ ALT_UP(mcr p15, 0, r0, c7, c5, 0) @ I+BTB cache invalidate
|
|
|
+ ARM( ldmfd sp!, {r4-r5, r7, r9-r11, lr} )
|
|
|
+ THUMB( ldmfd sp!, {r4-r7, r9-r11, lr} )
|
|
|
+ mov pc, lr
|
|
|
+ENDPROC(v7_flush_kern_cache_louis)
|
|
|
+
|
|
|
/*
|
|
|
* v7_flush_cache_all()
|
|
|
*
|