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