[PATCH v2 2/2] arm64: Apply existing Apple Silicon CPU workarounds to newer CPUs

From: Michael Reeves via B4 Relay

Date: Tue Oct 20 2026 - 19:55:01 EST


From: Michael Reeves <michael.reeves077@xxxxxxxxx>

Add M3, M3 Pro, M3 Max, base M4, A18 Pro and M5 Pro to apple_cpus
so they receive the existing PMU trap and broken SEIS workarounds.

Add these CPUs to has_vgic_v3 so KVM detects TDIR support and can
trap guest DIR accesses without trapping all common registers.

Co-developed-by: Yureka Lilian <yureka@xxxxxxxxxxxxxx>
Signed-off-by: Yureka Lilian <yureka@xxxxxxxxxxxxxx>
Tested-by: Yureka Lilian <yureka@xxxxxxxxxxxxxx>
Tested-by: Myria Sarvay <myrialsarvay@xxxxxxxxx>
Signed-off-by: Michael Reeves <michael.reeves077@xxxxxxxxx>
---
arch/arm64/kernel/cpu_errata.c | 12 ++++++++++++
arch/arm64/kernel/cpufeature.c | 12 ++++++++++++
2 files changed, 24 insertions(+)

diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index e0c094025..bc91bc13b 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -288,6 +288,18 @@ static const struct midr_range apple_cpus[] = {
MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_PRO),
MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD_MAX),
MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_MAX),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_SAWTOOTH),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_EVEREST),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_SAWTOOTH_PRO),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_EVEREST_PRO),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_SAWTOOTH_MAX),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_EVEREST_MAX),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M4_DONAN_ECORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M4_DONAN_PCORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_A18_PRO_TAHITI_ECORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_A18_PRO_TAHITI_PCORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M5_PRO_SOTRA_MCORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M5_PRO_SOTRA_PCORE),
{},
};

diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index 3ae3ad1a1..bb82b80b3 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -2357,6 +2357,18 @@ static bool can_trap_icv_dir_el1(const struct arm64_cpu_capabilities *entry,
MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_PRO),
MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD_MAX),
MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_MAX),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_SAWTOOTH),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_EVEREST),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_SAWTOOTH_PRO),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_EVEREST_PRO),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_SAWTOOTH_MAX),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M3_EVEREST_MAX),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M4_DONAN_ECORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M4_DONAN_PCORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_A18_PRO_TAHITI_ECORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_A18_PRO_TAHITI_PCORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M5_PRO_SOTRA_MCORE),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_M5_PRO_SOTRA_PCORE),
{},
};
struct arm_smccc_res res = {};

--
2.56.0