1 /*
2 * Copyright (C) 2018-2021 Intel Corporation
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 */
7
8 #include "shared/source/execution_environment/execution_environment.h"
9
10 #include "opencl/test/unit_test/helpers/gtest_helpers.h"
11 #include "opencl/test/unit_test/os_interface/linux/hw_info_config_linux_tests.h"
12
13 using namespace NEO;
14
15 struct HwInfoConfigTestLinuxCfl : HwInfoConfigTestLinux {
SetUpHwInfoConfigTestLinuxCfl16 void SetUp() override {
17 HwInfoConfigTestLinux::SetUp();
18 drm->storedDeviceID = 0x3E92;
19 drm->setGtType(GTTYPE_GT2);
20 }
21 };
22
CFLTEST_F(HwInfoConfigTestLinuxCfl,WhenConfiguringHwInfoThenInformationIsCorrect)23 CFLTEST_F(HwInfoConfigTestLinuxCfl, WhenConfiguringHwInfoThenInformationIsCorrect) {
24 auto hwInfoConfig = HwInfoConfig::get(productFamily);
25 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
26 EXPECT_EQ(0, ret);
27 EXPECT_EQ((unsigned short)drm->storedDeviceID, outHwInfo.platform.usDeviceID);
28 EXPECT_EQ((unsigned short)drm->storedDeviceRevID, outHwInfo.platform.usRevId);
29 EXPECT_EQ((uint32_t)drm->storedEUVal, outHwInfo.gtSystemInfo.EUCount);
30 EXPECT_EQ((uint32_t)drm->storedSSVal, outHwInfo.gtSystemInfo.SubSliceCount);
31 EXPECT_EQ(aub_stream::ENGINE_RCS, outHwInfo.capabilityTable.defaultEngineType);
32
33 EXPECT_EQ(GTTYPE_GT2, outHwInfo.platform.eGTType);
34 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT1);
35 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT1_5);
36 EXPECT_EQ(1u, outHwInfo.featureTable.flags.ftrGT2);
37 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT3);
38 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT4);
39 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTA);
40 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTC);
41 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTX);
42
43 //constant sysInfo/ftr flags
44 EXPECT_EQ(1u, outHwInfo.gtSystemInfo.VEBoxInfo.Instances.Bits.VEBox0Enabled);
45 EXPECT_TRUE(outHwInfo.gtSystemInfo.VEBoxInfo.IsValid);
46
47 drm->storedDeviceID = 0x3E90;
48 drm->storedSSVal = 3;
49 drm->setGtType(GTTYPE_GT1);
50 ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
51 EXPECT_EQ(0, ret);
52 EXPECT_EQ((unsigned short)drm->storedDeviceID, outHwInfo.platform.usDeviceID);
53 EXPECT_EQ((unsigned short)drm->storedDeviceRevID, outHwInfo.platform.usRevId);
54 EXPECT_EQ((uint32_t)drm->storedEUVal, outHwInfo.gtSystemInfo.EUCount);
55 EXPECT_EQ((uint32_t)drm->storedSSVal, outHwInfo.gtSystemInfo.SubSliceCount);
56 EXPECT_EQ(1u, outHwInfo.gtSystemInfo.SliceCount);
57 EXPECT_EQ(aub_stream::ENGINE_RCS, outHwInfo.capabilityTable.defaultEngineType);
58
59 EXPECT_EQ(GTTYPE_GT1, outHwInfo.platform.eGTType);
60 EXPECT_EQ(1u, outHwInfo.featureTable.flags.ftrGT1);
61 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT1_5);
62 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT2);
63 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT3);
64 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT4);
65 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTA);
66 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTC);
67 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTX);
68
69 drm->storedDeviceID = 0x3EA5;
70 drm->storedSSVal = 6;
71 drm->setGtType(GTTYPE_GT3);
72 ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
73 EXPECT_EQ(0, ret);
74 EXPECT_EQ((unsigned short)drm->storedDeviceID, outHwInfo.platform.usDeviceID);
75 EXPECT_EQ((unsigned short)drm->storedDeviceRevID, outHwInfo.platform.usRevId);
76 EXPECT_EQ((uint32_t)drm->storedEUVal, outHwInfo.gtSystemInfo.EUCount);
77 EXPECT_EQ((uint32_t)drm->storedSSVal, outHwInfo.gtSystemInfo.SubSliceCount);
78 EXPECT_EQ(2u, outHwInfo.gtSystemInfo.SliceCount);
79 EXPECT_EQ(aub_stream::ENGINE_RCS, outHwInfo.capabilityTable.defaultEngineType);
80
81 EXPECT_EQ(GTTYPE_GT3, outHwInfo.platform.eGTType);
82 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT1);
83 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT1_5);
84 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT2);
85 EXPECT_EQ(1u, outHwInfo.featureTable.flags.ftrGT3);
86 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGT4);
87 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTA);
88 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTC);
89 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrGTX);
90
91 auto &outKmdNotifyProperties = outHwInfo.capabilityTable.kmdNotifyProperties;
92 EXPECT_TRUE(outKmdNotifyProperties.enableKmdNotify);
93 EXPECT_EQ(50000, outKmdNotifyProperties.delayKmdNotifyMicroseconds);
94 EXPECT_TRUE(outKmdNotifyProperties.enableQuickKmdSleep);
95 EXPECT_EQ(5000, outKmdNotifyProperties.delayQuickKmdSleepMicroseconds);
96 EXPECT_TRUE(outKmdNotifyProperties.enableQuickKmdSleepForSporadicWaits);
97 EXPECT_EQ(200000, outKmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds);
98 EXPECT_FALSE(outKmdNotifyProperties.enableQuickKmdSleepForDirectSubmission);
99 EXPECT_EQ(0, outKmdNotifyProperties.delayQuickKmdSleepForDirectSubmissionMicroseconds);
100 }
101
CFLTEST_F(HwInfoConfigTestLinuxCfl,GivenUnknownDevIdWhenConfiguringHwInfoThenErrorIsReturned)102 CFLTEST_F(HwInfoConfigTestLinuxCfl, GivenUnknownDevIdWhenConfiguringHwInfoThenErrorIsReturned) {
103 drm->storedDeviceID = 0;
104 auto hwInfoConfig = HwInfoConfig::get(productFamily);
105 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
106 EXPECT_EQ(-1, ret);
107 }
108
CFLTEST_F(HwInfoConfigTestLinuxCfl,GivenFailedIoctlDevIdWhenConfiguringHwInfoThenErrorIsReturned)109 CFLTEST_F(HwInfoConfigTestLinuxCfl, GivenFailedIoctlDevIdWhenConfiguringHwInfoThenErrorIsReturned) {
110 drm->storedRetValForDeviceID = -2;
111 auto hwInfoConfig = HwInfoConfig::get(productFamily);
112 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
113 EXPECT_EQ(-2, ret);
114 }
115
CFLTEST_F(HwInfoConfigTestLinuxCfl,GivenFailedIoctlDevRevIdWhenConfiguringHwInfoThenErrorIsReturned)116 CFLTEST_F(HwInfoConfigTestLinuxCfl, GivenFailedIoctlDevRevIdWhenConfiguringHwInfoThenErrorIsReturned) {
117 drm->storedRetValForDeviceRevID = -3;
118 auto hwInfoConfig = HwInfoConfig::get(productFamily);
119 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
120 EXPECT_EQ(-3, ret);
121 }
122
CFLTEST_F(HwInfoConfigTestLinuxCfl,GivenFailedIoctlEuCountWhenConfiguringHwInfoThenErrorIsReturned)123 CFLTEST_F(HwInfoConfigTestLinuxCfl, GivenFailedIoctlEuCountWhenConfiguringHwInfoThenErrorIsReturned) {
124 drm->storedRetValForEUVal = -4;
125 drm->failRetTopology = true;
126 auto hwInfoConfig = HwInfoConfig::get(productFamily);
127 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
128 EXPECT_EQ(-4, ret);
129 }
130
CFLTEST_F(HwInfoConfigTestLinuxCfl,GivenFailedIoctlSsCountWhenConfiguringHwInfoThenErrorIsReturned)131 CFLTEST_F(HwInfoConfigTestLinuxCfl, GivenFailedIoctlSsCountWhenConfiguringHwInfoThenErrorIsReturned) {
132 drm->storedRetValForSSVal = -5;
133 drm->failRetTopology = true;
134 auto hwInfoConfig = HwInfoConfig::get(productFamily);
135 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
136 EXPECT_EQ(-5, ret);
137 }
138
CFLTEST_F(HwInfoConfigTestLinuxCfl,GivenWaFlagsWhenConfiguringHwInfoThenInformationIsCorrect)139 CFLTEST_F(HwInfoConfigTestLinuxCfl, GivenWaFlagsWhenConfiguringHwInfoThenInformationIsCorrect) {
140 auto hwInfoConfig = HwInfoConfig::get(productFamily);
141
142 drm->storedDeviceRevID = 0;
143 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
144 EXPECT_EQ(0, ret);
145 }
146
CFLTEST_F(HwInfoConfigTestLinuxCfl,WhenConfiguringHwInfoThenEdramInformationIsCorrect)147 CFLTEST_F(HwInfoConfigTestLinuxCfl, WhenConfiguringHwInfoThenEdramInformationIsCorrect) {
148 auto hwInfoConfig = HwInfoConfig::get(productFamily);
149
150 int ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
151 EXPECT_EQ(0, ret);
152 EXPECT_EQ_VAL(0u, outHwInfo.gtSystemInfo.EdramSizeInKb);
153 EXPECT_EQ(0u, outHwInfo.featureTable.flags.ftrEDram);
154
155 drm->storedDeviceID = 0x3EA8;
156 drm->setGtType(GTTYPE_GT3);
157 ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
158 EXPECT_EQ(0, ret);
159 EXPECT_EQ_VAL((64u * 1024u), outHwInfo.gtSystemInfo.EdramSizeInKb);
160 EXPECT_EQ(1u, outHwInfo.featureTable.flags.ftrEDram);
161
162 drm->storedDeviceID = 0x3EA6;
163 ret = hwInfoConfig->configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
164 EXPECT_EQ(0, ret);
165 EXPECT_EQ_VAL((64u * 1024u), outHwInfo.gtSystemInfo.EdramSizeInKb);
166 EXPECT_EQ(1u, outHwInfo.featureTable.flags.ftrEDram);
167 }
168
169 template <typename T>
170 class CflHwInfoTests : public ::testing::Test {
171 };
172 typedef ::testing::Types<CFL_1x2x6, CFL_1x3x6, CFL_1x3x8, CFL_2x3x8, CFL_3x3x8> cflTestTypes;
173 TYPED_TEST_CASE(CflHwInfoTests, cflTestTypes);
TYPED_TEST(CflHwInfoTests,WhenGtIsSetupThenGtSystemInfoIsCorrect)174 TYPED_TEST(CflHwInfoTests, WhenGtIsSetupThenGtSystemInfoIsCorrect) {
175 HardwareInfo hwInfo = *defaultHwInfo;
176 auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
177 executionEnvironment->prepareRootDeviceEnvironments(1);
178 executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
179 DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]);
180 GT_SYSTEM_INFO >SystemInfo = hwInfo.gtSystemInfo;
181 DeviceDescriptor device = {0, &hwInfo, &TypeParam::setupHardwareInfo, GTTYPE_GT1};
182
183 int ret = drm.setupHardwareInfo(&device, false);
184
185 EXPECT_EQ(ret, 0);
186 EXPECT_GT(gtSystemInfo.EUCount, 0u);
187 EXPECT_GT(gtSystemInfo.ThreadCount, 0u);
188 EXPECT_GT(gtSystemInfo.SliceCount, 0u);
189 EXPECT_GT(gtSystemInfo.SubSliceCount, 0u);
190 EXPECT_GT(gtSystemInfo.DualSubSliceCount, 0u);
191 EXPECT_GT_VAL(gtSystemInfo.L3CacheSizeInKb, 0u);
192 EXPECT_EQ(gtSystemInfo.CsrSizeInMb, 8u);
193 EXPECT_FALSE(gtSystemInfo.IsDynamicallyPopulated);
194 }
195