diff --git a/src/arm/cache.c b/src/arm/cache.c index dd199193..97740c43 100644 --- a/src/arm/cache.c +++ b/src/arm/cache.c @@ -1341,7 +1341,8 @@ void cpuinfo_arm_decode_cache( * information, please refer to the technical manuals * linked above */ - const uint32_t min_l2_size_KB = uarch == cpuinfo_uarch_neoverse_v2 ? 1024 : 256; + const uint32_t min_l2_size_KB = + (uarch == cpuinfo_uarch_neoverse_v2 || midr_is_ampere_altra(midr)) ? 1024 : 256; const uint32_t min_l3_size_KB = 0; *l1i = (struct cpuinfo_cache){ diff --git a/src/arm/midr.h b/src/arm/midr.h index 89ebbb58..5530d5a9 100644 --- a/src/arm/midr.h +++ b/src/arm/midr.h @@ -34,6 +34,7 @@ #define CPUINFO_ARM_MIDR_KRYO_SILVER_820 UINT32_C(0x510F2110) #define CPUINFO_ARM_MIDR_EXYNOS_M1_M2 UINT32_C(0x530F0010) #define CPUINFO_ARM_MIDR_DENVER2 UINT32_C(0x4E0F0030) +#define CPUINFO_ARM_MIDR_AMPERE_ALTRA UINT32_C(0x413fd0c1) inline static uint32_t midr_set_implementer(uint32_t midr, uint32_t implementer) { return (midr & ~CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) | @@ -167,6 +168,11 @@ inline static bool midr_is_kryo_gold(uint32_t midr) { return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO_GOLD & uarch_mask); } +inline static bool midr_is_ampere_altra(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_AMPERE_ALTRA & uarch_mask); +} + inline static uint32_t midr_score_core(uint32_t midr) { const uint32_t core_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; switch (midr & core_mask) {