/* * Copyright (c) 2017 - 2018, Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #include "unit_tests/helpers/gtest_helpers.h" #include "unit_tests/os_interface/linux/hw_info_config_tests.h" using namespace OCLRT; using namespace std; struct HwInfoConfigTestLinuxBdw : HwInfoConfigTestLinux { void SetUp() override { HwInfoConfigTestLinux::SetUp(); drm->StoredDeviceID = IBDW_GT2_ULT_MOBL_DEVICE_F0_ID; drm->setGtType(GTTYPE_GT2); } }; BDWTEST_F(HwInfoConfigTestLinuxBdw, configureHwInfo) { auto hwInfoConfig = HwInfoConfig::get(productFamily); drm->StoredSSVal = 3; int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ((unsigned short)drm->StoredDeviceID, outHwInfo.pPlatform->usDeviceID); EXPECT_EQ((unsigned short)drm->StoredDeviceRevID, outHwInfo.pPlatform->usRevId); EXPECT_EQ((uint32_t)drm->StoredEUVal, outHwInfo.pSysInfo->EUCount); EXPECT_EQ((uint32_t)drm->StoredSSVal, outHwInfo.pSysInfo->SubSliceCount); EXPECT_EQ(1u, outHwInfo.pSysInfo->SliceCount); EXPECT_EQ(EngineType::ENGINE_RCS, outHwInfo.capabilityTable.defaultEngineType); EXPECT_EQ(GTTYPE_GT2, outHwInfo.pPlatform->eGTType); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT1); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT1_5); EXPECT_EQ(1u, outHwInfo.pSkuTable->ftrGT2); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT3); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT4); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTA); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTC); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTX); ReleaseOutHwInfoStructs(); drm->StoredDeviceID = IBDW_GT1_HALO_MOBL_DEVICE_F0_ID; drm->setGtType(GTTYPE_GT1); ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ((unsigned short)drm->StoredDeviceID, outHwInfo.pPlatform->usDeviceID); EXPECT_EQ((unsigned short)drm->StoredDeviceRevID, outHwInfo.pPlatform->usRevId); EXPECT_EQ((uint32_t)drm->StoredEUVal, outHwInfo.pSysInfo->EUCount); EXPECT_EQ((uint32_t)drm->StoredSSVal, outHwInfo.pSysInfo->SubSliceCount); EXPECT_EQ(EngineType::ENGINE_RCS, outHwInfo.capabilityTable.defaultEngineType); EXPECT_EQ(GTTYPE_GT1, outHwInfo.pPlatform->eGTType); EXPECT_EQ(1u, outHwInfo.pSkuTable->ftrGT1); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT1_5); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT2); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT3); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT4); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTA); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTC); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTX); ReleaseOutHwInfoStructs(); drm->StoredDeviceID = IBDW_GT3_ULT_MOBL_DEVICE_F0_ID; drm->setGtType(GTTYPE_GT3); drm->StoredSSVal = 6; ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ((unsigned short)drm->StoredDeviceID, outHwInfo.pPlatform->usDeviceID); EXPECT_EQ((unsigned short)drm->StoredDeviceRevID, outHwInfo.pPlatform->usRevId); EXPECT_EQ((uint32_t)drm->StoredEUVal, outHwInfo.pSysInfo->EUCount); EXPECT_EQ((uint32_t)drm->StoredSSVal, outHwInfo.pSysInfo->SubSliceCount); EXPECT_EQ(2u, outHwInfo.pSysInfo->SliceCount); EXPECT_EQ(EngineType::ENGINE_RCS, outHwInfo.capabilityTable.defaultEngineType); EXPECT_EQ(GTTYPE_GT3, outHwInfo.pPlatform->eGTType); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT1); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT1_5); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT2); EXPECT_EQ(1u, outHwInfo.pSkuTable->ftrGT3); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGT4); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTA); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTC); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrGTX); } BDWTEST_F(HwInfoConfigTestLinuxBdw, negativeUnknownDevId) { drm->StoredDeviceID = 0; auto hwInfoConfig = HwInfoConfig::get(productFamily); int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(-1, ret); } BDWTEST_F(HwInfoConfigTestLinuxBdw, negativeFailedIoctlDevId) { drm->StoredRetValForDeviceID = -2; auto hwInfoConfig = HwInfoConfig::get(productFamily); int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(-2, ret); } BDWTEST_F(HwInfoConfigTestLinuxBdw, negativeFailedIoctlDevRevId) { drm->StoredRetValForDeviceRevID = -3; auto hwInfoConfig = HwInfoConfig::get(productFamily); int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(-3, ret); } BDWTEST_F(HwInfoConfigTestLinuxBdw, negativeFailedIoctlEuCount) { drm->StoredRetValForEUVal = -4; auto hwInfoConfig = HwInfoConfig::get(productFamily); int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(-4, ret); } BDWTEST_F(HwInfoConfigTestLinuxBdw, negativeFailedIoctlSsCount) { drm->StoredRetValForSSVal = -5; auto hwInfoConfig = HwInfoConfig::get(productFamily); int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(-5, ret); } BDWTEST_F(HwInfoConfigTestLinuxBdw, configureHwInfoWaFlags) { auto hwInfoConfig = HwInfoConfig::get(productFamily); drm->StoredDeviceRevID = 0; int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ(1u, outHwInfo.pWaTable->waSamplerCacheFlushBetweenRedescribedSurfaceReads); ReleaseOutHwInfoStructs(); } BDWTEST_F(HwInfoConfigTestLinuxBdw, configureHwInfoEdram) { auto hwInfoConfig = HwInfoConfig::get(productFamily); int ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ_VAL(0u, outHwInfo.pSysInfo->EdramSizeInKb); EXPECT_EQ(0u, outHwInfo.pSkuTable->ftrEDram); ReleaseOutHwInfoStructs(); drm->StoredDeviceID = IBDW_GT3_HALO_MOBL_DEVICE_F0_ID; drm->setGtType(GTTYPE_GT3); ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ_VAL((128u * 1024u), outHwInfo.pSysInfo->EdramSizeInKb); EXPECT_EQ(1u, outHwInfo.pSkuTable->ftrEDram); ReleaseOutHwInfoStructs(); drm->StoredDeviceID = IBDW_GT3_SERV_DEVICE_F0_ID; ret = hwInfoConfig->configureHwInfo(pInHwInfo, &outHwInfo, osInterface); EXPECT_EQ(0, ret); EXPECT_EQ_VAL((128u * 1024u), outHwInfo.pSysInfo->EdramSizeInKb); EXPECT_EQ(1u, outHwInfo.pSkuTable->ftrEDram); } BDWTEST_F(HwInfoConfigTestLinuxBdw, whenCallAdjustPlatformThenDoNothing) { auto hwInfoConfig = HwInfoConfig::get(productFamily); hwInfoConfig->adjustPlatformForProductFamily(&testHwInfo); int ret = memcmp(testHwInfo.pPlatform, pInHwInfo->pPlatform, sizeof(PLATFORM)); EXPECT_EQ(0, ret); } template class BdwHwInfoTests : public ::testing::Test { }; typedef ::testing::Types bdwTestTypes; TYPED_TEST_CASE(BdwHwInfoTests, bdwTestTypes); TYPED_TEST(BdwHwInfoTests, gtSetupIsCorrect) { GT_SYSTEM_INFO gtSystemInfo; memset(>SystemInfo, 0, sizeof(gtSystemInfo)); TypeParam::setupGtSystemInfo(>SystemInfo); EXPECT_GT(gtSystemInfo.EUCount, 0u); EXPECT_GT(gtSystemInfo.ThreadCount, 0u); EXPECT_GT(gtSystemInfo.SliceCount, 0u); EXPECT_GT(gtSystemInfo.SubSliceCount, 0u); EXPECT_GT_VAL(gtSystemInfo.L3CacheSizeInKb, 0u); EXPECT_EQ(gtSystemInfo.CsrSizeInMb, 8u); EXPECT_FALSE(gtSystemInfo.IsDynamicallyPopulated); }