| // Copyright 2018 IBM. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "cpuinfo_ppc.h" |
| |
| #include "filesystem_for_testing.h" |
| #include "gtest/gtest.h" |
| #include "hwcaps_for_testing.h" |
| #include "internal/string_view.h" |
| |
| namespace cpu_features { |
| namespace { |
| |
| void DisableHardwareCapabilities() { SetHardwareCapabilities(0, 0); } |
| |
| TEST(CpustringsPPCTest, FromHardwareCap) { |
| SetHardwareCapabilities(PPC_FEATURE_HAS_FPU | PPC_FEATURE_HAS_VSX, |
| PPC_FEATURE2_ARCH_3_00); |
| GetEmptyFilesystem(); // disabling /proc/cpuinfo |
| const auto info = GetPPCInfo(); |
| EXPECT_TRUE(info.features.fpu); |
| EXPECT_FALSE(info.features.mmu); |
| EXPECT_TRUE(info.features.vsx); |
| EXPECT_TRUE(info.features.arch300); |
| EXPECT_FALSE(info.features.power4); |
| EXPECT_FALSE(info.features.altivec); |
| EXPECT_FALSE(info.features.vcrypto); |
| EXPECT_FALSE(info.features.htm); |
| } |
| |
| TEST(CpustringsPPCTest, Blade) { |
| DisableHardwareCapabilities(); |
| auto& fs = GetEmptyFilesystem(); |
| fs.CreateFile("/proc/cpuinfo", |
| R"(processor : 14 |
| cpu : POWER7 (architected), altivec supported |
| clock : 3000.000000MHz |
| revision : 2.1 (pvr 003f 0201) |
| |
| processor : 15 |
| cpu : POWER7 (architected), altivec supported |
| clock : 3000.000000MHz |
| revision : 2.1 (pvr 003f 0201) |
| |
| timebase : 512000000 |
| platform : pSeries |
| model : IBM,8406-70Y |
| machine : CHRP IBM,8406-70Y)"); |
| SetPlatformTypes("power7", "power8"); |
| const auto strings = GetPPCPlatformStrings(); |
| ASSERT_STREQ(strings.platform, "pSeries"); |
| ASSERT_STREQ(strings.model, "IBM,8406-70Y"); |
| ASSERT_STREQ(strings.machine, "CHRP IBM,8406-70Y"); |
| ASSERT_STREQ(strings.cpu, "POWER7 (architected), altivec supported"); |
| ASSERT_STREQ(strings.type.platform, "power7"); |
| ASSERT_STREQ(strings.type.base_platform, "power8"); |
| } |
| |
| TEST(CpustringsPPCTest, Firestone) { |
| DisableHardwareCapabilities(); |
| auto& fs = GetEmptyFilesystem(); |
| fs.CreateFile("/proc/cpuinfo", |
| R"(processor : 126 |
| cpu : POWER8 (raw), altivec supported |
| clock : 2061.000000MHz |
| revision : 2.0 (pvr 004d 0200) |
| |
| processor : 127 |
| cpu : POWER8 (raw), altivec supported |
| clock : 2061.000000MHz |
| revision : 2.0 (pvr 004d 0200) |
| |
| timebase : 512000000 |
| platform : PowerNV |
| model : 8335-GTA |
| machine : PowerNV 8335-GTA |
| firmware : OPAL v3)"); |
| const auto strings = GetPPCPlatformStrings(); |
| ASSERT_STREQ(strings.platform, "PowerNV"); |
| ASSERT_STREQ(strings.model, "8335-GTA"); |
| ASSERT_STREQ(strings.machine, "PowerNV 8335-GTA"); |
| ASSERT_STREQ(strings.cpu, "POWER8 (raw), altivec supported"); |
| } |
| |
| TEST(CpustringsPPCTest, w8) { |
| DisableHardwareCapabilities(); |
| auto& fs = GetEmptyFilesystem(); |
| fs.CreateFile("/proc/cpuinfo", |
| R"(processor : 143 |
| cpu : POWER9, altivec supported |
| clock : 2300.000000MHz |
| revision : 2.2 (pvr 004e 1202) |
| |
| timebase : 512000000 |
| platform : PowerNV |
| model : 0000000000000000 |
| machine : PowerNV 0000000000000000 |
| firmware : OPAL |
| MMU : Radix)"); |
| const auto strings = GetPPCPlatformStrings(); |
| ASSERT_STREQ(strings.platform, "PowerNV"); |
| ASSERT_STREQ(strings.model, "0000000000000000"); |
| ASSERT_STREQ(strings.machine, "PowerNV 0000000000000000"); |
| ASSERT_STREQ(strings.cpu, "POWER9, altivec supported"); |
| } |
| |
| } // namespace |
| } // namespace cpu_features |