* - kaddr - page address
* - size - region size
*/
+extern void flush_cache_louis(void);
extern void flush_cache_all(void);
extern void flush_icache_range(unsigned long start, unsigned long end);
extern void __flush_dcache_area(void *addr, size_t len);
return !!cpus_stuck_in_kernel || smp_spin_tables;
}
+
+static void flush_all_cpu_cache(void *info)
+{
+ flush_cache_louis();
+}
+
+static void flush_all_cluster_cache(void *info)
+{
+ flush_cache_all();
+}
+
ret x12
ENDPROC(flush_cache_all)
+ENTRY(__flush_dcache_louis)
+ dmb ish
+ mrs x0, clidr_el1
+ ands x3, x0, #(7 << 21)
+ lsr x3, x3, #20 // w3 = LoUIS * 2
+ b.eq level_is_zero
+ mov x10, #0
+ b loop1 // start flushing cache
+level_is_zero:
+ ret
+ENDPROC(__flush_dcache_louis)
+
+ENTRY(flush_cache_louis)
+ mov x12, lr
+ bl __flush_dcache_louis
+ mov x0, #0
+ ic ialluis
+ ret x12
+ENDPROC(flush_cache_louis)
+
/*
* flush_icache_range(start,end)
*