diff --git a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp index d9ac1ed1e7..0adfc5ceff 100644 --- a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp @@ -835,15 +835,22 @@ bool IoctlHelperPrelim20::initialize() { void IoctlHelperPrelim20::setupIpVersion() { auto &rootDeviceEnvironment = drm.getRootDeviceEnvironment(); auto hwInfo = rootDeviceEnvironment.getMutableHardwareInfo(); - 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 && ret != 0 && productHelper.isPlatformQuerySupported()) { - int err = drm.getErrno(); - PRINT_DEBUG_STRING(DebugManager.flags.PrintDebugMessages.get(), stderr, - "ioctl(PRELIM_DRM_I915_QUERY_HW_IP_VERSION) failed with %d. errno=%d(%s)\n", ret, err, strerror(err)); + EngineClassInstance engineInfo = {static_cast(getDrmParamValue(DrmParam::EngineClassRender)), 0}; + int ret = 0; + + auto isPlatformQuerySupported = productHelper.isPlatformQuerySupported(); + bool result = false; + + if (isPlatformQuerySupported) { + result = queryHwIpVersion(engineInfo, hwInfo->ipVersion, ret); + + if (result == false && ret != 0) { + int err = drm.getErrno(); + PRINT_DEBUG_STRING(DebugManager.flags.PrintDebugMessages.get(), stderr, + "ioctl(PRELIM_DRM_I915_QUERY_HW_IP_VERSION) failed with %d. errno=%d(%s)\n", ret, err, strerror(err)); + } } if (result == false) { 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 dea5d402a9..a092902d62 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 @@ -731,6 +731,11 @@ TEST(IoctlHelperPrelimTest, givenProgramDebuggingAndContextDebugSupportedWhenIni } TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInitializatedThenIpVersionIsSet) { + auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + if (productHelper.isPlatformQuerySupported() == false) { + GTEST_SKIP(); + } + auto &ipVersion = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->ipVersion; ipVersion = {}; drm->ioctlHelper->setupIpVersion(); @@ -739,6 +744,21 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInitializatedThenIpVersionI EXPECT_EQ(ipVersion.architecture, 3u); } +TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperAndPlatformQueryNotSupportedWhenSetupIpVersionThenIpVersionIsSetFromHelper) { + auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo(); + auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + if (productHelper.isPlatformQuerySupported() == true) { + GTEST_SKIP(); + } + + auto &compilerProductHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + auto &ipVersion = hwInfo->ipVersion; + ipVersion = {}; + drm->ioctlHelper->setupIpVersion(); + auto config = compilerProductHelper.getHwIpVersion(*hwInfo); + EXPECT_EQ(config, ipVersion.value); +} + TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenFailOnInitializationThenIpVersionIsCorrect) { auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo(); auto &compilerProductHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); @@ -751,6 +771,12 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenFailOnInitializationThenIpV } TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInvalidHwIpVersionSizeOnInitializationThenErrorIsPrinted) { + + auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + if (productHelper.isPlatformQuerySupported() == false) { + GTEST_SKIP(); + } + DebugManagerStateRestore restore; DebugManager.flags.PrintDebugMessages.set(true);