|
@@ -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)
|
|
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 ("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");
|
|
__asm__ volatile ("isb");
|
|
}
|
|
}
|
|
|
|
|