From: Linu Cherian <linu.cherian@arm.com> mainline inclusion from mainline-v7.3-rc1 commit 879aca5119cd7487bac64089127927aaae233a63 category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/9850 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i... ------------------------------------------- Add ID_AA64MMFR2_EL1.BBM based BBML3 feature detection in cpu_supports_bbml3() so that cpus with the feature would not have to be added into MIDR based supports_bbml3_list. Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Signed-off-by: Linu Cherian <linu.cherian@arm.com> [will: Tidy up cpu_supports_bbml3()] Signed-off-by: Will Deacon <will@kernel.org> Conflicts: arch/arm64/kernel/cpufeature.c [Context conflicts.] Signed-off-by: Jinjiang Tu <tujinjiang@huawei.com> --- arch/arm64/kernel/cpufeature.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index a76e8b6a31ce..a6647bb6b73a 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -2145,16 +2145,12 @@ bool cpu_supports_bbml3(void) MIDR_REV_RANGE(MIDR_NEOVERSE_V3, 0, 2, 0xf), {} }; + u64 mmfr2 = __read_sysreg_by_encoding(SYS_ID_AA64MMFR2_EL1); - if (!is_midr_in_range_list(supports_bbml3_list)) - return false; - - /* - * We currently ignore the ID_AA64MMFR2_EL1 register, and only care - * about whether the MIDR check passes. - */ + if (SYS_FIELD_GET(ID_AA64MMFR2_EL1, BBM, mmfr2) >= ID_AA64MMFR2_EL1_BBM_3) + return true; - return true; + return is_midr_in_range_list(supports_bbml3_list); } static bool has_bbml3(const struct arm64_cpu_capabilities *caps, int scope) -- 2.43.0