From 769a9e515efb9078afef435ea9704bf613400a70 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Fri, 5 May 2023 14:26:24 +0200 Subject: [PATCH] fix: setup MultiTileArchInfo in Xe path when discovering engines we know which tiles are available Related-To: NEO-7931 Signed-off-by: Mateusz Jablonski --- .../os_interface/linux/xe/ioctl_helper_xe.cpp | 9 ++++ .../linux/xe/ioctl_helper_xe_tests.cpp | 42 ++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 6aadaa0e03..c4ba92836c 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -293,9 +293,11 @@ std::unique_ptr IoctlHelperXe::createEngineInfo(bool isSysmanEnabled auto queriedEngines = reinterpret_cast(enginesData.data()); StackVec, 2> enginesPerTile{}; + std::bitset<8> multiTileMask{}; for (auto i = 0u; i < numberHwEngines; i++) { auto tile = queriedEngines[i].gt_id; + multiTileMask.set(tile); EngineClassInstance engineClassInstance{}; engineClassInstance.engineClass = queriedEngines[i].engine_class; engineClassInstance.engineInstance = queriedEngines[i].engine_instance; @@ -315,6 +317,13 @@ std::unique_ptr IoctlHelperXe::createEngineInfo(bool isSysmanEnabled } } + auto hwInfo = drm.getRootDeviceEnvironment().getMutableHardwareInfo(); + if (hwInfo->featureTable.flags.ftrMultiTileArch) { + auto &multiTileArchInfo = hwInfo->gtSystemInfo.MultiTileArchInfo; + multiTileArchInfo.IsValid = true; + multiTileArchInfo.TileCount = multiTileMask.count(); + multiTileArchInfo.TileMask = static_cast(multiTileMask.to_ulong()); + } return std::make_unique(&drm, enginesPerTile); } diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index 6f8c77c399..eef323612a 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -936,4 +936,44 @@ TEST(IoctlHelperXeTest, givenIoctlFailureWhenCreatingEngineInfoThenNoEnginesAreD drm.testMode(1, -1); auto engineInfo = xeIoctlHelper->createEngineInfo(true); EXPECT_EQ(nullptr, engineInfo); -} \ No newline at end of file +} + +TEST(IoctlHelperXeTest, givenEnabledFtrMultiTileArchWhenCreatingEngineInfoThenMultiTileArchInfoIsProperlySet) { + DebugManagerStateRestore restorer; + auto executionEnvironment = std::make_unique(); + auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0]; + DrmMockXe drm{rootDeviceEnvironment}; + auto xeIoctlHelper = std::make_unique(drm); + + auto hwInfo = rootDeviceEnvironment.getMutableHardwareInfo(); + for (const auto &isSysmanEnabled : ::testing::Bool()) { + hwInfo->gtSystemInfo.MultiTileArchInfo = {}; + hwInfo->featureTable.flags.ftrMultiTileArch = true; + auto engineInfo = xeIoctlHelper->createEngineInfo(isSysmanEnabled); + EXPECT_NE(nullptr, engineInfo); + + EXPECT_TRUE(hwInfo->gtSystemInfo.MultiTileArchInfo.IsValid); + EXPECT_EQ(2u, hwInfo->gtSystemInfo.MultiTileArchInfo.TileCount); + EXPECT_EQ(0b11u, hwInfo->gtSystemInfo.MultiTileArchInfo.TileMask); + } +} + +TEST(IoctlHelperXeTest, givenDisabledFtrMultiTileArchWhenCreatingEngineInfoThenMultiTileArchInfoIsNotSet) { + DebugManagerStateRestore restorer; + auto executionEnvironment = std::make_unique(); + auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0]; + DrmMockXe drm{rootDeviceEnvironment}; + auto xeIoctlHelper = std::make_unique(drm); + + auto hwInfo = rootDeviceEnvironment.getMutableHardwareInfo(); + for (const auto &isSysmanEnabled : ::testing::Bool()) { + hwInfo->gtSystemInfo.MultiTileArchInfo = {}; + hwInfo->featureTable.flags.ftrMultiTileArch = false; + auto engineInfo = xeIoctlHelper->createEngineInfo(isSysmanEnabled); + EXPECT_NE(nullptr, engineInfo); + + EXPECT_FALSE(hwInfo->gtSystemInfo.MultiTileArchInfo.IsValid); + EXPECT_EQ(0u, hwInfo->gtSystemInfo.MultiTileArchInfo.TileCount); + EXPECT_EQ(0u, hwInfo->gtSystemInfo.MultiTileArchInfo.TileMask); + } +}