Skip to content

Commit a8bc98a

Browse files
committed
Improve detection of ARM mobile SOCs
Based on data collected from geekbench, pytorch/cpuinfo and testing of physical devices. Also add comment to CPU implementer ID clarifying that it is a letter based on the name of the company.
1 parent c8c6bdc commit a8bc98a

File tree

1 file changed

+39
-24
lines changed

1 file changed

+39
-24
lines changed

src/processor_arm.cpp

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ static std::set<CPUID> get_cpuinfo(void)
809809
static CPU get_cpu_name(CPUID cpuid)
810810
{
811811
switch (cpuid.implementer) {
812-
case 0x41: // ARM
812+
case 0x41: // 'A': ARM
813813
switch (cpuid.part) {
814814
case 0xb02: return CPU::arm_mpcore;
815815
case 0xb36: return CPU::arm_1136jf_s;
@@ -856,13 +856,14 @@ static CPU get_cpu_name(CPUID cpuid)
856856
case 0xd4a: return CPU::arm_neoverse_e1;
857857
default: return CPU::generic;
858858
}
859-
case 0x42: // Broadcom (Cavium)
859+
case 0x42: // 'B': Broadcom (Cavium)
860860
switch (cpuid.part) {
861+
// case 0x00f: return CPU::broadcom_brahma_b15;
861862
// case 0x100: return CPU::broadcom_brahma_b53;
862863
case 0x516: return CPU::cavium_thunderx2t99p1;
863864
default: return CPU::generic;
864865
}
865-
case 0x43: // Cavium
866+
case 0x43: // 'C': Cavium
866867
switch (cpuid.part) {
867868
case 0xa0: return CPU::cavium_thunderx;
868869
case 0xa1:
@@ -881,73 +882,87 @@ static CPU get_cpu_name(CPUID cpuid)
881882
case 0xb8: return CPU::marvell_thunderx3t110;
882883
default: return CPU::generic;
883884
}
884-
case 0x46: // Fujitsu
885+
case 0x46: // 'F': Fujitsu
885886
switch (cpuid.part) {
886887
case 0x1: return CPU::fujitsu_a64fx;
887888
default: return CPU::generic;
888889
}
889-
case 0x48: // HiSilicon
890+
case 0x48: // 'H': HiSilicon
890891
switch (cpuid.part) {
891892
case 0xd01: return CPU::hisilicon_tsv110;
893+
case 0xd40: return CPU::arm_cortex_a76; // Kirin 980
892894
default: return CPU::generic;
893895
}
894-
case 0x4e: // NVIDIA
896+
case 0x4e: // 'N': NVIDIA
895897
switch (cpuid.part) {
896898
case 0x000: return CPU::nvidia_denver1;
897899
case 0x003: return CPU::nvidia_denver2;
898900
case 0x004: return CPU::nvidia_carmel;
899901
default: return CPU::generic;
900902
}
901-
case 0x50: // AppliedMicro
903+
case 0x50: // 'P': AppliedMicro
902904
// x-gene 2
903905
// x-gene 3
904906
switch (cpuid.part) {
905907
case 0x000: return CPU::apm_xgene1;
906908
default: return CPU::generic;
907909
}
908-
case 0x51: // Qualcomm
910+
case 0x51: // 'Q': Qualcomm
909911
switch (cpuid.part) {
910912
case 0x00f:
911913
case 0x02d:
912914
return CPU::qualcomm_scorpion;
913915
case 0x04d:
914916
case 0x06f:
915917
return CPU::qualcomm_krait;
916-
case 0x201:
917-
case 0x205:
918-
case 0x211:
918+
case 0x201: // silver
919+
case 0x205: // gold
920+
case 0x211: // silver
919921
return CPU::qualcomm_kyro;
920-
case 0x800:
921-
case 0x801:
922-
case 0x802:
923-
case 0x803:
924-
case 0x804:
925-
case 0x805:
926-
return CPU::arm_cortex_a73; // second-generation Kryo
922+
// kryo 2xx
923+
case 0x800: // gold
924+
return CPU::arm_cortex_a73;
925+
case 0x801: // silver
926+
return CPU::arm_cortex_a53;
927+
// kryo 3xx
928+
case 0x802: // gold
929+
return CPU::arm_cortex_a75;
930+
case 0x803: // silver
931+
return CPU::arm_cortex_a55;
932+
// kryo 4xx
933+
case 0x804: // gold
934+
return CPU::arm_cortex_a76;
935+
case 0x805: // silver
936+
return CPU::arm_cortex_a55;
937+
// kryo 5xx seems to be using ID for cortex-a77 directly
927938
case 0xc00:
928939
return CPU::qualcomm_falkor;
929940
case 0xc01:
930941
return CPU::qualcomm_saphira;
931942
default: return CPU::generic;
932943
}
933-
case 0x53: // Samsung
934-
if (cpuid.part == 1)
944+
case 0x53: // 'S': Samsung
945+
if (cpuid.part == 1) {
946+
if (cpuid.variant == 4)
947+
return CPU::samsung_exynos_m2;
935948
return CPU::samsung_exynos_m1;
949+
}
936950
if (cpuid.variant != 1)
937951
return CPU::generic;
938952
switch (cpuid.part) {
939953
case 0x2: return CPU::samsung_exynos_m3;
940954
case 0x3: return CPU::samsung_exynos_m4;
955+
case 0x4: return CPU::samsung_exynos_m5;
941956
default: return CPU::generic;
942957
}
943-
case 0x56: // Marvell
958+
case 0x56: // 'V': Marvell
944959
switch (cpuid.part) {
945960
case 0x581:
946961
case 0x584:
947962
return CPU::marvell_pj4;
948963
default: return CPU::generic;
949964
}
950-
case 0x61: // Apple
965+
case 0x61: // 'a': Apple
951966
// https://opensource.apple.com/source/xnu/xnu-6153.81.5/osfmk/arm/cpuid.h.auto.html
952967
switch (cpuid.part) {
953968
case 0x0: // Swift
@@ -978,12 +993,12 @@ static CPU get_cpu_name(CPUID cpuid)
978993
return CPU::apple_a13;
979994
default: return CPU::generic;
980995
}
981-
case 0x68: // Huaxintong Semiconductor
996+
case 0x68: // 'h': Huaxintong Semiconductor
982997
switch (cpuid.part) {
983998
case 0x0: return CPU::hxt_phecda;
984999
default: return CPU::generic;
9851000
}
986-
case 0x69: // Intel
1001+
case 0x69: // 'i': Intel
9871002
switch (cpuid.part) {
9881003
case 0x001: return CPU::intel_3735d;
9891004
default: return CPU::generic;

0 commit comments

Comments
 (0)