diff options
author | Will Deacon <will.deacon@arm.com> | 2015-03-23 20:07:02 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2015-04-01 11:24:31 +0200 |
commit | 905e8c5dcaa147163672b06fe9dcb5abaacbc711 (patch) | |
tree | 4284f6e2ecac493b6e4938e4b60e57fb521c3790 /arch/arm64/kernel/cpu_errata.c | |
parent | arm64: Use bool function return values of true/false not 1/0 (diff) | |
download | linux-905e8c5dcaa147163672b06fe9dcb5abaacbc711.tar.xz linux-905e8c5dcaa147163672b06fe9dcb5abaacbc711.zip |
arm64: errata: add workaround for cortex-a53 erratum #845719
When running a compat (AArch32) userspace on Cortex-A53, a load at EL0
from a virtual address that matches the bottom 32 bits of the virtual
address used by a recent load at (AArch64) EL1 might return incorrect
data.
This patch works around the issue by writing to the contextidr_el1
register on the exception return path when returning to a 32-bit task.
This workaround is patched in at runtime based on the MIDR value of the
processor.
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/cpu_errata.c')
-rw-r--r-- | arch/arm64/kernel/cpu_errata.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index a66f4fa4d541..4672860def1f 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -73,6 +73,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = { MIDR_RANGE(MIDR_CORTEX_A57, 0x00, 0x12), }, #endif +#ifdef CONFIG_ARM64_ERRATUM_845719 + { + /* Cortex-A53 r0p[01234] */ + .desc = "ARM erratum 845719", + .capability = ARM64_WORKAROUND_845719, + MIDR_RANGE(MIDR_CORTEX_A53, 0x00, 0x04), + }, +#endif { } }; |