diff options
author | Zhang Lei <zhang.lei@jp.fujitsu.com> | 2019-02-26 18:43:41 +0000 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2019-02-28 16:24:25 +0000 |
commit | 3e32131abc311a5cb9fddecc72cbd0b95ffcc10d (patch) | |
tree | 7f3c6887b2ea7c18d9d7929cdd9123cae95e0038 /arch/arm64/mm | |
parent | 4caf8758b60b6f7f9773fd1d265cb5a7cf935c97 (diff) | |
download | linux-stable-3e32131abc311a5cb9fddecc72cbd0b95ffcc10d.tar.gz linux-stable-3e32131abc311a5cb9fddecc72cbd0b95ffcc10d.tar.bz2 linux-stable-3e32131abc311a5cb9fddecc72cbd0b95ffcc10d.zip |
arm64: Add workaround for Fujitsu A64FX erratum 010001
On the Fujitsu-A64FX cores ver(1.0, 1.1), memory access may cause
an undefined fault (Data abort, DFSC=0b111111). This fault occurs under
a specific hardware condition when a load/store instruction performs an
address translation. Any load/store instruction, except non-fault access
including Armv8 and SVE might cause this undefined fault.
The TCR_ELx.NFD1 bit is used by the kernel when CONFIG_RANDOMIZE_BASE
is enabled to mitigate timing attacks against KASLR where the kernel
address space could be probed using the FFR and suppressed fault on
SVE loads.
Since this erratum causes spurious exceptions, which may corrupt
the exception registers, we clear the TCR_ELx.NFDx=1 bits when
booting on an affected CPU.
Signed-off-by: Zhang Lei <zhang.lei@jp.fujitsu.com>
[Generated MIDR value/mask for __cpu_setup(), removed spurious-fault handler
and always disabled the NFDx bits on affected CPUs]
Signed-off-by: James Morse <james.morse@arm.com>
Tested-by: zhang.lei <zhang.lei@jp.fujitsu.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/mm')
-rw-r--r-- | arch/arm64/mm/proc.S | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index 3ea4f3b84a8b..aa0817c9c4c3 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -445,6 +445,7 @@ ENTRY(__cpu_setup) ldr x10, =TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \ TCR_TG_FLAGS | TCR_KASLR_FLAGS | TCR_ASID16 | \ TCR_TBI0 | TCR_A1 | TCR_KASAN_FLAGS + tcr_clear_errata_bits x10, x9, x5 #ifdef CONFIG_ARM64_USER_VA_BITS_52 ldr_l x9, vabits_user |