diff options
author | Marat Dukhan <marat@fb.com> | 2018-03-08 12:47:27 -0800 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2018-03-08 12:47:27 -0800 |
commit | e5d60492ef11676cbd61bd2cc34687d77cfcaf1d (patch) | |
tree | b704e576267271ceef02c1c2edf66934281c1bfd | |
parent | c9453c52564a7f34a2185949cbd2d774e228f96c (diff) | |
download | cpuinfo-e5d60492ef11676cbd61bd2cc34687d77cfcaf1d.tar.gz |
Use ro.arch to identify Samsung Exynos in hard cases
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | jni/Android.mk | 1 | ||||
-rw-r--r-- | src/arm/android/api.h | 1 | ||||
-rw-r--r-- | src/arm/android/properties.c | 4 | ||||
-rw-r--r-- | src/arm/linux/api.h | 3 | ||||
-rw-r--r-- | src/arm/linux/chipset.c | 38 | ||||
-rw-r--r-- | test/name/android-properties-interface.c | 15 | ||||
-rw-r--r-- | test/name/android-properties.cc | 92 | ||||
-rw-r--r-- | test/name/ro-arch.cc | 67 |
9 files changed, 174 insertions, 48 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index bdc8da1..122e278 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -648,6 +648,7 @@ IF(CPUINFO_BUILD_UNIT_TESTS) test/name/ro-product-board.cc test/name/ro-board-platform.cc test/name/ro-mediatek-platform.cc + test/name/ro-arch.cc test/name/ro-chipname.cc test/name/android-properties.cc) CPUINFO_TARGET_ENABLE_CXX11(chipset-test) diff --git a/jni/Android.mk b/jni/Android.mk index d1905cc..e6af6e1 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -458,6 +458,7 @@ LOCAL_SRC_FILES := \ $(LOCAL_PATH)/test/name/ro-product-board.cc \ $(LOCAL_PATH)/test/name/ro-board-platform.cc \ $(LOCAL_PATH)/test/name/ro-mediatek-platform.cc \ + $(LOCAL_PATH)/test/name/ro-arch.cc \ $(LOCAL_PATH)/test/name/ro-chipname.cc \ $(LOCAL_PATH)/test/name/android-properties.cc LOCAL_C_INCLUDES := $(LOCAL_PATH)/src diff --git a/src/arm/android/api.h b/src/arm/android/api.h index 810fe5e..24b3aae 100644 --- a/src/arm/android/api.h +++ b/src/arm/android/api.h @@ -9,6 +9,7 @@ enum cpuinfo_android_chipset_property { cpuinfo_android_chipset_property_ro_product_board, cpuinfo_android_chipset_property_ro_board_platform, cpuinfo_android_chipset_property_ro_mediatek_platform, + cpuinfo_android_chipset_property_ro_arch, cpuinfo_android_chipset_property_ro_chipname, cpuinfo_android_chipset_property_max, }; diff --git a/src/arm/android/properties.c b/src/arm/android/properties.c index ba188a9..42dca9d 100644 --- a/src/arm/android/properties.c +++ b/src/arm/android/properties.c @@ -53,6 +53,10 @@ void cpuinfo_arm_android_parse_properties(struct cpuinfo_android_properties prop cpuinfo_log_debug("read ro.mediatek.platform = \"%.*s\"", ro_mediatek_platform_length, properties->ro_mediatek_platform); + const int ro_arch_length = + cpuinfo_android_property_get("ro.arch", properties->ro_arch); + cpuinfo_log_debug("read ro.arch = \"%.*s\"", ro_arch_length, properties->ro_arch); + const int ro_chipname_length = cpuinfo_android_property_get("ro.chipname", properties->ro_chipname); cpuinfo_log_debug("read ro.chipname = \"%.*s\"", ro_chipname_length, properties->ro_chipname); diff --git a/src/arm/linux/api.h b/src/arm/linux/api.h index 7bbdc01..d8f5d4c 100644 --- a/src/arm/linux/api.h +++ b/src/arm/linux/api.h @@ -21,6 +21,7 @@ char ro_product_board[CPUINFO_BUILD_PROP_VALUE_MAX]; char ro_board_platform[CPUINFO_BUILD_PROP_VALUE_MAX]; char ro_mediatek_platform[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_arch[CPUINFO_BUILD_PROP_VALUE_MAX]; char ro_chipname[CPUINFO_BUILD_PROP_VALUE_MAX]; }; #endif @@ -292,6 +293,8 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_ha uint32_t cores, uint32_t max_cpu_freq_max); struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_mediatek_platform( const char ro_mediatek_platform[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_arch( + const char ro_arch[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_chipname( const char ro_chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); #endif diff --git a/src/arm/linux/chipset.c b/src/arm/linux/chipset.c index 6f85bf9..d137e98 100644 --- a/src/arm/linux/chipset.c +++ b/src/arm/linux/chipset.c @@ -2792,14 +2792,14 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_ha * * @param[in] platform - ro.mediatek.platform value. * - * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor - * and series identifiers. + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` + * vendor and series identifiers. */ struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_mediatek_platform( const char platform[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]) { struct cpuinfo_arm_chipset chipset; - const char* platform_end = platform + strnlen(platform, CPUINFO_BUILD_PROP_VALUE_MAX);; + const char* platform_end = platform + strnlen(platform, CPUINFO_BUILD_PROP_VALUE_MAX); /* Check MediaTek MT signature */ if (match_mt(platform, platform_end, false, &chipset)) { @@ -2812,6 +2812,36 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_ha }; } + + /* + * Decodes chipset name from ro.arch Android system property. + * + * The ro.arch property is matched only against Samsung Exynos signature. Systems with other chipset rarely + * configure ro.arch Android system property, and can be decoded through other properties, but some Exynos + * chipsets are identified only in ro.arch. + * + * @param[in] arch - ro.arch value. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` + * vendor and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_arch( + const char arch[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]) + { + struct cpuinfo_arm_chipset chipset; + const char* arch_end = arch + strnlen(arch, CPUINFO_BUILD_PROP_VALUE_MAX); + + /* Check Samsung exynosXXXX signature */ + if (match_exynos(arch, arch_end, &chipset)) { + return chipset; + } + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + } + /* * Decodes chipset name from ro.chipname Android system property. * @@ -3348,6 +3378,8 @@ void cpuinfo_arm_chipset_to_string( properties->ro_board_platform, cores, max_cpu_freq_max), [cpuinfo_android_chipset_property_ro_mediatek_platform] = cpuinfo_arm_android_decode_chipset_from_ro_mediatek_platform(properties->ro_mediatek_platform), + [cpuinfo_android_chipset_property_ro_arch] = + cpuinfo_arm_android_decode_chipset_from_ro_arch(properties->ro_arch), [cpuinfo_android_chipset_property_ro_chipname] = cpuinfo_arm_android_decode_chipset_from_ro_chipname(properties->ro_chipname), }; diff --git a/test/name/android-properties-interface.c b/test/name/android-properties-interface.c index f68066a..4913f77 100644 --- a/test/name/android-properties-interface.c +++ b/test/name/android-properties-interface.c @@ -10,6 +10,7 @@ void cpuinfo_arm_android_parse_chipset_properties( const char ro_product_board[CPUINFO_BUILD_PROP_VALUE_MAX], const char ro_board_platform[CPUINFO_BUILD_PROP_VALUE_MAX], const char ro_mediatek_platform[CPUINFO_BUILD_PROP_VALUE_MAX], + const char ro_arch[CPUINFO_BUILD_PROP_VALUE_MAX], const char ro_chipname[CPUINFO_BUILD_PROP_VALUE_MAX], uint32_t cores, uint32_t max_cpu_freq_max, @@ -20,6 +21,7 @@ void cpuinfo_arm_android_parse_chipset_properties( strncpy(properties.ro_product_board, ro_product_board, CPUINFO_BUILD_PROP_VALUE_MAX); strncpy(properties.ro_board_platform, ro_board_platform, CPUINFO_BUILD_PROP_VALUE_MAX); strncpy(properties.ro_mediatek_platform, ro_mediatek_platform, CPUINFO_BUILD_PROP_VALUE_MAX); + strncpy(properties.ro_arch, ro_arch, CPUINFO_BUILD_PROP_VALUE_MAX); strncpy(properties.ro_chipname, ro_chipname, CPUINFO_BUILD_PROP_VALUE_MAX); struct cpuinfo_arm_chipset chipset = @@ -86,6 +88,19 @@ void cpuinfo_arm_android_parse_ro_mediatek_platform( } } +void cpuinfo_arm_android_parse_ro_arch( + const char arch[CPUINFO_BUILD_PROP_VALUE_MAX], uint32_t cores, uint32_t max_cpu_freq_max, + char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX]) +{ + struct cpuinfo_arm_chipset chipset = cpuinfo_arm_android_decode_chipset_from_ro_arch(arch); + if (chipset.series == cpuinfo_arm_chipset_series_unknown) { + chipset_name[0] = 0; + } else { + cpuinfo_arm_fixup_chipset(&chipset, cores, max_cpu_freq_max); + cpuinfo_arm_chipset_to_string(&chipset, chipset_name); + } +} + void cpuinfo_arm_android_parse_ro_chipname( const char chipname[CPUINFO_BUILD_PROP_VALUE_MAX], uint32_t cores, uint32_t max_cpu_freq_max, char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX]) diff --git a/test/name/android-properties.cc b/test/name/android-properties.cc index d1d7820..f9062b3 100644 --- a/test/name/android-properties.cc +++ b/test/name/android-properties.cc @@ -14,6 +14,7 @@ extern "C" void cpuinfo_arm_android_parse_chipset_properties( const char ro_product_board[CPUINFO_BUILD_PROP_VALUE_MAX], const char ro_board_platform[CPUINFO_BUILD_PROP_VALUE_MAX], const char ro_mediatek_platform[CPUINFO_BUILD_PROP_VALUE_MAX], + const char ro_arch[CPUINFO_HARDWARE_VALUE_MAX], const char ro_chipname[CPUINFO_BUILD_PROP_VALUE_MAX], uint32_t cores, uint32_t max_cpu_freq_max, @@ -24,110 +25,111 @@ inline std::string parse_chipset( 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) { char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX]; cpuinfo_arm_android_parse_chipset_properties( - hardware.c_str(), product_board.c_str(), board_platform.c_str(), mediatek_platform.c_str(), chipname.c_str(), + hardware.c_str(), product_board.c_str(), board_platform.c_str(), mediatek_platform.c_str(), arch.c_str(), chipname.c_str(), cores, max_cpu_freq_max, chipset_name); return std::string(chipset_name, strnlen(chipset_name, CPUINFO_ARM_CHIPSET_NAME_MAX)); } TEST(ANDROID_PROPERTIES, disambiguate_chipset) { EXPECT_EQ("Amlogic S812", - parse_chipset("Amlogic Meson8", "n200C", "meson8", "", "")); + parse_chipset("Amlogic Meson8", "n200C", "meson8", "", "", "")); EXPECT_EQ("HiSilicon Kirin 925", - parse_chipset("Kirin925", "MT7-L09", "hi3630", "", "")); + parse_chipset("Kirin925", "MT7-L09", "hi3630", "", "", "")); EXPECT_EQ("HiSilicon Kirin 955", - parse_chipset("Hisilicon Kirin 955", "EVA-L09", "hi3650", "", "")); + parse_chipset("Hisilicon Kirin 955", "EVA-L09", "hi3650", "", "", "")); EXPECT_EQ("Marvell PXA986", - parse_chipset("PXA988", "PXA986", "mrvl", "", "")); + parse_chipset("PXA988", "PXA986", "mrvl", "", "", "")); EXPECT_EQ("Marvell PXA986", - parse_chipset("PXA988", "PXA986", "mrvl", "", "PXA986")); + parse_chipset("PXA988", "PXA986", "mrvl", "", "", "PXA986")); EXPECT_EQ("MediaTek MT6735P", - parse_chipset("MT6735P", "MT6735P", "mt6735m", "MT6735", "")); + parse_chipset("MT6735P", "MT6735P", "mt6735m", "MT6735", "", "")); EXPECT_EQ("MediaTek MT8382", - parse_chipset("MT8382", "MT8382", "", "MT6582", "")); + parse_chipset("MT8382", "MT8382", "", "MT6582", "", "")); EXPECT_EQ("MediaTek MT6735P", - parse_chipset("MT6735P", "unknown", "mt6735m", "MT6735", "")); + parse_chipset("MT6735P", "unknown", "mt6735m", "MT6735", "", "")); EXPECT_EQ("MediaTek MT8382", - parse_chipset("MT8382", "LenovoTAB2A7-30HC", "", "MT6582", "")); + parse_chipset("MT8382", "LenovoTAB2A7-30HC", "", "MT6582", "", "")); EXPECT_EQ("Qualcomm MSM8926", - parse_chipset("Qualcomm MSM 8226 (Flattened Device Tree)", "MSM8226", "msm8226", "", "MSM8926")); + parse_chipset("Qualcomm MSM 8226 (Flattened Device Tree)", "MSM8226", "msm8226", "", "", "MSM8926")); EXPECT_EQ("Qualcomm MSM8926", - parse_chipset("Qualcomm MSM8926", "draconis", "msm8226", "", "")); + parse_chipset("Qualcomm MSM8926", "draconis", "msm8226", "", "", "")); EXPECT_EQ("Qualcomm MSM8930AB", - parse_chipset("SAMSUNG SERRANO", "MSM8960", "msm8960", "", "MSM8930AB", 2)); + parse_chipset("SAMSUNG SERRANO", "MSM8960", "msm8960", "", "", "MSM8930AB", 2)); EXPECT_EQ("Qualcomm MSM8940", - parse_chipset("Qualcomm Technologies, Inc MSM8940", "msm8937_32", "msm8937", "", "", 8)); + parse_chipset("Qualcomm Technologies, Inc MSM8940", "msm8937_32", "msm8937", "", "", "", 8)); EXPECT_EQ("Spreadtrum SC6815AS", - parse_chipset("scx15", "SC6815AS", "scx15", "", "SC6815AS")); + parse_chipset("scx15", "SC6815AS", "scx15", "", "", "SC6815AS")); EXPECT_EQ("Spreadtrum SC7727S", - parse_chipset("sc8830", "SC7727S", "sc8830", "", "SC7727S")); + parse_chipset("sc8830", "SC7727S", "sc8830", "", "", "SC7727S")); EXPECT_EQ("Spreadtrum SC7731", - parse_chipset("sc7731", "SC7731", "sc8830", "", "")); + parse_chipset("sc7731", "SC7731", "sc8830", "", "", "")); EXPECT_EQ("Spreadtrum SC7731C", - parse_chipset("sc7731c", "sp7731cea", "sc8830", "", "")); + parse_chipset("sc7731c", "sp7731cea", "sc8830", "", "", "")); } TEST(ANDROID_PROPERTIES, ambiguous_vendors) { EXPECT_EQ("", - parse_chipset("MTK6580", "sp7731ceb", "sc8830", "", "")); + parse_chipset("MTK6580", "sp7731ceb", "sc8830", "", "", "")); EXPECT_EQ("", - parse_chipset("", "universal5410", "msm8974", "", "")); + parse_chipset("", "universal5410", "msm8974", "", "", "")); EXPECT_EQ("", - parse_chipset("MT6580", "universal8895", "mt6580", "MT6580", "")); + parse_chipset("MT6580", "universal8895", "mt6580", "MT6580", "", "")); EXPECT_EQ("", - parse_chipset("", "smdk4x12", "msm8974", "", "", 2)); + parse_chipset("", "smdk4x12", "msm8974", "", "", "", 2)); } TEST(ANDROID_PROPERTIES, unambiguous_chipset) { EXPECT_EQ("Samsung Exynos 3470", - parse_chipset("UNIVERSAL_GARDA", "universal_garda", "exynos3", "", "exynos3470")); + parse_chipset("UNIVERSAL_GARDA", "universal_garda", "exynos3", "", "exynos3470", "exynos3470")); EXPECT_EQ("MediaTek MT6582", - parse_chipset("APPLE A8", "APPLE A8", "", "MT6582", "")); + parse_chipset("APPLE A8", "APPLE A8", "", "MT6582", "", "")); EXPECT_EQ("NovaThor U8500", - parse_chipset("SAMSUNG GOLDEN", "DB8520H", "montblanc", "", "")); + parse_chipset("SAMSUNG GOLDEN", "DB8520H", "montblanc", "", "", "")); EXPECT_EQ("MediaTek MT6580", - parse_chipset("Qualcomm", "unknown", "mt6580", "MT6580", "")); + parse_chipset("Qualcomm", "unknown", "mt6580", "MT6580", "", "")); EXPECT_EQ("HiSilicon Kirin 650", - parse_chipset("", "hi6250", "", "", "")); + parse_chipset("", "hi6250", "", "", "", "")); EXPECT_EQ("Samsung Exynos 8890", - parse_chipset("", "universal8890", "exynos5", "", "exynos8890")); + parse_chipset("", "universal8890", "exynos5", "", "exynos8890", "exynos8890")); EXPECT_EQ("MediaTek MT6582", - parse_chipset("", "MT6582", "", "MT6582", "")); + parse_chipset("", "MT6582", "", "MT6582", "", "")); EXPECT_EQ("Qualcomm MSM8994", - parse_chipset("", "msm8994", "msm8994", "", "")); + parse_chipset("", "msm8994", "msm8994", "", "", "")); EXPECT_EQ("Qualcomm APQ8064", - parse_chipset("SAMSUNG JF", "MSM8960", "msm8960", "", "apq8064", 4)); + parse_chipset("SAMSUNG JF", "MSM8960", "msm8960", "", "", "apq8064", 4)); EXPECT_EQ("MediaTek MT6795", - parse_chipset("", "mt6795", "mt6795", "MT6795", "")); + parse_chipset("", "mt6795", "mt6795", "MT6795", "", "")); EXPECT_EQ("Marvell PXA1908", - parse_chipset("PXA1908", "PXA19xx", "mrvl", "", "PXA19xx")); + parse_chipset("PXA1908", "PXA19xx", "mrvl", "", "", "PXA19xx")); EXPECT_EQ("Spreadtrum SC7715A", - parse_chipset("scx15", "SM-G928G", "scx15", "", "SC7715A")); + parse_chipset("scx15", "SM-G928G", "scx15", "", "", "SC7715A")); EXPECT_EQ("MediaTek MT6592", - parse_chipset("MT6592", "lcsh92_cwet_htc_kk", "", "MT6592", "")); + parse_chipset("MT6592", "lcsh92_cwet_htc_kk", "", "MT6592", "", "")); EXPECT_EQ("HiSilicon Kirin 620", - parse_chipset("hi6210sft", "BalongV8R1SFT", "hi6210sft", "", "")); + parse_chipset("hi6210sft", "BalongV8R1SFT", "hi6210sft", "", "", "")); EXPECT_EQ("Qualcomm APQ8064", - parse_chipset("PANTECH APQ8064 EF52L", "VEGA", "msm8960", "", "apq8064", 4)); + parse_chipset("PANTECH APQ8064 EF52L", "VEGA", "msm8960", "", "", "apq8064", 4)); EXPECT_EQ("MediaTek MT6580M", - parse_chipset("MT6580M", "unknown", "mt6580", "MT6580", "")); + parse_chipset("MT6580M", "unknown", "mt6580", "MT6580", "", "")); EXPECT_EQ("Samsung Exynos 4412", - parse_chipset("SMDK4x12", "smdk4x12", "exynos4", "", "smdk4x12", 4)); + parse_chipset("SMDK4x12", "smdk4x12", "exynos4", "", "", "smdk4x12", 4)); EXPECT_EQ("Samsung Exynos 7420", - parse_chipset("SAMSUNG Exynos7420", "universal7420", "exynos5", "", "exynos7420")); + parse_chipset("SAMSUNG Exynos7420", "universal7420", "exynos5", "", "exynos7420", "exynos7420")); EXPECT_EQ("MediaTek MT6582", - parse_chipset("MT6582", "MT6582", "", "MT6582", "")); + parse_chipset("MT6582", "MT6582", "", "MT6582", "", "")); EXPECT_EQ("Qualcomm MSM8916", - parse_chipset("Qualcomm Technologies, Inc MSM8916", "msm8916", "msm8916", "", "", 4)); + parse_chipset("Qualcomm Technologies, Inc MSM8916", "msm8916", "msm8916", "", "", "", 4)); EXPECT_EQ("Qualcomm MSM8916", - parse_chipset("Qualcomm Technologies, Inc MSM8916", "MSM8916", "msm8916", "", "MSM8916", 4)); + parse_chipset("Qualcomm Technologies, Inc MSM8916", "MSM8916", "msm8916", "", "", "MSM8916", 4)); EXPECT_EQ("MediaTek MT6735", - parse_chipset("MT6735", "mt6735", "mt6735", "MT6735", "")); + parse_chipset("MT6735", "mt6735", "mt6735", "MT6735", "", "")); EXPECT_EQ("MediaTek MT6737T", - parse_chipset("Samsung GrandPrimePlus LTE CIS rev04 board based on MT6737T", "MT6737T", "mt6737t", "MT6737T", "MT6737T")); + parse_chipset("Samsung GrandPrimePlus LTE CIS rev04 board based on MT6737T", "MT6737T", "mt6737t", "MT6737T", "", "MT6737T")); } diff --git a/test/name/ro-arch.cc b/test/name/ro-arch.cc new file mode 100644 index 0000000..cfdb268 --- /dev/null +++ b/test/name/ro-arch.cc @@ -0,0 +1,67 @@ +#include <gtest/gtest.h> + +#include <stdint.h> +#include <string.h> + +#include <string> + +#define CPUINFO_BUILD_PROP_VALUE_MAX 92 +#define CPUINFO_ARM_CHIPSET_NAME_MAX 48 + +extern "C" void cpuinfo_arm_android_parse_ro_arch( + const char arch[CPUINFO_BUILD_PROP_VALUE_MAX], + uint32_t cores, + uint32_t max_cpu_freq_max, + char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX]); + +inline std::string parse_ro_arch( + std::string arch, uint32_t cores=1, uint32_t max_cpu_freq_max=0) +{ + char arch_buffer[CPUINFO_BUILD_PROP_VALUE_MAX]; + strncpy(arch_buffer, arch.c_str(), CPUINFO_BUILD_PROP_VALUE_MAX); + char chipset_name[CPUINFO_ARM_CHIPSET_NAME_MAX]; + cpuinfo_arm_android_parse_ro_arch( + arch_buffer, cores, max_cpu_freq_max, chipset_name); + return std::string(chipset_name, strnlen(chipset_name, CPUINFO_ARM_CHIPSET_NAME_MAX)); +} + +TEST(RO_ARCH, samsung_exynos) { + EXPECT_EQ("Samsung Exynos 3470", + parse_ro_arch("exynos3470")); + EXPECT_EQ("Samsung Exynos 3475", + parse_ro_arch("exynos3475")); + EXPECT_EQ("Samsung Exynos 4415", + parse_ro_arch("exynos4415")); + EXPECT_EQ("Samsung Exynos 5260", + parse_ro_arch("exynos5260")); + EXPECT_EQ("Samsung Exynos 5410", + parse_ro_arch("exynos5410")); + EXPECT_EQ("Samsung Exynos 5420", + parse_ro_arch("exynos5420")); + EXPECT_EQ("Samsung Exynos 5422", + parse_ro_arch("exynos5422")); + EXPECT_EQ("Samsung Exynos 5430", + parse_ro_arch("exynos5430")); + EXPECT_EQ("Samsung Exynos 5433", + parse_ro_arch("exynos5433")); + EXPECT_EQ("Samsung Exynos 7420", + parse_ro_arch("exynos7420")); + EXPECT_EQ("Samsung Exynos 7570", + parse_ro_arch("exynos7570")); + EXPECT_EQ("Samsung Exynos 7580", + parse_ro_arch("exynos7580", 8)); + EXPECT_EQ("Samsung Exynos 7870", + parse_ro_arch("exynos7870")); + EXPECT_EQ("Samsung Exynos 7872", + parse_ro_arch("exynos7872")); + EXPECT_EQ("Samsung Exynos 7880", + parse_ro_arch("exynos7880")); + EXPECT_EQ("Samsung Exynos 7885", + parse_ro_arch("exynos7885")); + EXPECT_EQ("Samsung Exynos 8890", + parse_ro_arch("exynos8890")); + EXPECT_EQ("Samsung Exynos 8895", + parse_ro_arch("exynos8895")); + EXPECT_EQ("Samsung Exynos 9810", + parse_ro_arch("exynos9810")); +} |