diff options
Diffstat (limited to 'arch/arm')
| -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 |
