arm64: errata: Unify speculative SSBS errata logic
[ Upstream commit ec768766608092087dfb5c1fc45a16a6f524dee2 ] Cortex-X4 erratum 3194386 and Neoverse-V3 erratum 3312417 are identical, with duplicate Kconfig text and some unsightly ifdeffery. While we try to share code behind CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS, having separate options results in a fair amount of boilerplate code, and this will only get worse as we expand the set of affected CPUs. To reduce this boilerplate, unify the two behind a common Kconfig option. This removes the duplicate text and Kconfig logic, and removes the need for the intermediate ARM64_WORKAROUND_SPECULATIVE_SSBS option. The set of affected CPUs is described as a list so that this can easily be extended. I've used ARM64_ERRATUM_3194386 (matching the Neoverse-V3 erratum ID) as the common option, matching the way we use ARM64_ERRATUM_1319367 to cover Cortex-A57 erratum 1319537 and Cortex-A72 erratum 1319367. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: James Morse <james.morse@arm.com> Cc: Will Deacon <will@kernel.org> Link: https://lore.kernel.org/r/20240603111812.1514101-5-mark.rutland@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> [ Mark: fix conflicts & renames, drop unneeded cpucaps.h ] Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
32480850c6
commit
31c04d3f68
3 changed files with 8 additions and 32 deletions
|
|
@ -96,7 +96,7 @@ stable kernels.
|
|||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Neoverse-N1 | #1542419 | ARM64_ERRATUM_1542419 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | Neoverse-V3 | #3312417 | ARM64_ERRATUM_3312417 |
|
||||
| ARM | Neoverse-V3 | #3312417 | ARM64_ERRATUM_3194386 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ARM | MMU-500 | #841119,826419 | N/A |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
|
|
|
|||
|
|
@ -590,34 +590,14 @@ config ARM64_ERRATUM_1742098
|
|||
|
||||
If unsure, say Y.
|
||||
|
||||
config ARM64_WORKAROUND_SPECULATIVE_SSBS
|
||||
bool
|
||||
|
||||
config ARM64_ERRATUM_3194386
|
||||
bool "Cortex-X4: 3194386: workaround for MSR SSBS not self-synchronizing"
|
||||
select ARM64_WORKAROUND_SPECULATIVE_SSBS
|
||||
bool "Cortex-X4/Neoverse-V3: workaround for MSR SSBS not self-synchronizing"
|
||||
default y
|
||||
help
|
||||
This option adds the workaround for ARM Cortex-X4 erratum 3194386.
|
||||
This option adds the workaround for the following errata:
|
||||
|
||||
On affected cores "MSR SSBS, #0" instructions may not affect
|
||||
subsequent speculative instructions, which may permit unexepected
|
||||
speculative store bypassing.
|
||||
|
||||
Work around this problem by placing a speculation barrier after
|
||||
kernel changes to SSBS. The presence of the SSBS special-purpose
|
||||
register is hidden from hwcaps and EL0 reads of ID_AA64PFR1_EL1, such
|
||||
that userspace will use the PR_SPEC_STORE_BYPASS prctl to change
|
||||
SSBS.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
config ARM64_ERRATUM_3312417
|
||||
bool "Neoverse-V3: 3312417: workaround for MSR SSBS not self-synchronizing"
|
||||
select ARM64_WORKAROUND_SPECULATIVE_SSBS
|
||||
default y
|
||||
help
|
||||
This option adds the workaround for ARM Neoverse-V3 erratum 3312417.
|
||||
* ARM Cortex-X4 erratum 3194386
|
||||
* ARM Neoverse-V3 erratum 3312417
|
||||
|
||||
On affected cores "MSR SSBS, #0" instructions may not affect
|
||||
subsequent speculative instructions, which may permit unexepected
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ void arm64_set_ssbd_mitigation(bool state)
|
|||
* CPUs could mis-speculate branches and bypass a conditional
|
||||
* barrier.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS))
|
||||
if (IS_ENABLED(CONFIG_ARM64_ERRATUM_3194386))
|
||||
spec_bar();
|
||||
|
||||
return;
|
||||
|
|
@ -841,14 +841,10 @@ static struct midr_range broken_aarch32_aes[] = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS
|
||||
static const struct midr_range erratum_spec_ssbs_list[] = {
|
||||
#ifdef CONFIG_ARM64_ERRATUM_3194386
|
||||
static const struct midr_range erratum_spec_ssbs_list[] = {
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_X4),
|
||||
#endif
|
||||
#ifdef CONFIG_ARM64_ERRATUM_3312417
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3),
|
||||
#endif
|
||||
{}
|
||||
};
|
||||
#endif
|
||||
|
|
@ -1042,7 +1038,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS
|
||||
#ifdef CONFIG_ARM64_ERRATUM_3194386
|
||||
{
|
||||
.desc = "ARM errata 3194386, 3312417",
|
||||
.capability = ARM64_WORKAROUND_SPECULATIVE_SSBS,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue