[v1.03][RISCV] Add basic StarFive support

This commit is contained in:
Dr-Noob
2023-04-03 14:08:58 +02:00
parent a496f694a6
commit 30a2493ad9
5 changed files with 47 additions and 3 deletions

View File

@@ -287,6 +287,31 @@ $C1 ###### ###### \
$C1 ########### \ $C1 ########### \
$C1 ### " $C1 ### "
#define ASCII_STARFIVE \
"$C1 ####### \
$C1 ################. \
$C1 ############ ########### \
$C1 ############ ##########. \
$C1 ############ # ###### \
$C1 ########### ##### ## \
$C1 #######. ########## \
$C1 ###### ### *########### \
$C1 ###### #######. ########## \
$C1 ######### ############ ###### \
$C1 ###########. ###########* # \
$C1 ############ ############ \
$C1 # ############. .########### \
$C1 ###### ########### ######### \
$C1 ########## .######, ##### \
$C1 ############ ##. #####. \
$C1 ######### ######## \
$C1 ## ##### ##########. \
$C1 ####### # ############ \
$C1 ########### ###########. \
$C1 ###########. ############ \
$C1 ################ \
$C1 ####### "
// --------------------- LONG LOGOS ------------------------- // // --------------------- LONG LOGOS ------------------------- //
#define ASCII_AMD_L \ #define ASCII_AMD_L \
"$C1 \ "$C1 \
@@ -390,7 +415,8 @@ asciiL logo_apple = { ASCII_APPLE, 32, 17, false, {C_FG_WHITE},
asciiL logo_allwinner = { ASCII_ALLWINNER, 47, 16, false, {C_FG_CYAN}, {C_FG_B_BLACK, C_FG_B_CYAN } }; asciiL logo_allwinner = { ASCII_ALLWINNER, 47, 16, false, {C_FG_CYAN}, {C_FG_B_BLACK, C_FG_B_CYAN } };
asciiL logo_rockchip = { ASCII_ROCKCHIP, 58, 8, false, {C_FG_CYAN, C_FG_YELLOW}, {C_FG_CYAN, C_FG_YELLOW} }; asciiL logo_rockchip = { ASCII_ROCKCHIP, 58, 8, false, {C_FG_CYAN, C_FG_YELLOW}, {C_FG_CYAN, C_FG_YELLOW} };
asciiL logo_riscv = { ASCII_RISCV, 63, 18, false, {C_FG_CYAN, C_FG_YELLOW}, {C_FG_CYAN, C_FG_YELLOW} }; asciiL logo_riscv = { ASCII_RISCV, 63, 18, false, {C_FG_CYAN, C_FG_YELLOW}, {C_FG_CYAN, C_FG_YELLOW} };
asciiL logo_sifive = { ASCII_SIFIVE, 51, 19, false, {C_FG_WHITE}, {C_FG_WHITE, C_FG_B_CYAN} }; asciiL logo_sifive = { ASCII_SIFIVE, 51, 19, false, {C_FG_WHITE}, {C_FG_WHITE, C_FG_CYAN} };
asciiL logo_starfive = { ASCII_STARFIVE, 50, 24, false, {C_FG_WHITE}, {C_FG_WHITE, C_FG_BLUE} };
// Long variants | ----------------------------------------------------------------------------------------------------| // Long variants | ----------------------------------------------------------------------------------------------------|
asciiL logo_amd_l = { ASCII_AMD_L, 62, 19, true, {C_BG_WHITE, C_BG_GREEN}, {C_FG_WHITE, C_FG_GREEN} }; asciiL logo_amd_l = { ASCII_AMD_L, 62, 19, true, {C_BG_WHITE, C_BG_GREEN}, {C_FG_WHITE, C_FG_GREEN} };

View File

@@ -371,6 +371,8 @@ void choose_ascii_art(struct ascii* art, struct color** cs, struct terminal* ter
#elif ARCH_RISCV #elif ARCH_RISCV
if(art->vendor == SOC_VENDOR_SIFIVE) if(art->vendor == SOC_VENDOR_SIFIVE)
art->art = &logo_sifive; art->art = &logo_sifive;
else if(art->vendor == SOC_VENDOR_STARFIVE)
art->art = &logo_starfive;
else else
art->art = &logo_riscv; art->art = &logo_riscv;
#endif #endif

View File

@@ -31,7 +31,8 @@ char* get_soc_name(struct system_on_chip* soc) {
} }
static char* soc_trademark_string[] = { static char* soc_trademark_string[] = {
[SOC_VENDOR_SIFIVE] = "SiFive " [SOC_VENDOR_SIFIVE] = "SiFive ",
[SOC_VENDOR_STARFIVE] = "StarFive "
}; };
void fill_soc(struct system_on_chip* soc, char* soc_name, SOC soc_model, int32_t process) { void fill_soc(struct system_on_chip* soc, char* soc_name, SOC soc_model, int32_t process) {
@@ -77,8 +78,19 @@ bool match_sifive(char* soc_name, struct system_on_chip* soc) {
SOC_END SOC_END
} }
bool match_starfive(char* soc_name, struct system_on_chip* soc) {
SOC_START
SOC_EQ(soc_name, "jh7110#", "VisionFive 2", SOC_STARFIVE_VF2, soc, 28) // https://blog.bitsofnetworks.org/benchmarking-risc-v-visionfive-2-vs-the-world.html
SOC_EQ(soc_name, "jh7110", "VisionFive 2", SOC_STARFIVE_VF2, soc, 28)
SOC_END
}
struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) { struct system_on_chip* parse_soc_from_string(struct system_on_chip* soc) {
char* raw_name = soc->raw_name; char* raw_name = soc->raw_name;
if(match_starfive(raw_name, soc))
return soc;
match_sifive(raw_name, soc); match_sifive(raw_name, soc);
return soc; return soc;
} }

View File

@@ -8,7 +8,8 @@ typedef int32_t SOC;
enum { enum {
SOC_VENDOR_UNKNOWN, SOC_VENDOR_UNKNOWN,
SOC_VENDOR_SIFIVE SOC_VENDOR_SIFIVE,
SOC_VENDOR_STARFIVE
}; };
struct system_on_chip { struct system_on_chip {

View File

@@ -7,12 +7,15 @@
enum { enum {
// SIFIVE // SIFIVE
SOC_SIFIVE_U740, SOC_SIFIVE_U740,
// STARFIVE
SOC_STARFIVE_VF2,
// UNKNOWN // UNKNOWN
SOC_MODEL_UNKNOWN SOC_MODEL_UNKNOWN
}; };
inline static VENDOR get_soc_vendor_from_soc(SOC soc) { 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_SIFIVE_U740 && soc <= SOC_SIFIVE_U740) return SOC_VENDOR_SIFIVE;
if(soc >= SOC_STARFIVE_VF2 && soc <= SOC_STARFIVE_VF2) return SOC_VENDOR_STARFIVE;
return SOC_VENDOR_UNKNOWN; return SOC_VENDOR_UNKNOWN;
} }