1 /*
2 * Copyright (C) 2018-2021 Intel Corporation
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 */
7
8 #include "shared/source/aub_mem_dump/definitions/aub_services.h"
9 #include "shared/source/gen9/hw_cmds.h"
10 #include "shared/source/helpers/constants.h"
11
12 #include "engine_node.h"
13
14 namespace NEO {
15
16 const char *HwMapper<IGFX_GEMINILAKE>::abbreviation = "glk";
17
isSimulationGLK(unsigned short deviceId)18 bool isSimulationGLK(unsigned short deviceId) {
19 return false;
20 };
21
22 const PLATFORM GLK::platform = {
23 IGFX_GEMINILAKE,
24 PCH_UNKNOWN,
25 IGFX_GEN9_CORE,
26 IGFX_GEN9_CORE,
27 PLATFORM_MOBILE, // default init
28 0, // usDeviceID
29 0, // usRevId. 0 sets the stepping to A0
30 0, // usDeviceID_PCH
31 0, // usRevId_PCH
32 GTTYPE_UNDEFINED};
33
34 const RuntimeCapabilityTable GLK::capabilityTable{
35 EngineDirectSubmissionInitVec{
36 {aub_stream::ENGINE_RCS, {true, true}}}, // directSubmissionEngines
37 {30000, 0, 0, 0, true, false, false, false}, // kmdNotifyProperties
38 MemoryConstants::max48BitAddress, // gpuAddressSpace
39 0, // sharedSystemMemCapabilities
40 52.083, // defaultProfilingTimerResolution
41 MemoryConstants::pageSize, // requiredPreemptionSurfaceSize
42 &isSimulationGLK, // isSimulation
43 "lp", // platformType
44 "", // deviceName
45 PreemptionMode::MidThread, // defaultPreemptionMode
46 aub_stream::ENGINE_RCS, // defaultEngineType
47 0, // maxRenderFrequency
48 30, // clVersionSupport
49 CmdServicesMemTraceVersion::DeviceValues::Glk, // aubDeviceId
50 0, // extraQuantityThreadsPerEU
51 64, // slmSize
52 sizeof(GLK::GRF), // grfSize
53 36u, // timestampValidBits
54 32u, // kernelTimestampValidBits
55 false, // blitterOperationsSupported
56 false, // ftrSupportsInteger64BitAtomics
57 true, // ftrSupportsFP64
58 true, // ftrSupports64BitMath
59 false, // ftrSvm
60 true, // ftrSupportsCoherency
61 true, // ftrSupportsVmeAvcTextureSampler
62 false, // ftrSupportsVmeAvcPreemption
63 false, // ftrRenderCompressedBuffers
64 false, // ftrRenderCompressedImages
65 false, // ftr64KBpages
66 true, // instrumentationEnabled
67 true, // sourceLevelDebuggerSupported
68 true, // supportsVme
69 false, // supportCacheFlushAfterWalker
70 true, // supportsImages
71 false, // supportsDeviceEnqueue
72 false, // supportsPipes
73 false, // supportsOcl21Features
74 false, // supportsOnDemandPageFaults
75 false, // supportsIndependentForwardProgress
76 true, // hostPtrTrackingEnabled
77 false, // levelZeroSupported
78 true, // isIntegratedDevice
79 true, // supportsMediaBlock
80 false // fusedEuEnabled
81 };
82
83 WorkaroundTable GLK::workaroundTable = {};
84 FeatureTable GLK::featureTable = {};
85
setupFeatureAndWorkaroundTable(HardwareInfo * hwInfo)86 void GLK::setupFeatureAndWorkaroundTable(HardwareInfo *hwInfo) {
87 FeatureTable *featureTable = &hwInfo->featureTable;
88 WorkaroundTable *workaroundTable = &hwInfo->workaroundTable;
89
90 featureTable->flags.ftrGpGpuMidBatchPreempt = true;
91 featureTable->flags.ftrGpGpuThreadGroupLevelPreempt = true;
92 featureTable->flags.ftrL3IACoherency = true;
93 featureTable->flags.ftrGpGpuMidThreadLevelPreempt = true;
94 featureTable->flags.ftr3dMidBatchPreempt = true;
95 featureTable->flags.ftr3dObjectLevelPreempt = true;
96 featureTable->flags.ftrPerCtxtPreemptionGranularityControl = true;
97 featureTable->flags.ftrLCIA = true;
98 featureTable->flags.ftrPPGTT = true;
99 featureTable->flags.ftrIA32eGfxPTEs = true;
100 featureTable->flags.ftrTranslationTable = true;
101 featureTable->flags.ftrUserModeTranslationTable = true;
102 featureTable->flags.ftrEnableGuC = true;
103 featureTable->flags.ftrTileMappedResource = true;
104 featureTable->flags.ftrULT = true;
105 featureTable->flags.ftrAstcHdr2D = true;
106 featureTable->flags.ftrAstcLdr2D = true;
107 featureTable->flags.ftrTileY = true;
108
109 workaroundTable->flags.waLLCCachingUnsupported = true;
110 workaroundTable->flags.waMsaa8xTileYDepthPitchAlignment = true;
111 workaroundTable->flags.waFbcLinearSurfaceStride = true;
112 workaroundTable->flags.wa4kAlignUVOffsetNV12LinearSurface = true;
113 workaroundTable->flags.waEnablePreemptionGranularityControlByUMD = true;
114 workaroundTable->flags.waSendMIFLUSHBeforeVFE = true;
115 workaroundTable->flags.waForcePcBbFullCfgRestore = true;
116 workaroundTable->flags.waReportPerfCountUseGlobalContextID = true;
117 workaroundTable->flags.waSamplerCacheFlushBetweenRedescribedSurfaceReads = true;
118 }
119
120 const HardwareInfo GLK_1x3x6::hwInfo = {
121 &GLK::platform,
122 &GLK::featureTable,
123 &GLK::workaroundTable,
124 &GLK_1x3x6::gtSystemInfo,
125 GLK::capabilityTable,
126 };
127
128 GT_SYSTEM_INFO GLK_1x3x6::gtSystemInfo = {0};
setupHardwareInfo(HardwareInfo * hwInfo,bool setupFeatureTableAndWorkaroundTable)129 void GLK_1x3x6::setupHardwareInfo(HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
130 GT_SYSTEM_INFO *gtSysInfo = &hwInfo->gtSystemInfo;
131 gtSysInfo->ThreadCount = gtSysInfo->EUCount * GLK::threadsPerEu;
132 gtSysInfo->SliceCount = 1;
133 gtSysInfo->L3CacheSizeInKb = 384;
134 gtSysInfo->L3BankCount = 2;
135 gtSysInfo->MaxFillRate = 8;
136 gtSysInfo->TotalVsThreads = 112;
137 gtSysInfo->TotalHsThreads = 112;
138 gtSysInfo->TotalDsThreads = 112;
139 gtSysInfo->TotalGsThreads = 112;
140 gtSysInfo->TotalPsThreadsWindowerRange = 64;
141 gtSysInfo->CsrSizeInMb = 8;
142 gtSysInfo->MaxEuPerSubSlice = GLK::maxEuPerSubslice;
143 gtSysInfo->MaxSlicesSupported = GLK::maxSlicesSupported;
144 gtSysInfo->MaxSubSlicesSupported = GLK::maxSubslicesSupported;
145 gtSysInfo->IsL3HashModeEnabled = false;
146 gtSysInfo->IsDynamicallyPopulated = false;
147 if (setupFeatureTableAndWorkaroundTable) {
148 setupFeatureAndWorkaroundTable(hwInfo);
149 }
150 };
151
152 const HardwareInfo GLK_1x2x6::hwInfo = {
153 &GLK::platform,
154 &GLK::featureTable,
155 &GLK::workaroundTable,
156 &GLK_1x2x6::gtSystemInfo,
157 GLK::capabilityTable,
158 };
159 GT_SYSTEM_INFO GLK_1x2x6::gtSystemInfo = {0};
setupHardwareInfo(HardwareInfo * hwInfo,bool setupFeatureTableAndWorkaroundTable)160 void GLK_1x2x6::setupHardwareInfo(HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable) {
161 GT_SYSTEM_INFO *gtSysInfo = &hwInfo->gtSystemInfo;
162 gtSysInfo->ThreadCount = gtSysInfo->EUCount * GLK::threadsPerEu;
163 gtSysInfo->SliceCount = 1;
164 gtSysInfo->L3CacheSizeInKb = 384;
165 gtSysInfo->L3BankCount = 2;
166 gtSysInfo->MaxFillRate = 8;
167 gtSysInfo->TotalVsThreads = 112;
168 gtSysInfo->TotalHsThreads = 112;
169 gtSysInfo->TotalDsThreads = 112;
170 gtSysInfo->TotalGsThreads = 112;
171 gtSysInfo->TotalPsThreadsWindowerRange = 64;
172 gtSysInfo->CsrSizeInMb = 8;
173 gtSysInfo->MaxEuPerSubSlice = GLK::maxEuPerSubslice;
174 gtSysInfo->MaxSlicesSupported = GLK::maxSlicesSupported;
175 gtSysInfo->MaxSubSlicesSupported = GLK::maxSubslicesSupported;
176 gtSysInfo->IsL3HashModeEnabled = false;
177 gtSysInfo->IsDynamicallyPopulated = false;
178 if (setupFeatureTableAndWorkaroundTable) {
179 setupFeatureAndWorkaroundTable(hwInfo);
180 }
181 };
182
183 const HardwareInfo GLK::hwInfo = GLK_1x3x6::hwInfo;
184 const uint64_t GLK::defaultHardwareInfoConfig = 0x100030006;
185
setupGLKHardwareInfoImpl(HardwareInfo * hwInfo,bool setupFeatureTableAndWorkaroundTable,uint64_t hwInfoConfig)186 void setupGLKHardwareInfoImpl(HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable, uint64_t hwInfoConfig) {
187 if (hwInfoConfig == 0x100020006) {
188 GLK_1x2x6::setupHardwareInfo(hwInfo, setupFeatureTableAndWorkaroundTable);
189 } else if (hwInfoConfig == 0x100030006) {
190 GLK_1x3x6::setupHardwareInfo(hwInfo, setupFeatureTableAndWorkaroundTable);
191 } else if (hwInfoConfig == 0x0) {
192 // Default config
193 GLK_1x3x6::setupHardwareInfo(hwInfo, setupFeatureTableAndWorkaroundTable);
194 } else {
195 UNRECOVERABLE_IF(true);
196 }
197 }
198
199 void (*GLK::setupHardwareInfo)(HardwareInfo *, bool, uint64_t) = setupGLKHardwareInfoImpl;
200 } // namespace NEO
201