summaryrefslogtreecommitdiff
path: root/libcpu
diff options
context:
space:
mode:
Diffstat (limited to 'libcpu')
-rw-r--r--libcpu/aarch64/common/cache.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/libcpu/aarch64/common/cache.h b/libcpu/aarch64/common/cache.h
index 06a2805c48..ef7b235d0e 100644
--- a/libcpu/aarch64/common/cache.h
+++ b/libcpu/aarch64/common/cache.h
@@ -23,9 +23,13 @@ void rt_hw_cpu_dcache_invalidate(void *start_addr, unsigned long size);
static inline void rt_hw_icache_invalidate_all(void)
{
- /* wait for any modification complete */
+ /* wait for previous modification to complete */
__asm__ volatile ("dsb ishst");
- __asm__ volatile ("ic iallu");
+
+ __asm__ volatile ("ic ialluis");
+ /* wait for ic to retire */
+ __asm__ volatile ("dsb nsh");
+ /* flush instruction pipeline */
__asm__ volatile ("isb");
}