From 472a7dcaecec552c60ff1ec6b9f1f3818a9cfa98 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Mon, 14 Jul 2025 18:06:42 +0800 Subject: [PATCH 1/2] AOSCOS: arm64: Disable MPAM by default We have to work OotB on W510, and ARM64 does not support extending the built-in command line with the one from the bootloader. So only try MPAM if the user explicitly gives "aosc.try_mpam=1" via the cmdline. Signed-off-by: Xi Ruoyao Signed-off-by: Kexy Biscuit (cherry picked from commit 8fc0099ea8f6edfb929c09bbcd38e57485a2ddf6) Signed-off-by: Wentao Guan --- arch/arm64/kernel/pi/idreg-override.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/arch/arm64/kernel/pi/idreg-override.c b/arch/arm64/kernel/pi/idreg-override.c index bc57b290e5e7b..2d45dbb689476 100644 --- a/arch/arm64/kernel/pi/idreg-override.c +++ b/arch/arm64/kernel/pi/idreg-override.c @@ -215,6 +215,17 @@ static const struct ftr_set_desc sw_features __prel64_initconst = { }, }; +static struct arm64_ftr_override __read_mostly aosc_feature_override; + +static const struct ftr_set_desc aosc_features __prel64_initconst = { + .name = "aosc", + .override = &aosc_feature_override, + .fields = { + FIELD("try_mpam", 0, NULL), + {} + }, +}; + static const PREL64(const struct ftr_set_desc, reg) regs[] __prel64_initconst = { { &mmfr0 }, @@ -226,6 +237,7 @@ PREL64(const struct ftr_set_desc, reg) regs[] __prel64_initconst = { { &isar2 }, { &smfr0 }, { &sw_features }, + { &aosc_features }, }; static const struct { @@ -390,6 +402,14 @@ static __init void parse_cmdline(const void *fdt, int chosen) if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && prop) __parse_cmdline(prop, true); + + /* + * Sorry but we have to work OotB on some platforms with broken + * firmware, notably W510. Use "aosc.try_mpam=1" if you really need + * MPAM on AOSC. + */ + if (!arm64_apply_feature_override(0, 0, 4, &aosc_feature_override)) + __parse_cmdline("arm64.nompam", true); } void __init init_feature_override(u64 boot_status, const void *fdt, From 6bc74a28326d901478859cb31664475d628dba91 Mon Sep 17 00:00:00 2001 From: Wentao Guan Date: Mon, 2 Mar 2026 18:06:10 +0800 Subject: [PATCH 2/2] arm64: Add mpam_disable_list for MPAM deepin inclusion category: feature Only disable mpam for mpam_disable_list, such as TSV110. Tested in DMI: HUAWEI HUAWEIPGU-WBY0/HUAWEIPGU-WBY0-PCB, BIOS 1.08 12/23/2019. Signed-off-by: Wentao Guan --- arch/arm64/kernel/pi/idreg-override.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/pi/idreg-override.c b/arch/arm64/kernel/pi/idreg-override.c index 2d45dbb689476..35125bc2a310b 100644 --- a/arch/arm64/kernel/pi/idreg-override.c +++ b/arch/arm64/kernel/pi/idreg-override.c @@ -408,8 +408,21 @@ static __init void parse_cmdline(const void *fdt, int chosen) * firmware, notably W510. Use "aosc.try_mpam=1" if you really need * MPAM on AOSC. */ - if (!arm64_apply_feature_override(0, 0, 4, &aosc_feature_override)) - __parse_cmdline("arm64.nompam", true); + static const struct midr_range mpam_disable_list[] __initconst = { + MIDR_ALL_VERSIONS(MIDR_HISI_TSV110), + { /* sentinel */ } + }; + + for (const struct midr_range *r = mpam_disable_list; r->model; r++) { + if (midr_is_cpu_model_range(read_cpuid_id(), r->model, + r->rv_min, r->rv_max)) { + if (!arm64_apply_feature_override(0, 0, 4, &aosc_feature_override)) { + __parse_cmdline("arm64.nompam", true); + break; + } + } + } + } void __init init_feature_override(u64 boot_status, const void *fdt,