ARM: tegra: sleep: flush tlbs when exiting wfi
Colin Cross [Wed, 24 Aug 2011 00:43:54 +0000 (17:43 -0700)]
tegra_sleep_wfi disables coherency to prepare for possibly
resetting the cpu.  If an interrupt is received, it exits
wfi and re-enables coherency, but it was not flushing the
tlbs or the branch predictor array, which could have been
updated by broadcast tlb operations that were ignored.
Flush the tlbs and branch predictor array when exiting.

Change-Id: If2c6ca3f923baf2f883f461a2a90f08833c7e191
Signed-off-by: Colin Cross <ccross@android.com>

arch/arm/mach-tegra/sleep.S

index 0c74e4e..80aaca3 100644 (file)
@@ -316,6 +316,9 @@ ENTRY(tegra_sleep_wfi)
        mcr     p15, 0, r11, c1, c0, 1  @ reenable coherency
 
        @ the cpu was running with coherency disabled, caches may be out of date
+       mov     r0, #0
+       mcr     p15, 0, r0, c8, c3, 0   @ invalidate TLB
+       mcr     p15, 0, r0, c7, c5, 6   @ flush BTAC
 #ifdef MULTI_CACHE
        ldr     r10, =cpu_cache
        mov     lr, pc