From a0c08ccc0b64b524ad2122e0595099f73cbba9c4 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Thu, 10 Oct 2024 08:39:24 +0100 Subject: [PATCH] [v1.06][RISCV] Add support for SpacemiT K1-X SoC (#286) --- src/common/ascii.h | 21 +++++++++++++++++++++ src/common/printer.c | 2 ++ src/common/soc.c | 1 + src/common/soc.h | 1 + src/riscv/soc.c | 9 +++++++++ src/riscv/socs.h | 3 +++ 6 files changed, 37 insertions(+) diff --git a/src/common/ascii.h b/src/common/ascii.h index 94e9cf46..f92ec254 100644 --- a/src/common/ascii.h +++ b/src/common/ascii.h @@ -445,6 +445,26 @@ struct ascii_logo { $C1 ########### ___########### __________ \ $C1.########## |__________| |__________| " +#define ASCII_SPACEMIT \ +"$C1 :#: \ +$C1 :####: \ +$C1 :#######: \ +$C1 :#########: \ +$C1 :#########: \ +$C1 :#######: \ +$C1 :####: \ +$C1 :#: \ +$C1:##: :#: \ +$C1:####: :###: \ +$C1:#######: :####: \ +$C1:##########: :###: \ +$C1:###########: :#: \ +$C1:###########: \ +$C1 :##########: \ +$C1 :#######: \ +$C1 :####: \ +$C1 :##: " + // --------------------- LONG LOGOS ------------------------- // #define ASCII_AMD_L \ "$C1 \ @@ -624,6 +644,7 @@ asciiL logo_ampere = { ASCII_AMPERE, 50, 17, false, {C_FG_RED}, asciiL logo_nxp = { ASCII_NXP, 55, 8, false, {C_FG_YELLOW, C_FG_CYAN, C_FG_GREEN}, {C_FG_CYAN, C_FG_WHITE} }; asciiL logo_amlogic = { ASCII_AMLOGIC, 58, 8, false, {C_FG_BLUE}, {C_FG_BLUE, C_FG_B_WHITE} }; asciiL logo_marvell = { ASCII_MARVELL, 56, 10, false, {C_FG_B_BLACK}, {C_FG_B_BLACK, C_FG_B_WHITE} }; +asciiL logo_spacemit = { ASCII_SPACEMIT, 27, 18, false, {C_FG_B_GREEN}, {C_FG_B_GREEN, C_FG_B_WHITE} }; // Long variants | ----------------------------------------------------------------------------------------------------------------| asciiL logo_amd_l = { ASCII_AMD_L, 62, 19, true, {C_BG_WHITE, C_BG_GREEN}, {C_FG_WHITE, C_FG_GREEN} }; diff --git a/src/common/printer.c b/src/common/printer.c index e28a2579..11cefcf1 100644 --- a/src/common/printer.c +++ b/src/common/printer.c @@ -412,6 +412,8 @@ void choose_ascii_art(struct ascii* art, struct color** cs, struct terminal* ter art->art = &logo_allwinner; else if(art->vendor == SOC_VENDOR_SIPEED) art->art = &logo_sipeed; + else if(art->vendor == SOC_VENDOR_SPACEMIT) + art->art = &logo_spacemit; else art->art = &logo_riscv; #endif diff --git a/src/common/soc.c b/src/common/soc.c index a6984e39..6e7631f8 100644 --- a/src/common/soc.c +++ b/src/common/soc.c @@ -29,6 +29,7 @@ static char* soc_trademark_string[] = { [SOC_VENDOR_SIFIVE] = "SiFive ", [SOC_VENDOR_STARFIVE] = "StarFive ", [SOC_VENDOR_SIPEED] = "Sipeed ", + [SOC_VENDOR_SPACEMIT] = "SpacemiT ", // ARM & RISC-V [SOC_VENDOR_ALLWINNER] = "Allwinner " }; diff --git a/src/common/soc.h b/src/common/soc.h index 921a7f71..36d590e2 100644 --- a/src/common/soc.h +++ b/src/common/soc.h @@ -33,6 +33,7 @@ enum { SOC_VENDOR_SIFIVE, SOC_VENDOR_STARFIVE, SOC_VENDOR_SIPEED, + SOC_VENDOR_SPACEMIT, // ARM & RISC-V SOC_VENDOR_ALLWINNER }; diff --git a/src/riscv/soc.c b/src/riscv/soc.c index aad7a473..ff48881a 100644 --- a/src/riscv/soc.c +++ b/src/riscv/soc.c @@ -38,6 +38,12 @@ bool match_sipeed(char* soc_name, struct system_on_chip* soc) { SOC_END } +bool match_spacemit(char* soc_name, struct system_on_chip* soc) { + SOC_START + SOC_EQ(soc_name, "k1-x", "K1-X", SOC_SPACEMIT_K1X, soc, 22) // https://github.com/Dr-Noob/cpufetch/issues/286 https://www.spacemit.com/en/spacemit-x60-core/ + SOC_END +} + struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) { char* raw_name = soc->raw_name; @@ -50,6 +56,9 @@ struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) { if(match_sifive(raw_name, soc)) return soc; + if(match_spacemit(raw_name, soc)) + return soc; + match_sipeed(raw_name, soc); return soc; } diff --git a/src/riscv/socs.h b/src/riscv/socs.h index a6bc2e11..a0fe2f00 100644 --- a/src/riscv/socs.h +++ b/src/riscv/socs.h @@ -13,6 +13,8 @@ enum { SOC_ALLWINNER_D1H, // SIPEED SOC_SIPEED_LICHEEPI4A, + // SPACEMIT + SOC_SPACEMIT_K1X, // UNKNOWN SOC_MODEL_UNKNOWN }; @@ -22,6 +24,7 @@ inline static VENDOR get_soc_vendor_from_soc(SOC soc) { if(soc >= SOC_STARFIVE_VF2 && soc <= SOC_STARFIVE_VF2) return SOC_VENDOR_STARFIVE; if(soc >= SOC_ALLWINNER_D1H && soc <= SOC_ALLWINNER_D1H) return SOC_VENDOR_ALLWINNER; if(soc >= SOC_SIPEED_LICHEEPI4A && soc <= SOC_SIPEED_LICHEEPI4A) return SOC_VENDOR_SIPEED; + if(soc >= SOC_SPACEMIT_K1X && soc <= SOC_SPACEMIT_K1X) return SOC_VENDOR_SPACEMIT; return SOC_VENDOR_UNKNOWN; }