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 ee82757c49..21f8c5dc1f 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -153,6 +153,8 @@ bool IoctlHelperXe::initialize() { hwInfo->platform.usRevId = static_cast((config->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] >> 16) & 0xff); hwInfo->capabilityTable.gpuAddressSpace = (1ull << config->info[DRM_XE_QUERY_CONFIG_VA_BITS]) - 1; + hwInfo->capabilityTable.cxlType = getCxlType(config); + queryGtListData = queryData(DRM_XE_DEVICE_QUERY_GT_LIST); if (queryGtListData.empty()) { diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.h b/shared/source/os_interface/linux/xe/ioctl_helper_xe.h index ed479ced00..3c894c000c 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.h +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.h @@ -17,6 +17,7 @@ struct drm_xe_engine_class_instance; struct drm_xe_query_gt_list; +struct drm_xe_query_config; namespace NEO { @@ -154,6 +155,7 @@ class IoctlHelperXe : public IoctlHelper { void *freeDebugMetadata(void *metadata); int getRunaloneExtProperty(); virtual bool isExtraEngineClassAllowed(uint16_t engineClass) const { return false; } + virtual uint32_t getCxlType(struct drm_xe_query_config *config) { return 0u; } struct UserFenceExtension { static constexpr uint32_t tagValue = 0x123987; 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 f1e9242063..5bcfefa747 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 @@ -1888,6 +1888,7 @@ TEST(IoctlHelperXeTest, whenInitializeThenProperHwInfoIsSet) { EXPECT_EQ(drm.revId, hwInfo->platform.usRevId); EXPECT_EQ(drm.devId, hwInfo->platform.usDeviceID); EXPECT_EQ((1ull << 48) - 1, hwInfo->capabilityTable.gpuAddressSpace); + EXPECT_EQ(static_cast(DrmMockXe::mockDefaultCxlType), hwInfo->capabilityTable.cxlType); EXPECT_EQ(DrmMockXe::mockMaxExecQueuePriority, ioctlHelper->maxExecQueuePriority); } diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h index b3dc1879c4..5a0a1fe06b 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.h @@ -82,7 +82,7 @@ class DrmMockXe : public DrmMockCustom { DrmMockXe(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMockCustom(rootDeviceEnvironment) { auto xeQueryConfig = reinterpret_cast(queryConfig); - xeQueryConfig->num_params = 5; + xeQueryConfig->num_params = 6; xeQueryConfig->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] = (revId << 16) | devId; xeQueryConfig->info[DRM_XE_QUERY_CONFIG_VA_BITS] = 48; xeQueryConfig->info[DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY] = mockMaxExecQueuePriority; @@ -363,9 +363,10 @@ class DrmMockXe : public DrmMockCustom { const uint16_t revId = 0x12; const uint16_t devId = 0xabc; - uint64_t queryConfig[6]{}; // 1 qword for num params and 1 qwords per param + uint64_t queryConfig[7]{}; // 1 qword for num params and 1 qwords per param static constexpr uint32_t mockExecQueueId = 1234; static constexpr int32_t mockMaxExecQueuePriority = 3; + static constexpr int32_t mockDefaultCxlType = 0; static constexpr uint32_t mockTimestampFrequency = 12500000; static_assert(sizeof(drm_xe_engine) == 4 * sizeof(uint64_t), ""); uint64_t queryEngines[52]{}; // 1 qword for num engines and 4 qwords per engine