From f9736c87faeaf2c9c488fa33e763a035afc4cf32 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Fri, 11 Apr 2025 14:45:32 +0100 Subject: [PATCH] ANDROID: arm64: Forcefully disable SME at runtime In preparation for enabling the broken CONFIG_ARM64_SME option ahead of KMI freeze, forcefully disable SME at runtime so that the broken code remains unusable for now. Cc: Mark Rutland Cc: Todd Kjos Signed-off-by: Will Deacon Bug: 393087661 Change-Id: I1dd66318b015da02154072271e7bacae7e750940 --- arch/arm64/kernel/pi/idreg-override.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/arm64/kernel/pi/idreg-override.c b/arch/arm64/kernel/pi/idreg-override.c index 742830904a42..a1f488fd640c 100644 --- a/arch/arm64/kernel/pi/idreg-override.c +++ b/arch/arm64/kernel/pi/idreg-override.c @@ -399,6 +399,17 @@ void __init init_feature_override(u64 boot_status, const void *fdt, parse_cmdline(fdt, chosen); + /* + * ANDROID: Forcefully disable SME at runtime until it is fixed + * upstream (b/393087661). We prefer this to disabling + * CONFIG_ARM64_SME so that the impact of the fixes on KMI is + * minimised. + */ + id_aa64pfr1_override.mask |= ID_AA64PFR1_EL1_SME; + id_aa64pfr1_override.val &= ~ID_AA64PFR1_EL1_SME; + id_aa64smfr0_override.mask = GENMASK(63, 0); + id_aa64smfr0_override.val = 0; + for (i = 0; i < ARRAY_SIZE(regs); i++) { reg = prel64_pointer(regs[i].reg); override = prel64_pointer(reg->override);