diff --git a/core/sku_info/sku_info_base.h b/core/sku_info/sku_info_base.h index e7b0acb3a1..d6e0ae5095 100644 --- a/core/sku_info/sku_info_base.h +++ b/core/sku_info/sku_info_base.h @@ -119,5 +119,6 @@ struct WorkaroundTableBase { bool waAuxTable16KGranular = false; bool waDisableFusedThreadScheduling = false; bool waUseOffsetToSkipSetFFIDGP = false; + bool waForceDefaultRCSEngine = false; }; } // namespace NEO diff --git a/runtime/gen12lp/hw_helper_gen12lp.cpp b/runtime/gen12lp/hw_helper_gen12lp.cpp index 001bba99bc..2c25717005 100644 --- a/runtime/gen12lp/hw_helper_gen12lp.cpp +++ b/runtime/gen12lp/hw_helper_gen12lp.cpp @@ -17,7 +17,7 @@ typedef TGLLPFamily Family; template <> void HwHelperHw::adjustDefaultEngineType(HardwareInfo *pHwInfo) { - if (!pHwInfo->featureTable.ftrCCSNode) { + if (!pHwInfo->featureTable.ftrCCSNode || pHwInfo->workaroundTable.waForceDefaultRCSEngine) { pHwInfo->capabilityTable.defaultEngineType = aub_stream::ENGINE_RCS; } } diff --git a/runtime/gen12lp/hw_info_tgllp.inl b/runtime/gen12lp/hw_info_tgllp.inl index c97d9d44f9..30860a62ed 100644 --- a/runtime/gen12lp/hw_info_tgllp.inl +++ b/runtime/gen12lp/hw_info_tgllp.inl @@ -100,8 +100,9 @@ void TGLLP::setupFeatureAndWorkaroundTable(HardwareInfo *hwInfo) { workaroundTable->wa4kAlignUVOffsetNV12LinearSurface = true; workaroundTable->waEnablePreemptionGranularityControlByUMD = true; workaroundTable->waUntypedBufferCompression = true; - if (hwInfo->platform.usRevId == REVISION_A0) { + if (hwInfo->platform.usRevId < REVISION_B) { workaroundTable->waUseOffsetToSkipSetFFIDGP = true; + workaroundTable->waForceDefaultRCSEngine = true; } }; diff --git a/unit_tests/gen12lp/tgllp/test_hw_info_config_tgllp.cpp b/unit_tests/gen12lp/tgllp/test_hw_info_config_tgllp.cpp index 02643f45f4..47c57e0704 100644 --- a/unit_tests/gen12lp/tgllp/test_hw_info_config_tgllp.cpp +++ b/unit_tests/gen12lp/tgllp/test_hw_info_config_tgllp.cpp @@ -88,10 +88,26 @@ TGLLPTEST_F(TgllpHwInfo, givenA0SteppingWhenWaTableIsInitializedThenWaUseOffsetT EXPECT_TRUE(hwInfo.workaroundTable.waUseOffsetToSkipSetFFIDGP); } -TGLLPTEST_F(TgllpHwInfo, givenA1SteppingWhenWaTableIsInitializedThenWaUseOffsetToSkipSetFFIDGPIsNotSet) { +TGLLPTEST_F(TgllpHwInfo, givenBSteppingWhenWaTableIsInitializedThenWaUseOffsetToSkipSetFFIDGPIsNotSet) { HardwareInfo hwInfo; - hwInfo.platform.usRevId = REVISION_A1; + hwInfo.platform.usRevId = REVISION_B; TGLLP::setupFeatureAndWorkaroundTable(&hwInfo); EXPECT_FALSE(hwInfo.workaroundTable.waUseOffsetToSkipSetFFIDGP); } + +TGLLPTEST_F(TgllpHwInfo, givenA0SteppingWhenWaTableIsInitializedThenWaForceDefaultRCSEngineIsSet) { + HardwareInfo hwInfo; + hwInfo.platform.usRevId = REVISION_A0; + TGLLP::setupFeatureAndWorkaroundTable(&hwInfo); + + EXPECT_TRUE(hwInfo.workaroundTable.waForceDefaultRCSEngine); +} + +TGLLPTEST_F(TgllpHwInfo, givenBSteppingWhenWaTableIsInitializedThenWaForceDefaultRCSEngineIsNotSet) { + HardwareInfo hwInfo; + hwInfo.platform.usRevId = REVISION_B; + TGLLP::setupFeatureAndWorkaroundTable(&hwInfo); + + EXPECT_FALSE(hwInfo.workaroundTable.waForceDefaultRCSEngine); +} diff --git a/unit_tests/helpers/hw_helper_tests.cpp b/unit_tests/helpers/hw_helper_tests.cpp index c91dc840e8..eb13961670 100644 --- a/unit_tests/helpers/hw_helper_tests.cpp +++ b/unit_tests/helpers/hw_helper_tests.cpp @@ -769,3 +769,12 @@ HWCMDTEST_F(IGFX_GEN8_CORE, HwHelperTest, GivenVariousValuesWhenCallingCalculate hardwareInfo.gtSystemInfo.ThreadCount / hardwareInfo.gtSystemInfo.EUCount); EXPECT_EQ(hardwareInfo.gtSystemInfo.ThreadCount, result); } + +HWCMDTEST_F(IGFX_GEN8_CORE, HwHelperTest, givenWaForceDefaultRcsEngineIsSetWhenAdjustDefaultEngineTypeIsCalledThenRcsIsUsedAsDefaultEngine) { + hardwareInfo.featureTable.ftrCCSNode = true; + hardwareInfo.workaroundTable.waForceDefaultRCSEngine = true; + + auto &helper = HwHelper::get(hardwareInfo.platform.eRenderCoreFamily); + helper.adjustDefaultEngineType(&hardwareInfo); + EXPECT_EQ(aub_stream::ENGINE_RCS, hardwareInfo.capabilityTable.defaultEngineType); +} \ No newline at end of file