From 85289f6658d282ed9515001bebae63c5a9f419d2 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Thu, 27 Jun 2024 09:58:09 +0000 Subject: [PATCH] refactor: extract common code for populating ftr and wa table Signed-off-by: Mateusz Jablonski --- shared/source/helpers/hw_info.cpp | 26 ++++++++++++++++ shared/source/helpers/hw_info.h | 1 + shared/source/xe_hpc_core/hw_info_pvc.cpp | 28 ++--------------- shared/source/xe_hpg_core/hw_info_arl.cpp | 22 +------------- shared/source/xe_hpg_core/hw_info_dg2.cpp | 26 ++-------------- shared/source/xe_hpg_core/hw_info_mtl.cpp | 22 +------------- .../test/unit_test/helpers/hw_info_tests.cpp | 30 +++++++++++++++++++ 7 files changed, 64 insertions(+), 91 deletions(-) diff --git a/shared/source/helpers/hw_info.cpp b/shared/source/helpers/hw_info.cpp index 3785aeedc0..eb514437dc 100644 --- a/shared/source/helpers/hw_info.cpp +++ b/shared/source/helpers/hw_info.cpp @@ -158,4 +158,30 @@ void setupDefaultGtSysInfo(HardwareInfo *hwInfo, const ReleaseHelper *releaseHel gtSysInfo->ThreadCount = gtSysInfo->EUCount * releaseHelper->getNumThreadsPerEu(); } + +void setupDefaultFeatureTableAndWorkaroundTable(HardwareInfo *hwInfo) { + FeatureTable *featureTable = &hwInfo->featureTable; + + featureTable->flags.ftrAstcHdr2D = true; + featureTable->flags.ftrAstcLdr2D = true; + featureTable->flags.ftrCCSNode = true; + featureTable->flags.ftrCCSRing = true; + featureTable->flags.ftrFbc = true; + featureTable->flags.ftrGpGpuMidBatchPreempt = true; + featureTable->flags.ftrGpGpuThreadGroupLevelPreempt = true; + featureTable->flags.ftrIA32eGfxPTEs = true; + featureTable->flags.ftrL3IACoherency = true; + featureTable->flags.ftrLinearCCS = true; + featureTable->flags.ftrPPGTT = true; + featureTable->flags.ftrSVM = true; + featureTable->flags.ftrStandardMipTailFormat = true; + featureTable->flags.ftrTileMappedResource = true; + featureTable->flags.ftrTranslationTable = true; + featureTable->flags.ftrUserModeTranslationTable = true; + + WorkaroundTable *workaroundTable = &hwInfo->workaroundTable; + + workaroundTable->flags.wa4kAlignUVOffsetNV12LinearSurface = true; +} + } // namespace NEO diff --git a/shared/source/helpers/hw_info.h b/shared/source/helpers/hw_info.h index 2307203b4f..e0af6cefd6 100644 --- a/shared/source/helpers/hw_info.h +++ b/shared/source/helpers/hw_info.h @@ -170,5 +170,6 @@ void setHwInfoValuesFromConfig(const uint64_t hwInfoConfig, HardwareInfo &hwInfo bool parseHwInfoConfigString(const std::string &hwInfoConfigStr, uint64_t &hwInfoConfig); aub_stream::EngineType getChosenEngineType(const HardwareInfo &hwInfo); void setupDefaultGtSysInfo(HardwareInfo *hwInfo, const ReleaseHelper *releaseHelper); +void setupDefaultFeatureTableAndWorkaroundTable(HardwareInfo *hwInfo); } // namespace NEO diff --git a/shared/source/xe_hpc_core/hw_info_pvc.cpp b/shared/source/xe_hpc_core/hw_info_pvc.cpp index 0fc348f0ce..c5978a5988 100644 --- a/shared/source/xe_hpc_core/hw_info_pvc.cpp +++ b/shared/source/xe_hpc_core/hw_info_pvc.cpp @@ -98,36 +98,14 @@ const RuntimeCapabilityTable PVC::capabilityTable{ }; void PVC::setupFeatureAndWorkaroundTable(HardwareInfo *hwInfo) { + setupDefaultFeatureTableAndWorkaroundTable(hwInfo); FeatureTable *featureTable = &hwInfo->featureTable; - WorkaroundTable *workaroundTable = &hwInfo->workaroundTable; - featureTable->flags.ftrL3IACoherency = true; featureTable->flags.ftrLocalMemory = true; - featureTable->flags.ftrLinearCCS = true; featureTable->flags.ftrFlatPhysCCS = true; - featureTable->flags.ftrE2ECompression = false; - featureTable->flags.ftrCCSNode = true; - featureTable->flags.ftrCCSRing = true; featureTable->flags.ftrMultiTileArch = true; - featureTable->flags.ftrPPGTT = true; - featureTable->flags.ftrSVM = true; - featureTable->flags.ftrL3IACoherency = true; - featureTable->flags.ftrIA32eGfxPTEs = true; - featureTable->flags.ftrStandardMipTailFormat = true; - featureTable->flags.ftrTranslationTable = true; - featureTable->flags.ftrUserModeTranslationTable = true; - featureTable->flags.ftrTileMappedResource = true; - featureTable->flags.ftrFbc = true; - featureTable->flags.ftrAstcHdr2D = true; - featureTable->flags.ftrAstcLdr2D = true; - - featureTable->flags.ftrGpGpuMidBatchPreempt = true; - featureTable->flags.ftrGpGpuThreadGroupLevelPreempt = true; - - featureTable->flags.ftrTileY = false; featureTable->ftrBcsInfo = maxNBitValue(9); - workaroundTable->flags.wa4kAlignUVOffsetNV12LinearSurface = true; } void PVC::adjustHardwareInfo(HardwareInfo *hwInfo) { @@ -155,8 +133,8 @@ void PVC::setupHardwareInfoMultiTileBase(HardwareInfo *hwInfo, bool setupMultiTi gtSysInfo->MultiTileArchInfo.TileMask = static_cast(maxNBitValue(gtSysInfo->MultiTileArchInfo.TileCount)); } -FeatureTable PVC::featureTable; -WorkaroundTable PVC::workaroundTable; +FeatureTable PVC::featureTable{}; +WorkaroundTable PVC::workaroundTable{}; const HardwareInfo PvcHwConfig::hwInfo = { &PVC::platform, diff --git a/shared/source/xe_hpg_core/hw_info_arl.cpp b/shared/source/xe_hpg_core/hw_info_arl.cpp index 97f4db68e9..ade36b7ac3 100644 --- a/shared/source/xe_hpg_core/hw_info_arl.cpp +++ b/shared/source/xe_hpg_core/hw_info_arl.cpp @@ -86,33 +86,13 @@ WorkaroundTable ARL::workaroundTable = {}; FeatureTable ARL::featureTable = {}; void ARL::setupFeatureAndWorkaroundTable(HardwareInfo *hwInfo) { + setupDefaultFeatureTableAndWorkaroundTable(hwInfo); FeatureTable *featureTable = &hwInfo->featureTable; WorkaroundTable *workaroundTable = &hwInfo->workaroundTable; - featureTable->flags.ftrL3IACoherency = true; - featureTable->flags.ftrPPGTT = true; - featureTable->flags.ftrSVM = true; - featureTable->flags.ftrIA32eGfxPTEs = true; - featureTable->flags.ftrStandardMipTailFormat = true; - featureTable->flags.ftrTranslationTable = true; - featureTable->flags.ftrUserModeTranslationTable = true; - featureTable->flags.ftrTileMappedResource = true; - featureTable->flags.ftrFbc = true; - featureTable->flags.ftrAstcHdr2D = true; - featureTable->flags.ftrAstcLdr2D = true; - - featureTable->flags.ftrGpGpuMidBatchPreempt = true; - featureTable->flags.ftrGpGpuThreadGroupLevelPreempt = true; - - featureTable->flags.ftrTileY = false; - featureTable->flags.ftrLinearCCS = true; - featureTable->flags.ftrE2ECompression = false; - featureTable->flags.ftrCCSNode = true; - featureTable->flags.ftrCCSRing = true; featureTable->flags.ftrTile64Optimization = true; featureTable->ftrBcsInfo = 1; - workaroundTable->flags.wa4kAlignUVOffsetNV12LinearSurface = true; workaroundTable->flags.waUntypedBufferCompression = true; }; diff --git a/shared/source/xe_hpg_core/hw_info_dg2.cpp b/shared/source/xe_hpg_core/hw_info_dg2.cpp index a1c8035316..b9b95d16af 100644 --- a/shared/source/xe_hpg_core/hw_info_dg2.cpp +++ b/shared/source/xe_hpg_core/hw_info_dg2.cpp @@ -91,37 +91,15 @@ WorkaroundTable DG2::workaroundTable = {}; FeatureTable DG2::featureTable = {}; void DG2::setupFeatureAndWorkaroundTable(HardwareInfo *hwInfo) { + setupDefaultFeatureTableAndWorkaroundTable(hwInfo); FeatureTable *featureTable = &hwInfo->featureTable; - WorkaroundTable *workaroundTable = &hwInfo->workaroundTable; - featureTable->flags.ftrL3IACoherency = true; featureTable->flags.ftrFlatPhysCCS = true; - featureTable->flags.ftrPPGTT = true; - featureTable->flags.ftrSVM = true; - featureTable->flags.ftrIA32eGfxPTEs = true; - featureTable->flags.ftrStandardMipTailFormat = true; - featureTable->flags.ftrTranslationTable = true; - featureTable->flags.ftrUserModeTranslationTable = true; - featureTable->flags.ftrTileMappedResource = true; - featureTable->flags.ftrFbc = true; - featureTable->flags.ftrAstcHdr2D = true; - featureTable->flags.ftrAstcLdr2D = true; - - featureTable->flags.ftrGpGpuMidBatchPreempt = true; - featureTable->flags.ftrGpGpuThreadGroupLevelPreempt = true; - - featureTable->flags.ftrTileY = false; featureTable->flags.ftrLocalMemory = true; - featureTable->flags.ftrLinearCCS = true; featureTable->flags.ftrE2ECompression = true; - featureTable->flags.ftrCCSNode = true; - featureTable->flags.ftrCCSRing = true; - featureTable->flags.ftrUnified3DMediaCompressionFormats = true; featureTable->flags.ftrTile64Optimization = true; - hwInfo->featureTable.ftrBcsInfo = 1; - - workaroundTable->flags.wa4kAlignUVOffsetNV12LinearSurface = true; + featureTable->ftrBcsInfo = 1; }; void DG2::setupHardwareInfoBase(HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable, const ReleaseHelper *releaseHelper) { diff --git a/shared/source/xe_hpg_core/hw_info_mtl.cpp b/shared/source/xe_hpg_core/hw_info_mtl.cpp index c59ba705be..f1bb5c6532 100644 --- a/shared/source/xe_hpg_core/hw_info_mtl.cpp +++ b/shared/source/xe_hpg_core/hw_info_mtl.cpp @@ -87,33 +87,13 @@ WorkaroundTable MTL::workaroundTable = {}; FeatureTable MTL::featureTable = {}; void MTL::setupFeatureAndWorkaroundTable(HardwareInfo *hwInfo) { + setupDefaultFeatureTableAndWorkaroundTable(hwInfo); FeatureTable *featureTable = &hwInfo->featureTable; WorkaroundTable *workaroundTable = &hwInfo->workaroundTable; - featureTable->flags.ftrL3IACoherency = true; - featureTable->flags.ftrPPGTT = true; - featureTable->flags.ftrSVM = true; - featureTable->flags.ftrIA32eGfxPTEs = true; - featureTable->flags.ftrStandardMipTailFormat = true; - featureTable->flags.ftrTranslationTable = true; - featureTable->flags.ftrUserModeTranslationTable = true; - featureTable->flags.ftrTileMappedResource = true; - featureTable->flags.ftrFbc = true; - featureTable->flags.ftrAstcHdr2D = true; - featureTable->flags.ftrAstcLdr2D = true; - - featureTable->flags.ftrGpGpuMidBatchPreempt = true; - featureTable->flags.ftrGpGpuThreadGroupLevelPreempt = true; - - featureTable->flags.ftrTileY = false; - featureTable->flags.ftrLinearCCS = true; - featureTable->flags.ftrE2ECompression = false; - featureTable->flags.ftrCCSNode = true; - featureTable->flags.ftrCCSRing = true; featureTable->flags.ftrTile64Optimization = true; featureTable->ftrBcsInfo = 1; - workaroundTable->flags.wa4kAlignUVOffsetNV12LinearSurface = true; workaroundTable->flags.waUntypedBufferCompression = true; }; diff --git a/shared/test/unit_test/helpers/hw_info_tests.cpp b/shared/test/unit_test/helpers/hw_info_tests.cpp index 35a5c6ecdb..9aa9060666 100644 --- a/shared/test/unit_test/helpers/hw_info_tests.cpp +++ b/shared/test/unit_test/helpers/hw_info_tests.cpp @@ -47,3 +47,33 @@ TEST(HwInfoTest, givenReleaseHelperWithL3BankConfigWhenSetupDefaultHwInfoThenL3C EXPECT_EQ_VAL(3u, hwInfo.gtSystemInfo.L3BankCount); EXPECT_EQ_VAL(9u, hwInfo.gtSystemInfo.L3CacheSizeInKb); } + +TEST(HwInfoTest, whenSettingDefaultFeatureTableAndWorkaroundTableThenProperFieldsAreSet) { + HardwareInfo hwInfo{}; + FeatureTable expectedFeatureTable{}; + WorkaroundTable expectedWorkaroundTable{}; + + expectedFeatureTable.flags.ftrAstcHdr2D = true; + expectedFeatureTable.flags.ftrAstcLdr2D = true; + expectedFeatureTable.flags.ftrCCSNode = true; + expectedFeatureTable.flags.ftrCCSRing = true; + expectedFeatureTable.flags.ftrFbc = true; + expectedFeatureTable.flags.ftrGpGpuMidBatchPreempt = true; + expectedFeatureTable.flags.ftrGpGpuThreadGroupLevelPreempt = true; + expectedFeatureTable.flags.ftrIA32eGfxPTEs = true; + expectedFeatureTable.flags.ftrL3IACoherency = true; + expectedFeatureTable.flags.ftrLinearCCS = true; + expectedFeatureTable.flags.ftrPPGTT = true; + expectedFeatureTable.flags.ftrSVM = true; + expectedFeatureTable.flags.ftrStandardMipTailFormat = true; + expectedFeatureTable.flags.ftrTileMappedResource = true; + expectedFeatureTable.flags.ftrTranslationTable = true; + expectedFeatureTable.flags.ftrUserModeTranslationTable = true; + + expectedWorkaroundTable.flags.wa4kAlignUVOffsetNV12LinearSurface = true; + + setupDefaultFeatureTableAndWorkaroundTable(&hwInfo); + + EXPECT_EQ(expectedFeatureTable.asHash(), hwInfo.featureTable.asHash()); + EXPECT_EQ(expectedWorkaroundTable.asHash(), hwInfo.workaroundTable.asHash()); +}