mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 00:24:58 +08:00
fix: correct hw info setting in drm path
add fallback to get max eu per ss from topology if not available in other way Related-To: NEO-12073 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
a734a738fa
commit
71f4088a1e
@@ -534,6 +534,10 @@ int Drm::setupHardwareInfo(const DeviceDescriptor *device, bool setupFeatureTabl
|
||||
hwInfo->gtSystemInfo.SubSliceCount = static_cast<uint32_t>(topologyData.subSliceCount);
|
||||
hwInfo->gtSystemInfo.DualSubSliceCount = static_cast<uint32_t>(topologyData.subSliceCount);
|
||||
|
||||
if (!hwInfo->gtSystemInfo.MaxEuPerSubSlice) {
|
||||
hwInfo->gtSystemInfo.MaxEuPerSubSlice = topologyData.maxEusPerSubSlice;
|
||||
}
|
||||
|
||||
auto maxEuCount = static_cast<uint32_t>(topologyData.subSliceCount) * hwInfo->gtSystemInfo.MaxEuPerSubSlice;
|
||||
|
||||
if (topologyData.euCount == 0 || static_cast<uint32_t>(topologyData.euCount) > maxEuCount) {
|
||||
|
||||
@@ -70,7 +70,14 @@ class MockIoctlHelper : public IoctlHelperPrelim20 {
|
||||
std::unique_ptr<MemoryInfo> memoryInfo = std::make_unique<MemoryInfo>(regionInfo, drm);
|
||||
return memoryInfo;
|
||||
}
|
||||
|
||||
bool getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTopologyData &topologyData, TopologyMap &topologyMap) override {
|
||||
topologyData = topologyDataToSet;
|
||||
topologyMap[0].sliceIndices = topologyMapToSet.sliceIndices;
|
||||
topologyMap[0].subsliceIndices = topologyMapToSet.subsliceIndices;
|
||||
return true;
|
||||
}
|
||||
DrmQueryTopologyData topologyDataToSet{};
|
||||
TopologyMapping topologyMapToSet{};
|
||||
int getDrmParamValueResult = 1234;
|
||||
uint32_t releaseInterruptCalled = 0;
|
||||
uint32_t latestReleaseInterruptHandle = InterruptId::notUsed;
|
||||
|
||||
@@ -1752,6 +1752,48 @@ TEST(DrmWrapperTest, WhenGettingDrmParamValueStringThenProperStringIsReturned) {
|
||||
EXPECT_THROW(getDrmParamString(DrmParam::engineClassRender, &ioctlHelper), std::runtime_error);
|
||||
}
|
||||
|
||||
TEST(DrmHwInfoTest, givenTopologyDataWithoutSystemInfoWhenSettingHwInfoThenCorrectValuesAreSet) {
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
|
||||
|
||||
drm.ioctlHelper = std::make_unique<MockIoctlHelper>(drm);
|
||||
|
||||
auto ioctlHelper = static_cast<MockIoctlHelper *>(drm.ioctlHelper.get());
|
||||
|
||||
ioctlHelper->topologyDataToSet.sliceCount = 2;
|
||||
ioctlHelper->topologyDataToSet.subSliceCount = 6;
|
||||
ioctlHelper->topologyDataToSet.euCount = 12;
|
||||
ioctlHelper->topologyDataToSet.numL3Banks = 3;
|
||||
ioctlHelper->topologyDataToSet.maxSlices = 4;
|
||||
ioctlHelper->topologyDataToSet.maxSubSlicesPerSlice = 4;
|
||||
ioctlHelper->topologyDataToSet.maxEusPerSubSlice = 9;
|
||||
|
||||
ioctlHelper->topologyMapToSet.sliceIndices = {1, 2};
|
||||
ioctlHelper->topologyMapToSet.subsliceIndices = {};
|
||||
|
||||
auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo();
|
||||
|
||||
hwInfo->gtSystemInfo = {};
|
||||
|
||||
auto setupHardwareInfo = [](HardwareInfo *, bool, const ReleaseHelper *) {};
|
||||
DeviceDescriptor device = {0, hwInfo, setupHardwareInfo};
|
||||
|
||||
drm.systemInfoQueried = true;
|
||||
EXPECT_EQ(nullptr, drm.systemInfo.get());
|
||||
drm.setupHardwareInfo(&device, false);
|
||||
EXPECT_EQ(nullptr, drm.systemInfo.get());
|
||||
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.SliceCount, 2u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.SubSliceCount, 6u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.DualSubSliceCount, 6u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.EUCount, 12u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.L3BankCount, 3u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.MaxEuPerSubSlice, 9u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.MaxSlicesSupported, 2u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.MaxSubSlicesSupported, 16u);
|
||||
EXPECT_EQ(hwInfo->gtSystemInfo.MaxDualSubSlicesSupported, 16u);
|
||||
}
|
||||
|
||||
TEST(DrmWrapperTest, givenEAgainOrEIntrOrEBusyWhenCheckingIfReinvokeRequiredThenTrueIsReturned) {
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
|
||||
|
||||
Reference in New Issue
Block a user