diff --git a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp index 213998d470..c7719454c6 100644 --- a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp @@ -785,8 +785,13 @@ bool IoctlHelperPrelim20::initialize() { EngineClassInstance engineInfo = {static_cast(getDrmParamValue(DrmParam::EngineClassRender)), 0}; int ret = 0; bool result = queryHwIpVersion(engineInfo, hwInfo->ipVersion, ret); + auto &productHelper = drm.getRootDeviceEnvironment().getHelper(); + if (result == false) { + hwInfo->ipVersion.value = productHelper.getProductConfigFromHwInfo(*hwInfo); + } + if (result == false && ret != 0 && productHelper.isPlatformQuerySupported()) { int err = drm.getErrno(); PRINT_DEBUG_STRING(DebugManager.flags.PrintDebugMessages.get(), stderr, diff --git a/shared/source/os_interface/linux/ioctl_helper_upstream.cpp b/shared/source/os_interface/linux/ioctl_helper_upstream.cpp index 263fac72a9..418d7473ef 100644 --- a/shared/source/os_interface/linux/ioctl_helper_upstream.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_upstream.cpp @@ -6,15 +6,22 @@ */ #include "shared/source/debug_settings/debug_settings_manager.h" +#include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/helpers/common_types.h" +#include "shared/source/helpers/hw_info.h" #include "shared/source/os_interface/linux/cache_info.h" +#include "shared/source/os_interface/linux/drm_neo.h" #include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/linux/i915_upstream.h" #include "shared/source/os_interface/linux/ioctl_helper.h" +#include "shared/source/os_interface/product_helper.h" namespace NEO { bool IoctlHelperUpstream::initialize() { + auto hwInfo = this->drm.getRootDeviceEnvironment().getMutableHardwareInfo(); + auto &productHelper = this->drm.getRootDeviceEnvironment().getHelper(); + hwInfo->ipVersion.value = productHelper.getProductConfigFromHwInfo(*hwInfo); return true; } 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 eab64b1202..f7e3fb0968 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -22,6 +22,7 @@ #include "shared/source/os_interface/linux/engine_info.h" #include "shared/source/os_interface/linux/memory_info.h" #include "shared/source/os_interface/linux/os_context_linux.h" +#include "shared/source/os_interface/product_helper.h" #include "drm/i915_drm_prelim.h" #include "drm/xe_drm.h" @@ -241,6 +242,10 @@ bool IoctlHelperXe::initialize() { auto hwInfo = this->drm.getRootDeviceEnvironment().getMutableHardwareInfo(); hwInfo->platform.usDeviceID = chipsetId; hwInfo->platform.usRevId = revId; + + auto &productHelper = this->drm.getRootDeviceEnvironment().getHelper(); + hwInfo->ipVersion.value = productHelper.getProductConfigFromHwInfo(*hwInfo); + return ret; } diff --git a/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp index d70747fcb8..893540d788 100644 --- a/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp @@ -587,15 +587,16 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInitializatedThenIpVersionI EXPECT_EQ(ipVersion.architecture, 3u); } -TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenFailOnInitializationThenIpVersionIsNotSet) { - auto &ipVersion = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->ipVersion; +TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenFailOnInitializationThenIpVersionIsSet) { + auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo(); + auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + auto &ipVersion = hwInfo->ipVersion; ipVersion = {}; drm->failRetHwIpVersion = true; EXPECT_FALSE(drm->ioctlHelper->initialize()); + auto config = productHelper.getProductConfigFromHwInfo(*hwInfo); - EXPECT_EQ(ipVersion.revision, 0u); - EXPECT_EQ(ipVersion.release, 0u); - EXPECT_EQ(ipVersion.architecture, 0u); + EXPECT_EQ(config, ipVersion.value); } TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInvalidHwIpVersionSizeOnInitializationThenErrorIsPrinted) {