diff --git a/include/cpuinfo.h b/include/cpuinfo.h index ce47be96..0f6aca3d 100644 --- a/include/cpuinfo.h +++ b/include/cpuinfo.h @@ -614,6 +614,11 @@ enum cpuinfo_uarch { /** Apple A18 pro processor (little cores). */ cpuinfo_uarch_tahiti_sawtooth = 0x00700207, + /** Apple M4 processor (big cores). */ + cpuinfo_uarch_donan_everest = 0x00700308, + /** Apple M4 processor (little cores). */ + cpuinfo_uarch_donan_sawtooth = 0x00700309, + /** Cavium ThunderX. */ cpuinfo_uarch_thunderx = 0x00800100, /** Cavium ThunderX2 (originally Broadcom Vulkan). */ diff --git a/src/arm/mach/init.c b/src/arm/mach/init.c index 2980f23a..a436decc 100644 --- a/src/arm/mach/init.c +++ b/src/arm/mach/init.c @@ -148,7 +148,11 @@ static enum cpuinfo_uarch decode_uarch(uint32_t cpu_family, uint32_t core_index, /* Hexa-core: 2x Avalanche + 4x Blizzard */ return core_index + 4 < core_count ? cpuinfo_uarch_tahiti_everest : cpuinfo_uarch_tahiti_sawtooth; - + case CPUFAMILY_ARM_DONAN: /* M4 */ + /* 10-core: 4x Donan Everest + 6x Donan Sawtooth */ + case CPUFAMILY_ARM_BRAVA: /* M4 Pro */ + /* 14-core: 10x Donan Everest + 4x Donan Sawtooth */ + return core_index + 4 < core_count ? cpuinfo_uarch_donan_everest : cpuinfo_uarch_donan_sawtooth; default: /* Use hw.cpusubtype for detection */ break; diff --git a/tools/cpu-info.c b/tools/cpu-info.c index 792b13f1..5c4d1c56 100644 --- a/tools/cpu-info.c +++ b/tools/cpu-info.c @@ -306,6 +306,10 @@ static const char* uarch_to_string(enum cpuinfo_uarch uarch) { return "Tahiti_Everest"; case cpuinfo_uarch_tahiti_sawtooth: return "Tahiti_Sawtooth"; + case cpuinfo_uarch_donan_everest: + return "Donan Everest"; + case cpuinfo_uarch_donan_sawtooth: + return "Donan Sawtooth"; case cpuinfo_uarch_thunderx: return "ThunderX"; case cpuinfo_uarch_thunderx2: