diff --git a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp index bc6f6e26b8..e148627d9f 100644 --- a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp @@ -138,6 +138,10 @@ bool IoctlHelperPrelim20::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQ } bool IoctlHelperPrelim20::isVmBindAvailable() { + const auto &productHelper = drm.getRootDeviceEnvironment().getHelper(); + if (!productHelper.isNewResidencyModelSupported()) { + return false; + } int vmBindSupported = 0; GetParam getParam{}; getParam.param = PRELIM_I915_PARAM_HAS_VM_BIND; diff --git a/shared/source/os_interface/product_helper.h b/shared/source/os_interface/product_helper.h index 511ffbc9a0..fe88be637e 100644 --- a/shared/source/os_interface/product_helper.h +++ b/shared/source/os_interface/product_helper.h @@ -108,6 +108,7 @@ class ProductHelper { virtual bool allowCompression(const HardwareInfo &hwInfo) const = 0; virtual LocalMemoryAccessMode getLocalMemoryAccessMode(const HardwareInfo &hwInfo) const = 0; virtual bool isAllocationSizeAdjustmentRequired(const HardwareInfo &hwInfo) const = 0; + virtual bool isNewResidencyModelSupported() const = 0; virtual bool isDirectSubmissionSupported(ReleaseHelper *releaseHelper) const = 0; virtual bool isDirectSubmissionConstantCacheInvalidationNeeded(const HardwareInfo &hwInfo) const = 0; virtual std::pair isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const = 0; diff --git a/shared/source/os_interface/product_helper_bdw_and_later.inl b/shared/source/os_interface/product_helper_bdw_and_later.inl index 46dc7fb768..9c1da8dc4e 100644 --- a/shared/source/os_interface/product_helper_bdw_and_later.inl +++ b/shared/source/os_interface/product_helper_bdw_and_later.inl @@ -40,6 +40,11 @@ bool ProductHelperHw::isBlitterFullySupported(const HardwareInfo &hw return false; } +template +bool ProductHelperHw::isNewResidencyModelSupported() const { + return false; +} + template bool ProductHelperHw::heapInLocalMem(const HardwareInfo &hwInfo) const { return false; diff --git a/shared/source/os_interface/product_helper_hw.h b/shared/source/os_interface/product_helper_hw.h index 8e972f4e02..fb162f7b61 100644 --- a/shared/source/os_interface/product_helper_hw.h +++ b/shared/source/os_interface/product_helper_hw.h @@ -55,6 +55,7 @@ class ProductHelperHw : public ProductHelper { bool allowCompression(const HardwareInfo &hwInfo) const override; LocalMemoryAccessMode getLocalMemoryAccessMode(const HardwareInfo &hwInfo) const override; bool isAllocationSizeAdjustmentRequired(const HardwareInfo &hwInfo) const override; + bool isNewResidencyModelSupported() const override; bool isDirectSubmissionSupported(ReleaseHelper *releaseHelper) const override; bool isDirectSubmissionConstantCacheInvalidationNeeded(const HardwareInfo &hwInfo) const override; std::pair isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const override; diff --git a/shared/source/os_interface/product_helper_xehp_and_later.inl b/shared/source/os_interface/product_helper_xehp_and_later.inl index 8ad26281d8..46ce7adaf0 100644 --- a/shared/source/os_interface/product_helper_xehp_and_later.inl +++ b/shared/source/os_interface/product_helper_xehp_and_later.inl @@ -49,6 +49,11 @@ bool ProductHelperHw::isBlitterFullySupported(const HardwareInfo &hw return hwInfo.capabilityTable.blitterOperationsSupported; } +template +bool ProductHelperHw::isNewResidencyModelSupported() const { + return true; +} + template void ProductHelperHw::setCapabilityCoherencyFlag(const HardwareInfo &hwInfo, bool &coherencyFlag) { coherencyFlag = false; diff --git a/shared/test/common/mocks/mock_product_helper.cpp b/shared/test/common/mocks/mock_product_helper.cpp index d2831dd8e7..70ee0d9d35 100644 --- a/shared/test/common/mocks/mock_product_helper.cpp +++ b/shared/test/common/mocks/mock_product_helper.cpp @@ -203,6 +203,11 @@ bool ProductHelperHw::isAllocationSizeAdjustmentRequired(const Har return false; } +template <> +bool ProductHelperHw::isNewResidencyModelSupported() const { + return false; +} + template <> std::pair ProductHelperHw::isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const { return {false, false}; diff --git a/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp index e9dda2ce84..b0b5b684fd 100644 --- a/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp @@ -1324,7 +1324,9 @@ TEST_F(DrmMemoryOperationsHandlerBindTest, givenClosEnabledAndAllocationToBeCach memoryManager->freeGraphicsMemory(allocation); } -TEST(DrmResidencyHandlerTests, givenClosIndexAndMemoryTypeWhenAskingForPatIndexThenReturnCorrectValue) { +using DrmResidencyHandlerTests = ::testing::Test; + +HWTEST2_F(DrmResidencyHandlerTests, givenClosIndexAndMemoryTypeWhenAskingForPatIndexThenReturnCorrectValue, IsWithinXeGfxFamily) { MockExecutionEnvironment mockExecutionEnvironment{}; auto &gfxCoreHelper = mockExecutionEnvironment.rootDeviceEnvironments[0]->getHelper(); @@ -1349,7 +1351,7 @@ TEST(DrmResidencyHandlerTests, givenClosIndexAndMemoryTypeWhenAskingForPatIndexT } } -TEST(DrmResidencyHandlerTests, givenForceAllResourcesUnchashedSetAskingForPatIndexThenReturnCorrectValue) { +HWTEST2_F(DrmResidencyHandlerTests, givenForceAllResourcesUnchashedSetAskingForPatIndexThenReturnCorrectValue, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.ForceAllResourcesUncached.set(1); @@ -1377,7 +1379,7 @@ TEST(DrmResidencyHandlerTests, givenForceAllResourcesUnchashedSetAskingForPatInd } } -TEST(DrmResidencyHandlerTests, givenSupportedVmBindAndDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenBindAvailableIsInitializedOnce) { +HWTEST2_F(DrmResidencyHandlerTests, givenSupportedVmBindAndDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenBindAvailableIsInitializedOnce, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.UseVmBind.set(1); @@ -1395,7 +1397,7 @@ TEST(DrmResidencyHandlerTests, givenSupportedVmBindAndDebugFlagUseVmBindWhenQuer EXPECT_EQ(1u, drm.context.vmBindQueryCalled); } -TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenSupportIsOverriden) { +HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindWhenQueryingIsVmBindAvailableThenSupportIsOverriden, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.UseVmBind.set(1); @@ -1417,7 +1419,7 @@ namespace NEO { extern bool disableBindDefaultInTests; } -TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultAndBindAvailableInDrmWhenQueryingIsVmBindAvailableThenBindIsAvailable) { +HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultAndBindAvailableInDrmWhenQueryingIsVmBindAvailableThenBindIsAvailableWhenSupported, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.UseVmBind.set(-1); VariableBackup disableBindBackup(&disableBindDefaultInTests, false); @@ -1427,13 +1429,15 @@ TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultAndBindAvailable drm.context.vmBindQueryValue = 1; drm.context.vmBindQueryReturn = 0; EXPECT_FALSE(drm.bindAvailable); + auto &productHelper = drm.getRootDeviceEnvironment().getHelper(); EXPECT_EQ(0u, drm.context.vmBindQueryCalled); - EXPECT_TRUE(drm.isVmBindAvailable()); + EXPECT_EQ(drm.isVmBindAvailable(), productHelper.isNewResidencyModelSupported()); + EXPECT_EQ(drm.bindAvailable, productHelper.isNewResidencyModelSupported()); EXPECT_EQ(1u, drm.context.vmBindQueryCalled); } -TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableFailedThenBindIsNot) { +HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableFailedThenBindIsNot, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.UseVmBind.set(-1); VariableBackup disableBindBackup(&disableBindDefaultInTests, false); @@ -1450,7 +1454,7 @@ TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVm EXPECT_EQ(1u, drm.context.vmBindQueryCalled); } -TEST(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableSuccedAndReportNoBindAvailableInDrmThenBindIsNotAvailable) { +HWTEST2_F(DrmResidencyHandlerTests, givenDebugFlagUseVmBindSetDefaultWhenQueryingIsVmBindAvailableSuccedAndReportNoBindAvailableInDrmThenBindIsNotAvailable, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.UseVmBind.set(-1); VariableBackup disableBindBackup(&disableBindDefaultInTests, false); @@ -1553,7 +1557,7 @@ TEST(DrmSetPairTests, whenQueryingForSetPairAvailableAndDebugKeyNotSetThenNoSupp EXPECT_EQ(0u, drm.context.setPairQueryCalled); } -TEST(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailableThenBothExpectedValueIsReturned) { +HWTEST2_F(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailableThenBothExpectedValueIsReturned, IsWithinXeGfxFamily) { DebugManagerStateRestore restorer; debugManager.flags.UseVmBind.set(-1); debugManager.flags.EnableSetPair.set(1); @@ -1561,6 +1565,7 @@ TEST(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailable auto executionEnvironment = std::make_unique(); DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto &productHelper = drm.getRootDeviceEnvironment().getHelper(); drm.context.setPairQueryValue = 1; drm.context.setPairQueryReturn = 0; @@ -1578,7 +1583,8 @@ TEST(DrmResidencyHandlerTests, whenQueryingForSetPairAvailableAndVmBindAvailable EXPECT_EQ(1u, drm.context.setPairQueryCalled); EXPECT_EQ(0u, drm.context.vmBindQueryCalled); - EXPECT_TRUE(drm.isVmBindAvailable()); + EXPECT_EQ(drm.isVmBindAvailable(), productHelper.isNewResidencyModelSupported()); + EXPECT_EQ(drm.bindAvailable, productHelper.isNewResidencyModelSupported()); EXPECT_EQ(1u, drm.context.vmBindQueryCalled); } 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 139998563d..f9aacf493e 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 @@ -83,6 +83,7 @@ TEST(IoctlHelperPrelimTest, whenGettingVmBindAvailabilityThenProperValueIsReturn auto executionEnvironment = std::make_unique(); DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; + const auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getProductHelper(); IoctlHelperPrelim20 ioctlHelper{drm}; for (auto &ioctlValue : {0, EINVAL}) { @@ -91,12 +92,17 @@ TEST(IoctlHelperPrelimTest, whenGettingVmBindAvailabilityThenProperValueIsReturn drm.context.vmBindQueryValue = hasVmBind; drm.context.vmBindQueryCalled = 0u; - if (ioctlValue == 0) { - EXPECT_EQ(hasVmBind, ioctlHelper.isVmBindAvailable()); + if (productHelper.isNewResidencyModelSupported()) { + if (ioctlValue == 0) { + EXPECT_EQ(hasVmBind, ioctlHelper.isVmBindAvailable()); + } else { + EXPECT_FALSE(ioctlHelper.isVmBindAvailable()); + } + EXPECT_EQ(1u, drm.context.vmBindQueryCalled); } else { EXPECT_FALSE(ioctlHelper.isVmBindAvailable()); + EXPECT_EQ(0u, drm.context.vmBindQueryCalled); } - EXPECT_EQ(1u, drm.context.vmBindQueryCalled); } } }