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