After executing a TLBI a DSB is needed to ensure completion of the
TLBI.
rk3328: The MMU is allowed to load TLB entries for as long as it is
enabled. Because of this, the correct place to execute a TLBI is right
after disabling the MMU.
Change-Id: I8280f248d10b49a8c354a4ccbdc8f8345ac4c170
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
bl disable_mmu_icache_el3
tlbi alle3
+ dsb ish /* ERET implies ISB, so it is not needed here */
#if SPIN_ON_BL1_EXIT
bl print_debug_loop_message
__sramfunc void sram_suspend(void)
{
/* disable mmu and icache */
- tlbialle3();
disable_mmu_icache_el3();
+ tlbialle3();
+ dsbsy();
+ isb();
mmio_write_32(SGRF_BASE + SGRF_SOC_CON(1),
((uintptr_t)&pmu_cpuson_entrypoint >> CPU_BOOT_ADDR_ALIGN) |
/* Invalidate TLBs at EL1. */
tlbivmalle1();
+ dsbish();
/*
* General-Purpose registers