diff options
-rw-r--r-- | arch/arm/Kconfig | 11 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 166efa2a19cd..ec0f6589af05 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1202,6 +1202,17 @@ config ARM_ERRATA_753970 | |||
1202 | This has the same effect as the cache sync operation: store buffer | 1202 | This has the same effect as the cache sync operation: store buffer |
1203 | drain and waiting for all buffers empty. | 1203 | drain and waiting for all buffers empty. |
1204 | 1204 | ||
1205 | config ARM_ERRATA_754322 | ||
1206 | bool "ARM errata: possible faulty MMU translations following an ASID switch" | ||
1207 | depends on CPU_V7 | ||
1208 | help | ||
1209 | This option enables the workaround for the 754322 Cortex-A9 (r2p*, | ||
1210 | r3p*) erratum. A speculative memory access may cause a page table walk | ||
1211 | which starts prior to an ASID switch but completes afterwards. This | ||
1212 | can populate the micro-TLB with a stale entry which may be hit with | ||
1213 | the new ASID. This workaround places two dsb instructions in the mm | ||
1214 | switching code so that no page table walks can cross the ASID switch. | ||
1215 | |||
1205 | endmenu | 1216 | endmenu |
1206 | 1217 | ||
1207 | source "arch/arm/common/Kconfig" | 1218 | source "arch/arm/common/Kconfig" |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 8e3356239136..f7498f1a2e86 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -108,10 +108,16 @@ ENTRY(cpu_v7_switch_mm) | |||
108 | #ifdef CONFIG_ARM_ERRATA_430973 | 108 | #ifdef CONFIG_ARM_ERRATA_430973 |
109 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB | 109 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB |
110 | #endif | 110 | #endif |
111 | #ifdef CONFIG_ARM_ERRATA_754322 | ||
112 | dsb | ||
113 | #endif | ||
111 | mcr p15, 0, r2, c13, c0, 1 @ set reserved context ID | 114 | mcr p15, 0, r2, c13, c0, 1 @ set reserved context ID |
112 | isb | 115 | isb |
113 | 1: mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 | 116 | 1: mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 |
114 | isb | 117 | isb |
118 | #ifdef CONFIG_ARM_ERRATA_754322 | ||
119 | dsb | ||
120 | #endif | ||
115 | mcr p15, 0, r1, c13, c0, 1 @ set context ID | 121 | mcr p15, 0, r1, c13, c0, 1 @ set context ID |
116 | isb | 122 | isb |
117 | #endif | 123 | #endif |