feature: handle DRM_XE_TOPO_SIMD16_EU_PER_DSS in xe non-prelim path
Related-To: NEO-12012 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
parent
3898bc1f3f
commit
b46525f556
|
@ -27,7 +27,6 @@ endif()
|
|||
|
||||
if(NEO_ENABLE_XE_PRELIM_DETECTION)
|
||||
list(APPEND NEO_CORE_OS_INTERFACE_LINUX_XE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_xe_prelim.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_xe_prelim.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}create_ioctl_helper_xe_prelim.cpp
|
||||
)
|
||||
|
|
|
@ -489,12 +489,12 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
|||
case DRM_XE_TOPO_L3_BANK:
|
||||
fillMask(l3Banks[tileId], topo);
|
||||
break;
|
||||
case DRM_XE_TOPO_EU_PER_DSS:
|
||||
case DRM_XE_TOPO_SIMD16_EU_PER_DSS:
|
||||
fillMask(euDss[tileId], topo);
|
||||
break;
|
||||
default:
|
||||
if (isEuPerDssTopologyType(topo->type)) {
|
||||
fillMask(euDss[tileId], topo);
|
||||
} else {
|
||||
xeLog("Unhandle GT Topo type: %d\n", topo->type);
|
||||
}
|
||||
xeLog("Unhandle GT Topo type: %d\n", topo->type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1732,7 +1732,4 @@ void IoctlHelperXe::querySupportedFeatures() {
|
|||
};
|
||||
supportedFeatures.flags.pageFault = checkVmCreateFlagsSupport(DRM_XE_VM_CREATE_FLAG_LR_MODE | DRM_XE_VM_CREATE_FLAG_FAULT_MODE);
|
||||
};
|
||||
bool IoctlHelperXe::isEuPerDssTopologyType(uint16_t topologyType) const {
|
||||
return topologyType == DRM_XE_TOPO_EU_PER_DSS;
|
||||
}
|
||||
} // namespace NEO
|
||||
|
|
|
@ -132,7 +132,6 @@ class IoctlHelperXe : public IoctlHelper {
|
|||
void registerBOBindHandle(Drm *drm, DrmAllocation *drmAllocation) override;
|
||||
bool resourceRegistrationEnabled() override { return true; }
|
||||
bool isPreemptionSupported() override { return true; }
|
||||
virtual bool isEuPerDssTopologyType(uint16_t topologyType) const;
|
||||
|
||||
protected:
|
||||
static constexpr uint32_t maxContextSetProperties = 4;
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2024 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/linux/xe/ioctl_helper_xe_prelim.h"
|
||||
|
||||
#include "shared/source/os_interface/linux/xe/xedrm_prelim.h"
|
||||
|
||||
namespace NEO {
|
||||
|
||||
bool IoctlHelperXePrelim::isEuPerDssTopologyType(uint16_t topologyType) const {
|
||||
return topologyType == DRM_XE_TOPO_EU_PER_DSS ||
|
||||
topologyType == DRM_XE_TOPO_SIMD16_EU_PER_DSS;
|
||||
}
|
||||
} // namespace NEO
|
|
@ -13,7 +13,6 @@ namespace NEO {
|
|||
class IoctlHelperXePrelim : public IoctlHelperXe {
|
||||
public:
|
||||
using IoctlHelperXe::IoctlHelperXe;
|
||||
bool isEuPerDssTopologyType(uint16_t topologyType) const override;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
|
|
@ -15,12 +15,6 @@ if(NEO_ENABLE_XE_EU_DEBUG_SUPPORT)
|
|||
)
|
||||
endif()
|
||||
|
||||
if(NEO_ENABLE_XE_PRELIM_DETECTION)
|
||||
list(APPEND NEO_CORE_OS_INTERFACE_TESTS_LINUX_XE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_xe_prelim_tests.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
set_property(GLOBAL APPEND PROPERTY NEO_CORE_OS_INTERFACE_TESTS_LINUX ${NEO_CORE_OS_INTERFACE_TESTS_LINUX_XE})
|
||||
|
||||
if(UNIX)
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2024 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||
#include "shared/source/os_interface/linux/xe/ioctl_helper_xe_prelim.h"
|
||||
#include "shared/source/os_interface/linux/xe/xedrm_prelim.h"
|
||||
#include "shared/test/common/mocks/mock_execution_environment.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
TEST(IoctlHelperXePrelimTest, givenSimd16EuPerDssTypeWhenCheckingIfTopologyIsEuPerDssThenSuccessIsReturned) {
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
std::unique_ptr<Drm> drm{Drm::create(std::make_unique<HwDeviceIdDrm>(0, ""), *executionEnvironment.rootDeviceEnvironments[0])};
|
||||
IoctlHelperXePrelim ioctlHelper{*drm};
|
||||
EXPECT_TRUE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_SIMD16_EU_PER_DSS));
|
||||
EXPECT_TRUE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_EU_PER_DSS));
|
||||
EXPECT_FALSE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_DSS_GEOMETRY));
|
||||
EXPECT_FALSE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_DSS_COMPUTE));
|
||||
}
|
|
@ -744,57 +744,6 @@ TEST(IoctlHelperXeTest, whenCallingIoctlThenProperValueIsReturned) {
|
|||
drm->reset();
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenGeomDssWhenGetTopologyDataAndMapThenResultsAreCorrect) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
auto xeIoctlHelper = static_cast<MockIoctlHelperXe *>(drm->getIoctlHelper());
|
||||
auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo();
|
||||
|
||||
xeIoctlHelper->initialize();
|
||||
|
||||
uint16_t tileId = 0;
|
||||
for (auto gtId = 0u; gtId < 4u; gtId++) {
|
||||
drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0});
|
||||
}
|
||||
DrmQueryTopologyData topologyData{};
|
||||
TopologyMap topologyMap{};
|
||||
|
||||
hwInfo.gtSystemInfo.MaxSlicesSupported = 1;
|
||||
hwInfo.gtSystemInfo.MaxSubSlicesSupported = 6;
|
||||
auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
// verify topology data
|
||||
EXPECT_EQ(1, topologyData.sliceCount);
|
||||
EXPECT_EQ(1, topologyData.maxSlices);
|
||||
|
||||
EXPECT_EQ(6, topologyData.subSliceCount);
|
||||
EXPECT_EQ(6, topologyData.maxSubSlicesPerSlice);
|
||||
|
||||
EXPECT_EQ(96, topologyData.euCount);
|
||||
EXPECT_EQ(16, topologyData.maxEusPerSubSlice);
|
||||
|
||||
// verify topology map
|
||||
std::vector<int> expectedSliceIndices{0};
|
||||
ASSERT_EQ(expectedSliceIndices.size(), topologyMap[tileId].sliceIndices.size());
|
||||
ASSERT_TRUE(topologyMap[tileId].sliceIndices.size() > 0);
|
||||
|
||||
for (auto i = 0u; i < expectedSliceIndices.size(); i++) {
|
||||
EXPECT_EQ(expectedSliceIndices[i], topologyMap[tileId].sliceIndices[i]);
|
||||
}
|
||||
|
||||
std::vector<int> expectedSubSliceIndices{0, 1, 2, 3, 4, 5};
|
||||
ASSERT_EQ(expectedSubSliceIndices.size(), topologyMap[tileId].subsliceIndices.size());
|
||||
ASSERT_TRUE(topologyMap[tileId].subsliceIndices.size() > 0);
|
||||
|
||||
for (auto i = 0u; i < expectedSubSliceIndices.size(); i++) {
|
||||
EXPECT_EQ(expectedSubSliceIndices[i], topologyMap[tileId].subsliceIndices[i]);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenUnknownTopologyTypeWhenGetTopologyDataAndMapThenNotRecognizedTopologyIsIgnored) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
|
@ -848,7 +797,7 @@ TEST(IoctlHelperXeTest, givenUnknownTopologyTypeWhenGetTopologyDataAndMapThenNot
|
|||
}
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenComputeDssWhenGetTopologyDataAndMapThenResultsAreCorrect) {
|
||||
TEST(IoctlHelperXeTest, givenVariousDssConfigInputsWhenGetTopologyDataAndMapThenResultsAreCorrect) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
@ -856,41 +805,47 @@ TEST(IoctlHelperXeTest, givenComputeDssWhenGetTopologyDataAndMapThenResultsAreCo
|
|||
auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo();
|
||||
xeIoctlHelper->initialize();
|
||||
|
||||
uint16_t tileId = 0;
|
||||
for (auto gtId = 0u; gtId < 4u; gtId++) {
|
||||
drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0x0fu, 0xff, 0u, 0xff, 0u, 0u, 0xff, 0xff});
|
||||
drm->addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0, 0, 0, 0, 0, 0, 0});
|
||||
for (auto &dssConfigType : {DRM_XE_TOPO_DSS_GEOMETRY, DRM_XE_TOPO_DSS_COMPUTE}) {
|
||||
for (auto &euPerDssConfigType : {DRM_XE_TOPO_EU_PER_DSS, DRM_XE_TOPO_SIMD16_EU_PER_DSS}) {
|
||||
|
||||
drm->queryTopology.clear();
|
||||
|
||||
uint16_t tileId = 0;
|
||||
for (auto gtId = 0u; gtId < 4u; gtId++) {
|
||||
drm->addMockedQueryTopologyData(gtId, dssConfigType, 8, {0x0fu, 0xff, 0u, 0xff, 0u, 0u, 0xff, 0xff});
|
||||
drm->addMockedQueryTopologyData(gtId, euPerDssConfigType, 8, {0b1111'1111, 0, 0, 0, 0, 0, 0, 0});
|
||||
}
|
||||
|
||||
DrmQueryTopologyData topologyData{};
|
||||
TopologyMap topologyMap{};
|
||||
|
||||
hwInfo.gtSystemInfo.MaxSlicesSupported = 4u;
|
||||
hwInfo.gtSystemInfo.MaxSubSlicesSupported = 32u;
|
||||
auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
// verify topology data
|
||||
EXPECT_EQ(3, topologyData.sliceCount);
|
||||
EXPECT_EQ(4, topologyData.maxSlices);
|
||||
|
||||
EXPECT_EQ(20, topologyData.subSliceCount);
|
||||
EXPECT_EQ(8, topologyData.maxSubSlicesPerSlice);
|
||||
|
||||
EXPECT_EQ(160, topologyData.euCount);
|
||||
EXPECT_EQ(8, topologyData.maxEusPerSubSlice);
|
||||
|
||||
// verify topology map
|
||||
std::vector<int> expectedSliceIndices = {0, 1, 3};
|
||||
ASSERT_EQ(expectedSliceIndices.size(), topologyMap[tileId].sliceIndices.size());
|
||||
ASSERT_TRUE(topologyMap[tileId].sliceIndices.size() > 0);
|
||||
|
||||
for (auto i = 0u; i < expectedSliceIndices.size(); i++) {
|
||||
EXPECT_EQ(expectedSliceIndices[i], topologyMap[tileId].sliceIndices[i]);
|
||||
}
|
||||
|
||||
EXPECT_EQ(0u, topologyMap[tileId].subsliceIndices.size());
|
||||
}
|
||||
}
|
||||
|
||||
DrmQueryTopologyData topologyData{};
|
||||
TopologyMap topologyMap{};
|
||||
|
||||
hwInfo.gtSystemInfo.MaxSlicesSupported = 4u;
|
||||
hwInfo.gtSystemInfo.MaxSubSlicesSupported = 32u;
|
||||
auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
// verify topology data
|
||||
EXPECT_EQ(3, topologyData.sliceCount);
|
||||
EXPECT_EQ(4, topologyData.maxSlices);
|
||||
|
||||
EXPECT_EQ(20, topologyData.subSliceCount);
|
||||
EXPECT_EQ(8, topologyData.maxSubSlicesPerSlice);
|
||||
|
||||
EXPECT_EQ(160, topologyData.euCount);
|
||||
EXPECT_EQ(8, topologyData.maxEusPerSubSlice);
|
||||
|
||||
// verify topology map
|
||||
std::vector<int> expectedSliceIndices = {0, 1, 3};
|
||||
ASSERT_EQ(expectedSliceIndices.size(), topologyMap[tileId].sliceIndices.size());
|
||||
ASSERT_TRUE(topologyMap[tileId].sliceIndices.size() > 0);
|
||||
|
||||
for (auto i = 0u; i < expectedSliceIndices.size(); i++) {
|
||||
EXPECT_EQ(expectedSliceIndices[i], topologyMap[tileId].sliceIndices[i]);
|
||||
}
|
||||
|
||||
EXPECT_EQ(0u, topologyMap[tileId].subsliceIndices.size());
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenOnlyMediaTypeWhenGetTopologyDataAndMapThenSubsliceIndicesNotSet) {
|
||||
|
@ -2460,15 +2415,6 @@ TEST_F(IoctlHelperXeHwIpVersionTests, WhenSetupIpVersionIsCalledAndIoctlReturnsN
|
|||
EXPECT_EQ(config, hwInfo.ipVersion.value);
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenCorrectEuPerDssTypeWhenCheckingIfTopologyIsEuPerDssThenSuccessIsReturned) {
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
std::unique_ptr<Drm> drm{Drm::create(std::make_unique<HwDeviceIdDrm>(0, ""), *executionEnvironment.rootDeviceEnvironments[0])};
|
||||
IoctlHelperXe ioctlHelper{*drm};
|
||||
EXPECT_TRUE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_EU_PER_DSS));
|
||||
EXPECT_FALSE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_DSS_GEOMETRY));
|
||||
EXPECT_FALSE(ioctlHelper.isEuPerDssTopologyType(DRM_XE_TOPO_DSS_COMPUTE));
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenIoctlHelperWhenSettingExtContextThenCallExternalIoctlFunction) {
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
std::unique_ptr<Drm> drm{Drm::create(std::make_unique<HwDeviceIdDrm>(0, ""), *executionEnvironment.rootDeviceEnvironments[0])};
|
||||
|
|
Loading…
Reference in New Issue