From e42f04cca8949aca744821e5daa037b15f541c60 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Sat, 10 Aug 2024 11:03:22 +0100 Subject: [PATCH] [v1.05][ARM] Add support for Kirin 9000S and TSV120 (#259) --- src/arm/soc.c | 7 +++++-- src/arm/socs.h | 3 ++- src/arm/uarch.c | 4 ++++ src/arm/uarch.h | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/arm/soc.c b/src/arm/soc.c index fcecd2b..f5831e5 100644 --- a/src/arm/soc.c +++ b/src/arm/soc.c @@ -167,11 +167,13 @@ bool match_google(char* soc_name, struct system_on_chip* soc) { // https://www.techinsights.com/ // https://datasheetspdf.com/pdf-file/1316605/HiSilicon/Hi3660/1 +// https://github.com/Dr-Noob/cpufetch/issues/259 bool match_hisilicon(char* soc_name, struct system_on_chip* soc) { char* tmp; - if((tmp = strstr(soc_name, "hi")) == NULL) - return false; + if((tmp = strstr(soc_name, "hi")) != NULL); + else if((tmp = strstr(soc_name, "kirin")) != NULL); + else return false; soc->soc_vendor = SOC_VENDOR_KIRIN; @@ -204,6 +206,7 @@ bool match_hisilicon(char* soc_name, struct system_on_chip* soc) { SOC_EQ(tmp, "hi3680", "980", SOC_HISILICON_3680, soc, 7) //SOC_EQ(tmp, "?", "985", SOC_KIRIN, soc, 7) SOC_EQ(tmp, "hi3690", "990", SOC_HISILICON_3690, soc, 7) + SOC_EQ(tmp, "kirin9000s", "9000s", SOC_HISILICON_9000S,soc, 7) SOC_END } diff --git a/src/arm/socs.h b/src/arm/socs.h index 0ff89db..aabfa51 100644 --- a/src/arm/socs.h +++ b/src/arm/socs.h @@ -29,6 +29,7 @@ enum { SOC_HISILICON_3670, SOC_HISILICON_3680, SOC_HISILICON_3690, + SOC_HISILICON_9000S, // Kunpeng // SOC_KUNPENG_920, SOC_KUNPENG_930, @@ -385,7 +386,7 @@ enum { inline static VENDOR get_soc_vendor_from_soc(SOC soc) { if(soc >= SOC_BCM_2835 && soc <= SOC_BCM_2712) return SOC_VENDOR_BROADCOM; - else if(soc >= SOC_HISILICON_3620 && soc <= SOC_HISILICON_3690) return SOC_VENDOR_KIRIN; + else if(soc >= SOC_HISILICON_3620 && soc <= SOC_HISILICON_9000S) return SOC_VENDOR_KIRIN; else if(soc >= SOC_KUNPENG_920 && soc <= SOC_KUNPENG_930) return SOC_VENDOR_KUNPENG; else if(soc >= SOC_EXYNOS_3475 && soc <= SOC_EXYNOS_880) return SOC_VENDOR_EXYNOS; else if(soc >= SOC_MTK_MT6893 && soc <= SOC_MTK_MT8783) return SOC_VENDOR_MEDIATEK; diff --git a/src/arm/uarch.c b/src/arm/uarch.c index 9566e84..9d0c62b 100644 --- a/src/arm/uarch.c +++ b/src/arm/uarch.c @@ -75,6 +75,7 @@ static const ISA isas_uarch[] = { [UARCH_THUNDERX] = ISA_ARMv8_A, [UARCH_THUNDERX2] = ISA_ARMv8_1_A, [UARCH_TAISHAN_V110] = ISA_ARMv8_2_A, + [UARCH_TAISHAN_V120] = ISA_ARMv8_2_A, // Not confirmed [UARCH_TAISHAN_V200] = ISA_ARMv8_2_A, // Not confirmed [UARCH_DENVER] = ISA_ARMv8_A, [UARCH_DENVER2] = ISA_ARMv8_A, @@ -202,8 +203,10 @@ struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu) { CHECK_UARCH(arch, cpu, 'C', 0x0AF, NA, NA, "ThunderX2 99XX", UARCH_THUNDERX2, CPU_VENDOR_CAVIUM) CHECK_UARCH(arch, cpu, 'H', 0xD01, NA, NA, "TaiShan v110", UARCH_TAISHAN_V110, CPU_VENDOR_HUAWEI) // Kunpeng 920 series + CHECK_UARCH(arch, cpu, 'H', 0xD02, 2, 2, "TaiShan v120", UARCH_TAISHAN_V120, CPU_VENDOR_HUAWEI) // Kiring 9000S Big cores (https://github.com/Dr-Noob/cpufetch/issues/259) CHECK_UARCH(arch, cpu, 'H', 0xD02, NA, NA, "TaiShan v200", UARCH_TAISHAN_V200, CPU_VENDOR_HUAWEI) // Kunpeng 930 series (found in openeuler: https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/XQCV7NX2UKRIUWUFKRF4PO3QENCOUFR3) CHECK_UARCH(arch, cpu, 'H', 0xD40, NA, NA, "Cortex-A76", UARCH_CORTEX_A76, CPU_VENDOR_ARM) // Kirin 980 Big/Medium cores -> Cortex-A76 + CHECK_UARCH(arch, cpu, 'H', 0xD42, NA, NA, "TaiShan v120", UARCH_TAISHAN_V120, CPU_VENDOR_HUAWEI) // Kiring 9000S Small Cores (https://github.com/Dr-Noob/cpufetch/issues/259) CHECK_UARCH(arch, cpu, 'N', 0x000, NA, NA, "Denver", UARCH_DENVER, CPU_VENDOR_NVIDIA) CHECK_UARCH(arch, cpu, 'N', 0x003, NA, NA, "Denver2", UARCH_DENVER2, CPU_VENDOR_NVIDIA) @@ -325,6 +328,7 @@ int get_number_of_vpus(struct cpuInfo* cpu) { case UARCH_ICESTORM: // [https://dougallj.github.io/applecpu/icestorm-simd.html] case UARCH_BLIZZARD: // [https://en.wikipedia.org/wiki/Comparison_of_ARM_processors] case UARCH_TAISHAN_V110:// [https://www-file.huawei.com/-/media/corp2020/pdf/publications/huawei-research/2022/huawei-research-issue1-en.pdf]: "128-bit x 2 for single precision" + case UARCH_TAISHAN_V120:// Not confirmed, asssuming same as v110 case UARCH_TAISHAN_V200:// Not confirmed, asssuming same as v110 case UARCH_CORTEX_A57: // [https://www.anandtech.com/show/8718/the-samsung-galaxy-note-4-exynos-review/5] case UARCH_CORTEX_A72: // [https://www.anandtech.com/show/10347/arm-cortex-a73-artemis-unveiled/2] diff --git a/src/arm/uarch.h b/src/arm/uarch.h index ffc681b..c6ce5ea 100644 --- a/src/arm/uarch.h +++ b/src/arm/uarch.h @@ -83,7 +83,9 @@ enum { UARCH_BRAHMA_B15, UARCH_BRAHMA_B53, UARCH_XGENE, // Applied Micro X-Gene. + // HUAWEI UARCH_TAISHAN_V110, // HiSilicon TaiShan v110 + UARCH_TAISHAN_V120, // HiSilicon TaiShan v120 UARCH_TAISHAN_V200, // HiSilicon TaiShan v200 // PHYTIUM UARCH_XIAOMI, // Not to be confused with Xiaomi Inc