1*2b54f0dbSXin Li #include <gtest/gtest.h>
2*2b54f0dbSXin Li
3*2b54f0dbSXin Li #include <stdint.h>
4*2b54f0dbSXin Li #include <string.h>
5*2b54f0dbSXin Li
6*2b54f0dbSXin Li #include <string>
7*2b54f0dbSXin Li
8*2b54f0dbSXin Li #define CPUINFO_HARDWARE_VALUE_MAX 64
9*2b54f0dbSXin Li #define CPUINFO_BUILD_PROP_VALUE_MAX 92
10*2b54f0dbSXin Li #define CPUINFO_ARM_CHIPSET_NAME_MAX 48
11*2b54f0dbSXin Li
12*2b54f0dbSXin Li extern "C" void cpuinfo_arm_android_parse_chipset_properties(
13*2b54f0dbSXin Li const char proc_cpuinfo_hardware[CPUINFO_HARDWARE_VALUE_MAX],
14*2b54f0dbSXin Li const char ro_product_board[CPUINFO_BUILD_PROP_VALUE_MAX],
15*2b54f0dbSXin Li const char ro_board_platform[CPUINFO_BUILD_PROP_VALUE_MAX],
16*2b54f0dbSXin Li const char ro_mediatek_platform[CPUINFO_BUILD_PROP_VALUE_MAX],
17*2b54f0dbSXin Li const char ro_arch[CPUINFO_HARDWARE_VALUE_MAX],
18*2b54f0dbSXin Li const char ro_chipname[CPUINFO_BUILD_PROP_VALUE_MAX],
19*2b54f0dbSXin Li uint32_t cores,
20*2b54f0dbSXin Li uint32_t max_cpu_freq_max,
21*2b54f0dbSXin Li char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX]);
22*2b54f0dbSXin Li
parse_chipset(std::string hardware,std::string product_board,std::string board_platform,std::string mediatek_platform,std::string arch,std::string chipname,uint32_t cores=1,uint32_t max_cpu_freq_max=0)23*2b54f0dbSXin Li inline std::string parse_chipset(
24*2b54f0dbSXin Li std::string hardware,
25*2b54f0dbSXin Li std::string product_board,
26*2b54f0dbSXin Li std::string board_platform,
27*2b54f0dbSXin Li std::string mediatek_platform,
28*2b54f0dbSXin Li std::string arch,
29*2b54f0dbSXin Li std::string chipname,
30*2b54f0dbSXin Li uint32_t cores=1,
31*2b54f0dbSXin Li uint32_t max_cpu_freq_max=0)
32*2b54f0dbSXin Li {
33*2b54f0dbSXin Li char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX];
34*2b54f0dbSXin Li cpuinfo_arm_android_parse_chipset_properties(
35*2b54f0dbSXin Li hardware.c_str(), product_board.c_str(), board_platform.c_str(), mediatek_platform.c_str(), arch.c_str(), chipname.c_str(),
36*2b54f0dbSXin Li cores, max_cpu_freq_max, chipset_name);
37*2b54f0dbSXin Li return std::string(chipset_name, strnlen(chipset_name, CPUINFO_ARM_CHIPSET_NAME_MAX));
38*2b54f0dbSXin Li }
39*2b54f0dbSXin Li
TEST(ANDROID_PROPERTIES,disambiguate_chipset)40*2b54f0dbSXin Li TEST(ANDROID_PROPERTIES, disambiguate_chipset) {
41*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
42*2b54f0dbSXin Li EXPECT_EQ("Amlogic S812",
43*2b54f0dbSXin Li parse_chipset("Amlogic Meson8", "n200C", "meson8", "", "", ""));
44*2b54f0dbSXin Li EXPECT_EQ("HiSilicon Kirin 925",
45*2b54f0dbSXin Li parse_chipset("Kirin925", "MT7-L09", "hi3630", "", "", ""));
46*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
47*2b54f0dbSXin Li EXPECT_EQ("HiSilicon Kirin 955",
48*2b54f0dbSXin Li parse_chipset("Hisilicon Kirin 955", "EVA-L09", "hi3650", "", "", ""));
49*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
50*2b54f0dbSXin Li EXPECT_EQ("Marvell PXA986",
51*2b54f0dbSXin Li parse_chipset("PXA988", "PXA986", "mrvl", "", "", ""));
52*2b54f0dbSXin Li EXPECT_EQ("Marvell PXA986",
53*2b54f0dbSXin Li parse_chipset("PXA988", "PXA986", "mrvl", "", "", "PXA986"));
54*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
55*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6735P",
56*2b54f0dbSXin Li parse_chipset("MT6735P", "MT6735P", "mt6735m", "MT6735", "", ""));
57*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT8382",
58*2b54f0dbSXin Li parse_chipset("MT8382", "MT8382", "", "MT6582", "", ""));
59*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6735P",
60*2b54f0dbSXin Li parse_chipset("MT6735P", "unknown", "mt6735m", "MT6735", "", ""));
61*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT8382",
62*2b54f0dbSXin Li parse_chipset("MT8382", "LenovoTAB2A7-30HC", "", "MT6582", "", ""));
63*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8926",
64*2b54f0dbSXin Li parse_chipset("Qualcomm MSM 8226 (Flattened Device Tree)", "MSM8226", "msm8226", "", "", "MSM8926"));
65*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8926",
66*2b54f0dbSXin Li parse_chipset("Qualcomm MSM8926", "draconis", "msm8226", "", "", ""));
67*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8930AB",
68*2b54f0dbSXin Li parse_chipset("SAMSUNG SERRANO", "MSM8960", "msm8960", "", "", "MSM8930AB", 2));
69*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8940",
70*2b54f0dbSXin Li parse_chipset("Qualcomm Technologies, Inc MSM8940", "msm8937_32", "msm8937", "", "", "", 8));
71*2b54f0dbSXin Li EXPECT_EQ("Spreadtrum SC6815AS",
72*2b54f0dbSXin Li parse_chipset("scx15", "SC6815AS", "scx15", "", "", "SC6815AS"));
73*2b54f0dbSXin Li EXPECT_EQ("Spreadtrum SC7727S",
74*2b54f0dbSXin Li parse_chipset("sc8830", "SC7727S", "sc8830", "", "", "SC7727S"));
75*2b54f0dbSXin Li EXPECT_EQ("Spreadtrum SC7731",
76*2b54f0dbSXin Li parse_chipset("sc7731", "SC7731", "sc8830", "", "", ""));
77*2b54f0dbSXin Li EXPECT_EQ("Spreadtrum SC7731C",
78*2b54f0dbSXin Li parse_chipset("sc7731c", "sp7731cea", "sc8830", "", "", ""));
79*2b54f0dbSXin Li }
80*2b54f0dbSXin Li
TEST(ANDROID_PROPERTIES,ambiguous_vendors)81*2b54f0dbSXin Li TEST(ANDROID_PROPERTIES, ambiguous_vendors) {
82*2b54f0dbSXin Li EXPECT_EQ("",
83*2b54f0dbSXin Li parse_chipset("MTK6580", "sp7731ceb", "sc8830", "", "", ""));
84*2b54f0dbSXin Li EXPECT_EQ("",
85*2b54f0dbSXin Li parse_chipset("", "universal5410", "msm8974", "", "", ""));
86*2b54f0dbSXin Li EXPECT_EQ("",
87*2b54f0dbSXin Li parse_chipset("MT6580", "universal8895", "mt6580", "MT6580", "", ""));
88*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
89*2b54f0dbSXin Li EXPECT_EQ("",
90*2b54f0dbSXin Li parse_chipset("", "smdk4x12", "msm8974", "", "", "", 2));
91*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
92*2b54f0dbSXin Li }
93*2b54f0dbSXin Li
TEST(ANDROID_PROPERTIES,unambiguous_chipset)94*2b54f0dbSXin Li TEST(ANDROID_PROPERTIES, unambiguous_chipset) {
95*2b54f0dbSXin Li EXPECT_EQ("Samsung Exynos 3470",
96*2b54f0dbSXin Li parse_chipset("UNIVERSAL_GARDA", "universal_garda", "exynos3", "", "exynos3470", "exynos3470"));
97*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6582",
98*2b54f0dbSXin Li parse_chipset("APPLE A8", "APPLE A8", "", "MT6582", "", ""));
99*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
100*2b54f0dbSXin Li EXPECT_EQ("NovaThor U8500",
101*2b54f0dbSXin Li parse_chipset("SAMSUNG GOLDEN", "DB8520H", "montblanc", "", "", ""));
102*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
103*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6580",
104*2b54f0dbSXin Li parse_chipset("Qualcomm", "unknown", "mt6580", "MT6580", "", ""));
105*2b54f0dbSXin Li EXPECT_EQ("HiSilicon Kirin 650",
106*2b54f0dbSXin Li parse_chipset("", "hi6250", "", "", "", ""));
107*2b54f0dbSXin Li EXPECT_EQ("Samsung Exynos 8890",
108*2b54f0dbSXin Li parse_chipset("", "universal8890", "exynos5", "", "exynos8890", "exynos8890"));
109*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6582",
110*2b54f0dbSXin Li parse_chipset("", "MT6582", "", "MT6582", "", ""));
111*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8994",
112*2b54f0dbSXin Li parse_chipset("", "msm8994", "msm8994", "", "", ""));
113*2b54f0dbSXin Li EXPECT_EQ("Qualcomm APQ8064",
114*2b54f0dbSXin Li parse_chipset("SAMSUNG JF", "MSM8960", "msm8960", "", "", "apq8064", 4));
115*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6795",
116*2b54f0dbSXin Li parse_chipset("", "mt6795", "mt6795", "MT6795", "", ""));
117*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
118*2b54f0dbSXin Li EXPECT_EQ("Marvell PXA1908",
119*2b54f0dbSXin Li parse_chipset("PXA1908", "PXA19xx", "mrvl", "", "", "PXA19xx"));
120*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
121*2b54f0dbSXin Li EXPECT_EQ("Spreadtrum SC7715A",
122*2b54f0dbSXin Li parse_chipset("scx15", "SM-G928G", "scx15", "", "", "SC7715A"));
123*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6592",
124*2b54f0dbSXin Li parse_chipset("MT6592", "lcsh92_cwet_htc_kk", "", "MT6592", "", ""));
125*2b54f0dbSXin Li EXPECT_EQ("HiSilicon Kirin 620",
126*2b54f0dbSXin Li parse_chipset("hi6210sft", "BalongV8R1SFT", "hi6210sft", "", "", ""));
127*2b54f0dbSXin Li EXPECT_EQ("Qualcomm APQ8064",
128*2b54f0dbSXin Li parse_chipset("PANTECH APQ8064 EF52L", "VEGA", "msm8960", "", "", "apq8064", 4));
129*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6580M",
130*2b54f0dbSXin Li parse_chipset("MT6580M", "unknown", "mt6580", "MT6580", "", ""));
131*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
132*2b54f0dbSXin Li EXPECT_EQ("Samsung Exynos 4412",
133*2b54f0dbSXin Li parse_chipset("SMDK4x12", "smdk4x12", "exynos4", "", "", "smdk4x12", 4));
134*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
135*2b54f0dbSXin Li EXPECT_EQ("Samsung Exynos 7420",
136*2b54f0dbSXin Li parse_chipset("SAMSUNG Exynos7420", "universal7420", "exynos5", "", "exynos7420", "exynos7420"));
137*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6582",
138*2b54f0dbSXin Li parse_chipset("MT6582", "MT6582", "", "MT6582", "", ""));
139*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8916",
140*2b54f0dbSXin Li parse_chipset("Qualcomm Technologies, Inc MSM8916", "msm8916", "msm8916", "", "", "", 4));
141*2b54f0dbSXin Li EXPECT_EQ("Qualcomm MSM8916",
142*2b54f0dbSXin Li parse_chipset("Qualcomm Technologies, Inc MSM8916", "MSM8916", "msm8916", "", "", "MSM8916", 4));
143*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6735",
144*2b54f0dbSXin Li parse_chipset("MT6735", "mt6735", "mt6735", "MT6735", "", ""));
145*2b54f0dbSXin Li EXPECT_EQ("MediaTek MT6737T",
146*2b54f0dbSXin Li parse_chipset("Samsung GrandPrimePlus LTE CIS rev04 board based on MT6737T", "MT6737T", "mt6737t", "MT6737T", "", "MT6737T"));
147*2b54f0dbSXin Li }
148