From a43b70054081d074ccd6f692aadfb46406fa6f22 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Wed, 1 Nov 2023 20:48:25 +0000 Subject: [PATCH] [v1.04][RISCV] Add Lichee PI 4a SoC (#200) --- src/common/soc.c | 1 + src/common/soc.h | 1 + src/riscv/soc.c | 11 ++++++++++- src/riscv/socs.h | 3 +++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/common/soc.c b/src/common/soc.c index 51f80cf..1785a96 100644 --- a/src/common/soc.c +++ b/src/common/soc.c @@ -22,6 +22,7 @@ static char* soc_trademark_string[] = { // RISC-V [SOC_VENDOR_SIFIVE] = "SiFive ", [SOC_VENDOR_STARFIVE] = "StarFive ", + [SOC_VENDOR_SIPEED] = "Sipeed ", // ARM & RISC-V [SOC_VENDOR_ALLWINNER] = "Allwinner " }; diff --git a/src/common/soc.h b/src/common/soc.h index 44f7684..31451c8 100644 --- a/src/common/soc.h +++ b/src/common/soc.h @@ -26,6 +26,7 @@ enum { // RISC-V SOC_VENDOR_SIFIVE, SOC_VENDOR_STARFIVE, + SOC_VENDOR_SIPEED, // ARM & RISC-V SOC_VENDOR_ALLWINNER }; diff --git a/src/riscv/soc.c b/src/riscv/soc.c index fdce84a..d59ad2a 100644 --- a/src/riscv/soc.c +++ b/src/riscv/soc.c @@ -32,6 +32,12 @@ bool match_allwinner(char* soc_name, struct system_on_chip* soc) { SOC_END } +bool match_sipeed(char* soc_name, struct system_on_chip* soc) { + SOC_START + SOC_EQ(soc_name, "light", "Lichee Pi 4A", SOC_SIPEED_LICHEEPI4A, soc, 12) // https://github.com/Dr-Noob/cpufetch/issues/200, https://sipeed.com/licheepi4a + SOC_END +} + struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) { char* raw_name = soc->raw_name; @@ -41,7 +47,10 @@ struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) { if(match_allwinner(raw_name, soc)) return soc; - match_sifive(raw_name, soc); + if(match_sifive(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 0833c77..a6bc2e1 100644 --- a/src/riscv/socs.h +++ b/src/riscv/socs.h @@ -11,6 +11,8 @@ enum { SOC_STARFIVE_VF2, // ALLWINNER SOC_ALLWINNER_D1H, + // SIPEED + SOC_SIPEED_LICHEEPI4A, // UNKNOWN SOC_MODEL_UNKNOWN }; @@ -19,6 +21,7 @@ inline static VENDOR get_soc_vendor_from_soc(SOC soc) { if(soc >= SOC_SIFIVE_U740 && soc <= SOC_SIFIVE_U740) return SOC_VENDOR_SIFIVE; 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; return SOC_VENDOR_UNKNOWN; }