aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/proc-v7.S
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2009-04-30 12:06:09 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-04-30 15:12:50 -0400
commit7ce236fcd6fd45b0441a2d49acb2ceb2de2e8a47 (patch)
tree1f092413fbe0c91350e7861638dec7bb475c8435 /arch/arm/mm/proc-v7.S
parent9cba3ccc8fe77b67aff2db8f5827d7cb752ce11f (diff)
[ARM] 5487/1: ARM errata: Stale prediction on replaced interworking branch
This patch adds the workaround for the 430973 Cortex-A8 (r1p0..r1p2) erratum. The BTAC/BTB is now flushed at every context switch. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm/proc-v7.S')
-rw-r--r--arch/arm/mm/proc-v7.S8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index d1ebec42521d..fc81159596fe 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -95,6 +95,9 @@ ENTRY(cpu_v7_switch_mm)
95 mov r2, #0 95 mov r2, #0
96 ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id 96 ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id
97 orr r0, r0, #TTB_FLAGS 97 orr r0, r0, #TTB_FLAGS
98#ifdef CONFIG_ARM_ERRATA_430973
99 mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB
100#endif
98 mcr p15, 0, r2, c13, c0, 1 @ set reserved context ID 101 mcr p15, 0, r2, c13, c0, 1 @ set reserved context ID
99 isb 102 isb
1001: mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 1031: mcr p15, 0, r0, c2, c0, 0 @ set TTB 0
@@ -180,6 +183,11 @@ __v7_setup:
180 stmia r12, {r0-r5, r7, r9, r11, lr} 183 stmia r12, {r0-r5, r7, r9, r11, lr}
181 bl v7_flush_dcache_all 184 bl v7_flush_dcache_all
182 ldmia r12, {r0-r5, r7, r9, r11, lr} 185 ldmia r12, {r0-r5, r7, r9, r11, lr}
186#ifdef CONFIG_ARM_ERRATA_430973
187 mrc p15, 0, r10, c1, c0, 1 @ read aux control register
188 orr r10, r10, #(1 << 6) @ set IBE to 1
189 mcr p15, 0, r10, c1, c0, 1 @ write aux control register
190#endif
183 mov r10, #0 191 mov r10, #0
184#ifdef HARVARD_CACHE 192#ifdef HARVARD_CACHE
185 mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate 193 mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate