From 0ef08ef53e6ac68f57797d51ac314249cdd202d4 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Fri, 7 Apr 2023 10:37:02 +0200 Subject: [PATCH] [v1.03][RISCV] Add basic Allwinner support --- src/common/printer.c | 2 ++ src/riscv/soc.c | 12 +++++++++++- src/riscv/soc.h | 3 ++- src/riscv/socs.h | 3 +++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/common/printer.c b/src/common/printer.c index e9a1d96..686201c 100644 --- a/src/common/printer.c +++ b/src/common/printer.c @@ -373,6 +373,8 @@ void choose_ascii_art(struct ascii* art, struct color** cs, struct terminal* ter art->art = &logo_sifive; else if(art->vendor == SOC_VENDOR_STARFIVE) art->art = &logo_starfive; + else if(art->vendor == SOC_VENDOR_ALLWINNER) + art->art = &logo_allwinner; else art->art = &logo_riscv; #endif diff --git a/src/riscv/soc.c b/src/riscv/soc.c index 469e2fd..6f3c7c9 100644 --- a/src/riscv/soc.c +++ b/src/riscv/soc.c @@ -32,7 +32,8 @@ char* get_soc_name(struct system_on_chip* soc) { static char* soc_trademark_string[] = { [SOC_VENDOR_SIFIVE] = "SiFive ", - [SOC_VENDOR_STARFIVE] = "StarFive " + [SOC_VENDOR_STARFIVE] = "StarFive ", + [SOC_VENDOR_ALLWINNER] = "Allwinner " }; void fill_soc(struct system_on_chip* soc, char* soc_name, SOC soc_model, int32_t process) { @@ -85,12 +86,21 @@ bool match_starfive(char* soc_name, struct system_on_chip* soc) { SOC_END } +bool match_allwinner(char* soc_name, struct system_on_chip* soc) { + SOC_START + SOC_EQ(soc_name, "sun20i-d1", "D1-H", SOC_ALLWINNER_D1H, soc, 22) + SOC_END +} + struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) { char* raw_name = soc->raw_name; if(match_starfive(raw_name, soc)) return soc; + if(match_allwinner(raw_name, soc)) + return soc; + match_sifive(raw_name, soc); return soc; } diff --git a/src/riscv/soc.h b/src/riscv/soc.h index 007d370..b6ba2dd 100644 --- a/src/riscv/soc.h +++ b/src/riscv/soc.h @@ -9,7 +9,8 @@ typedef int32_t SOC; enum { SOC_VENDOR_UNKNOWN, SOC_VENDOR_SIFIVE, - SOC_VENDOR_STARFIVE + SOC_VENDOR_STARFIVE, + SOC_VENDOR_ALLWINNER }; struct system_on_chip { diff --git a/src/riscv/socs.h b/src/riscv/socs.h index 56cff72..0833c77 100644 --- a/src/riscv/socs.h +++ b/src/riscv/socs.h @@ -9,6 +9,8 @@ enum { SOC_SIFIVE_U740, // STARFIVE SOC_STARFIVE_VF2, + // ALLWINNER + SOC_ALLWINNER_D1H, // UNKNOWN SOC_MODEL_UNKNOWN }; @@ -16,6 +18,7 @@ enum { 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; return SOC_VENDOR_UNKNOWN; }