From e4227388b9149005961cd691649ac90bf3aaf769 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Fri, 19 Jul 2024 08:21:11 +0100 Subject: [PATCH] [v1.05][ARM] Add new SnapD SoCs and use ro.soc.mode in Android to improve SoC detection (#253) --- src/arm/soc.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/arm/socs.h | 8 +++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/arm/soc.c b/src/arm/soc.c index bca4f4c..0b3c83d 100644 --- a/src/arm/soc.c +++ b/src/arm/soc.c @@ -578,6 +578,14 @@ bool match_qualcomm(char* soc_name, struct system_on_chip* soc) { SOC_EQ(tmp, "SM8250-AB", "865+", SOC_SNAPD_SM8250_AB, soc, 7) SOC_EQ(tmp, "SM8350", "888", SOC_SNAPD_SM8350, soc, 5) SOC_EQ(tmp, "SM8350-AC", "888+", SOC_SNAPD_SM8350, soc, 5) + // Snapdragon Gen // + SOC_EQ(tmp, "SM4450", "4 Gen 2", SOC_SNAPD_SM4450, soc, 4) + SOC_EQ(tmp, "SM6450", "6 Gen 1", SOC_SNAPD_SM6450, soc, 4) + SOC_EQ(tmp, "SM7435-AB", "7s Gen 2", SOC_SNAPD_SM7435_AB, soc, 4) + SOC_EQ(tmp, "SM7450", "7 Gen 1", SOC_SNAPD_SM7450, soc, 4) + SOC_EQ(tmp, "SM7475", "7+ Gen 2", SOC_SNAPD_SM7475, soc, 4) + SOC_EQ(tmp, "SM8450", "8 Gen 1", SOC_SNAPD_SM8450, soc, 4) + SOC_EQ(tmp, "SM8475", "8+ Gen 1", SOC_SNAPD_SM8475, soc, 4) SOC_END } @@ -624,12 +632,37 @@ bool match_special(char* soc_name, struct system_on_chip* soc) { return true; } - // Snapdragon 8 Gen 1 reported as "taro" + // New Snapdragon SoCs codenames + // https://github.com/sm8450-mainline/fdt?tab=readme-ov-file#chipsets + // https://github.com/Dr-Noob/cpufetch/issues/253 + if (strcmp(soc_name, "cape") == 0) { + fill_soc(soc, "8+ Gen 1", SOC_SNAPD_SM8475, 4); + return true; + } + if(strcmp(soc_name, "taro") == 0) { fill_soc(soc, "8 Gen 1", SOC_SNAPD_SM8450, 4); return true; } + if(strcmp(soc_name, "ukee") == 0) { + fill_soc(soc, "7+ Gen 2", SOC_SNAPD_SM7475, 4); + return true; + } + + if(strcmp(soc_name, "diwali") == 0) { + fill_soc(soc, "7 Gen 1", SOC_SNAPD_SM7450, 4); + return true; + } + + // parrot can be either SM7435 or SM6450, we need more data + // to distingish between those two + + if(strcmp(soc_name, "ravelin") == 0) { + fill_soc(soc, "4 Gen 2", SOC_SNAPD_SM4450, 4); + return true; + } + // Google Pixel 6 // https://github.com/Dr-Noob/cpufetch/issues/134 if(strcmp(soc_name, "oriole") == 0) { @@ -702,6 +735,16 @@ struct system_on_chip* guess_soc_from_android(struct system_on_chip* soc) { else return soc; } + // https://github.com/Dr-Noob/cpufetch/issues/253 + // ro.soc.model might be more reliable than ro.product.board or + // ro.board.platform, so try with it first + property_len = android_property_get("ro.soc.model", (char *) &tmp); + if(property_len > 0) { + try_parse_soc_from_string(soc, property_len, tmp); + if(soc->soc_vendor == SOC_VENDOR_UNKNOWN) printWarn("SoC detection failed using Android property ro.soc.model: %s", tmp); + else return soc; + } + property_len = android_property_get("ro.product.board", (char *) &tmp); if(property_len > 0) { try_parse_soc_from_string(soc, property_len, tmp); diff --git a/src/arm/socs.h b/src/arm/socs.h index d5a3167..dd6ef65 100644 --- a/src/arm/socs.h +++ b/src/arm/socs.h @@ -270,11 +270,13 @@ enum { SOC_SNAPD_SDM660, SOC_SNAPD_SM6115, SOC_SNAPD_SM6125, + SOC_SNAPD_SM6450, SOC_SNAPD_SDM670, SOC_SNAPD_SM6150, SOC_SNAPD_SM6350, SOC_SNAPD_SDM710, SOC_SNAPD_SDM712, + SOC_SNAPD_SM4450, SOC_SNAPD_SM7125, SOC_SNAPD_SM7150_AA, SOC_SNAPD_SM7150_AB, @@ -283,6 +285,9 @@ enum { SOC_SNAPD_SM7250_AA, SOC_SNAPD_SM7250_AB, SOC_SNAPD_SM7250_AC, + SOC_SNAPD_SM7435_AB, + SOC_SNAPD_SM7450, + SOC_SNAPD_SM7475, SOC_SNAPD_MSM8974AA, SOC_SNAPD_MSM8974AB, SOC_SNAPD_MSM8974AC, @@ -303,6 +308,7 @@ enum { SOC_SNAPD_SM8250_AB, SOC_SNAPD_SM8350, SOC_SNAPD_SM8450, + SOC_SNAPD_SM8475, // APPLE SOC_APPLE_M1, SOC_APPLE_M1_PRO, @@ -375,7 +381,7 @@ inline static VENDOR get_soc_vendor_from_soc(SOC soc) { 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; - else if(soc >= SOC_SNAPD_QSD8650 && soc <= SOC_SNAPD_SM8450) return SOC_VENDOR_SNAPDRAGON; + else if(soc >= SOC_SNAPD_QSD8650 && soc <= SOC_SNAPD_SM8475) return SOC_VENDOR_SNAPDRAGON; else if(soc >= SOC_APPLE_M1 && soc <= SOC_APPLE_M3_MAX) return SOC_VENDOR_APPLE; else if(soc >= SOC_ALLWINNER_A10 && soc <= SOC_ALLWINNER_R328) return SOC_VENDOR_ALLWINNER; else if(soc >= SOC_ROCKCHIP_3288 && soc <= SOC_ROCKCHIP_3588) return SOC_VENDOR_ROCKCHIP;