summaryrefslogtreecommitdiffstats
path: root/arch/arm/cpu/cache-armv8.S
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2018-03-08 21:00:02 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2018-03-21 12:23:03 +0100
commit44eaf1dd75a4626bed924422914f6f1593be697a (patch)
tree11fcaf2265772daae6dc7ef15354d1bda3c937ab /arch/arm/cpu/cache-armv8.S
parent9738c67932f72083074e15f77ca803ec3f0b2b16 (diff)
downloadbarebox-44eaf1dd75a4626bed924422914f6f1593be697a.tar.gz
barebox-44eaf1dd75a4626bed924422914f6f1593be697a.tar.xz
ARM: aarch64: cache: Add v8_inv_dcache_range
implement v8_flush_dcache_range based on v8_inv_dcache_range. While at it add a prototype for v8_inv_dcache_range. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/cpu/cache-armv8.S')
-rw-r--r--arch/arm/cpu/cache-armv8.S19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/cpu/cache-armv8.S b/arch/arm/cpu/cache-armv8.S
index 82b2f81778..3e21b35913 100644
--- a/arch/arm/cpu/cache-armv8.S
+++ b/arch/arm/cpu/cache-armv8.S
@@ -148,6 +148,25 @@ ENTRY(v8_flush_dcache_range)
ret
ENDPROC(v8_flush_dcache_range)
+.section .text.v8_inv_dcache_range
+ENTRY(v8_inv_dcache_range)
+ mrs x3, ctr_el0
+ lsr x3, x3, #16
+ and x3, x3, #0xf
+ mov x2, #4
+ lsl x2, x2, x3 /* cache line size */
+
+ /* x2 <- minimal cache line size in cache system */
+ sub x3, x2, #1
+ bic x0, x0, x3
+1: dc ivac, x0 /* invalidate data or unified cache */
+ add x0, x0, x2
+ cmp x0, x1
+ b.lo 1b
+ dsb sy
+ ret
+ENDPROC(v8_inv_dcache_range)
+
/*
* void v8_invalidate_icache_all(void)
*