xref: /aosp_15_r20/external/intel-media-driver/media_driver/linux/gen9/ddi/media_sysinfo_g9.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2017, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     media_sysinfo_g9.cpp
24 //!
25 
26 #include "igfxfmid.h"
27 #include "linux_system_info.h"
28 #include "skuwa_factory.h"
29 #include "linux_skuwa_debug.h"
30 #include "linux_media_skuwa.h"
31 #include "linux_shadow_skuwa.h"
32 
33 //extern template class DeviceInfoFactory<GfxDeviceInfo>;
34 typedef DeviceInfoFactory<GfxDeviceInfo> base_fact;
35 
36 #define GEN9_THREADS_PER_EU      7
37 #define GEN9_LCIA_THREADS_PER_EU 6
InitGen9MediaSysInfo(struct GfxDeviceInfo * devInfo,MEDIA_GT_SYSTEM_INFO * sysInfo)38 static bool InitGen9MediaSysInfo(struct GfxDeviceInfo *devInfo, MEDIA_GT_SYSTEM_INFO *sysInfo)
39 {
40     if ((devInfo == nullptr) || (sysInfo == nullptr))
41     {
42         DEVINFO_ERROR("null ptr is passed\n");
43         return false;
44     }
45 
46     if (!sysInfo->SliceCount)
47     {
48         sysInfo->SliceCount    = devInfo->SliceCount;
49     }
50 
51     if (!sysInfo->SubSliceCount)
52     {
53         sysInfo->SubSliceCount = devInfo->SubSliceCount;
54     }
55 
56     if (!sysInfo->EUCount)
57     {
58         sysInfo->EUCount       = devInfo->EUCount;
59     }
60 
61     sysInfo->L3CacheSizeInKb = devInfo->L3CacheSizeInKb;
62     sysInfo->L3BankCount     = devInfo->L3BankCount;
63     sysInfo->VDBoxInfo.Instances.Bits.VDBox0Enabled = 1;
64     sysInfo->VEBoxInfo.Instances.Bits.VEBox0Enabled = 1;
65     sysInfo->MaxEuPerSubSlice = devInfo->MaxEuPerSubSlice;
66     sysInfo->MaxSlicesSupported = sysInfo->SliceCount;
67     sysInfo->MaxSubSlicesSupported = sysInfo->SubSliceCount;
68 
69     sysInfo->VEBoxInfo.NumberOfVEBoxEnabled = 1;
70     sysInfo->VDBoxInfo.NumberOfVDBoxEnabled = 1;
71     if ((devInfo->eGTType == GTTYPE_GT3) ||
72         (devInfo->eGTType == GTTYPE_GT4))
73     {
74         sysInfo->VDBoxInfo.Instances.Bits.VDBox1Enabled = 1;
75         sysInfo->VEBoxInfo.Instances.Bits.VEBox1Enabled = 1;
76         sysInfo->VEBoxInfo.NumberOfVEBoxEnabled++;
77         sysInfo->VDBoxInfo.NumberOfVDBoxEnabled++;
78     }
79 
80     sysInfo->ThreadCount = sysInfo->EUCount * GEN9_THREADS_PER_EU;
81 
82     sysInfo->VEBoxInfo.IsValid = true;
83     sysInfo->VDBoxInfo.IsValid = true;
84 
85     /* the GMM doesn't care the real size of ERAM/LLC. Instead it is used to
86      * indicate whether the LLC/ERAM exists
87      */
88     if (devInfo->hasERAM)
89     {
90         // 64M
91         sysInfo->EdramSizeInKb = 64 * 1024;
92     }
93     if (devInfo->hasLLC)
94     {
95         // 2M
96         sysInfo->LLCCacheSizeInKb = 2 * 1024;
97     }
98 
99     if ((devInfo->eGTType == GTTYPE_GT4) && devInfo->hasERAM)
100     {
101         // 128M on GT4e
102         sysInfo->EdramSizeInKb = 128 * 1024;
103     }
104 
105     return true;
106 }
107 
InitGen9ShadowSku(struct GfxDeviceInfo * devInfo,SHADOW_MEDIA_FEATURE_TABLE * skuTable,struct LinuxDriverInfo * drvInfo)108 static bool InitGen9ShadowSku(struct GfxDeviceInfo *devInfo,
109                              SHADOW_MEDIA_FEATURE_TABLE *skuTable,
110                              struct LinuxDriverInfo *drvInfo)
111 {
112     if ((devInfo == nullptr) || (skuTable == nullptr) || (drvInfo == nullptr))
113     {
114         DEVINFO_ERROR("null ptr is passed\n");
115         return false;
116     }
117 
118     skuTable->FtrVERing = 0;
119     if (drvInfo->hasVebox)
120     {
121        skuTable->FtrVERing = 1;
122     }
123 
124     skuTable->FtrVcs2 = 0;
125     if (((devInfo->eGTType == GTTYPE_GT3) || (devInfo->eGTType == GTTYPE_GT4)) &&
126         drvInfo->hasBsd2)
127     {
128         skuTable->FtrVcs2 = 1;
129     }
130 
131     skuTable->FtrULT = 0;
132 
133     skuTable->FtrPPGTT = 1;
134     skuTable->FtrIA32eGfxPTEs = 1;
135 
136     skuTable->FtrDisplayYTiling = 1;
137     skuTable->FtrEDram = devInfo->hasERAM;
138 
139     return true;
140 }
141 
InitGen9ShadowWa(struct GfxDeviceInfo * devInfo,SHADOW_MEDIA_WA_TABLE * waTable,struct LinuxDriverInfo * drvInfo)142 static bool InitGen9ShadowWa(struct GfxDeviceInfo *devInfo,
143                              SHADOW_MEDIA_WA_TABLE *waTable,
144                              struct LinuxDriverInfo *drvInfo)
145 {
146     if ((devInfo == nullptr) || (waTable == nullptr) || (drvInfo == nullptr))
147     {
148         DEVINFO_ERROR("null ptr is passed\n");
149         return false;
150     }
151 
152     /* by default PPGTT is enabled */
153     waTable->WaForceGlobalGTT = 0;
154     if (drvInfo->hasPpgtt == 0)
155     {
156         waTable->WaForceGlobalGTT = 1;
157     }
158 
159     waTable->WaDisregardPlatformChecks          = 1;
160     waTable->WaLosslessCompressionSurfaceStride = 1;
161     waTable->WaFbcLinearSurfaceStride           = 1;
162     waTable->Wa4kAlignUVOffsetNV12LinearSurface = 1;
163 
164     if (devInfo->productFamily == IGFX_SKYLAKE)
165     {
166         waTable->WaEncryptedEdramOnlyPartials = 1;
167         waTable->WaDisableEdramForDisplayRT   = 1;
168     }
169     else
170     if (devInfo->productFamily == IGFX_COFFEELAKE)
171     {
172         waTable->WaEncryptedEdramOnlyPartials = 1;
173     }
174 
175     return true;
176 }
177 
InitLCIAMediaSysInfo(struct GfxDeviceInfo * devInfo,MEDIA_GT_SYSTEM_INFO * sysInfo)178 static bool InitLCIAMediaSysInfo(struct GfxDeviceInfo *devInfo, MEDIA_GT_SYSTEM_INFO *sysInfo)
179 {
180     if ((devInfo == nullptr) || (sysInfo == nullptr))
181     {
182         DEVINFO_ERROR("null ptr is passed\n");
183         return false;
184     }
185 
186     if (!sysInfo->SliceCount)
187     {
188         sysInfo->SliceCount    = devInfo->SliceCount;
189     }
190 
191     if (!sysInfo->SubSliceCount)
192     {
193         sysInfo->SubSliceCount = devInfo->SubSliceCount;
194     }
195 
196     if (!sysInfo->EUCount)
197     {
198         sysInfo->EUCount       = devInfo->EUCount;
199     }
200 
201     sysInfo->L3CacheSizeInKb = devInfo->L3CacheSizeInKb;
202     sysInfo->L3BankCount     = devInfo->L3BankCount;
203     sysInfo->VDBoxInfo.Instances.Bits.VDBox0Enabled = 1;
204     sysInfo->VEBoxInfo.Instances.Bits.VEBox0Enabled = 1;
205     sysInfo->MaxEuPerSubSlice = devInfo->MaxEuPerSubSlice;
206     sysInfo->MaxSlicesSupported = sysInfo->SliceCount;
207     sysInfo->MaxSubSlicesSupported = sysInfo->SubSliceCount;
208 
209     sysInfo->VEBoxInfo.NumberOfVEBoxEnabled = 1;
210     sysInfo->VDBoxInfo.NumberOfVDBoxEnabled = 1;
211 
212     sysInfo->ThreadCount = sysInfo->EUCount * GEN9_LCIA_THREADS_PER_EU;
213 
214     sysInfo->VEBoxInfo.IsValid = true;
215     sysInfo->VDBoxInfo.IsValid = true;
216 
217     sysInfo->EdramSizeInKb    = 0;
218     sysInfo->LLCCacheSizeInKb = 0;
219 
220     return true;
221 }
222 
InitLCIAShadowSku(struct GfxDeviceInfo * devInfo,SHADOW_MEDIA_FEATURE_TABLE * skuTable,struct LinuxDriverInfo * drvInfo)223 static bool InitLCIAShadowSku(struct GfxDeviceInfo *devInfo,
224                              SHADOW_MEDIA_FEATURE_TABLE *skuTable,
225                              struct LinuxDriverInfo *drvInfo)
226 {
227     if ((devInfo == nullptr) || (skuTable == nullptr) || (drvInfo == nullptr))
228     {
229         DEVINFO_ERROR("null ptr is passed\n");
230         return false;
231     }
232 
233     skuTable->FtrVERing = 0;
234     if (drvInfo->hasVebox)
235     {
236        skuTable->FtrVERing = 1;
237     }
238 
239     skuTable->FtrVcs2 = 0;
240     skuTable->FtrULT = 1;
241     skuTable->FtrPPGTT = 1;
242     skuTable->FtrIA32eGfxPTEs = 1;
243 
244     skuTable->FtrDisplayYTiling = 1;
245     skuTable->FtrEDram = 0;
246     skuTable->FtrLCIA  = 1;
247 
248     skuTable->FtrTileY = 1;
249 
250     return true;
251 }
252 
InitLCIAShadowWa(struct GfxDeviceInfo * devInfo,SHADOW_MEDIA_WA_TABLE * waTable,struct LinuxDriverInfo * drvInfo)253 static bool InitLCIAShadowWa(struct GfxDeviceInfo *devInfo,
254                              SHADOW_MEDIA_WA_TABLE *waTable,
255                              struct LinuxDriverInfo *drvInfo)
256 {
257     if ((devInfo == nullptr) || (waTable == nullptr) || (drvInfo == nullptr))
258     {
259         DEVINFO_ERROR("null ptr is passed\n");
260         return false;
261     }
262 
263     /* by default PPGTT is enabled */
264     waTable->WaForceGlobalGTT = 0;
265     if (drvInfo->hasPpgtt == 0)
266     {
267         waTable->WaForceGlobalGTT = 1;
268     }
269 
270     waTable->WaDisregardPlatformChecks          = 1;
271     waTable->WaFbcLinearSurfaceStride           = 1;
272     waTable->Wa4kAlignUVOffsetNV12LinearSurface = 1;
273     waTable->WaLLCCachingUnsupported            = 1;
274 
275     return true;
276 }
277 
278 static struct GfxDeviceInfo sklGt1Info = {
279     .platformType  = PLATFORM_MOBILE,
280     .productFamily = IGFX_SKYLAKE,
281     .displayFamily = IGFX_GEN9_CORE,
282     .renderFamily  = IGFX_GEN9_CORE,
283     .mediaFamily   = IGFX_UNKNOWN_CORE,
284     .eGTType       = GTTYPE_GT1,
285     .L3CacheSizeInKb = 384,
286     .L3BankCount   = 2,
287     .EUCount       = 12,
288     .SliceCount    = 1,
289     .SubSliceCount = 2,
290     .MaxEuPerSubSlice = 6,
291     .isLCIA        = 0,
292     .hasLLC        = 1,
293     .hasERAM       = 0,
294     .InitMediaSysInfo = InitGen9MediaSysInfo,
295     .InitShadowSku    = InitGen9ShadowSku,
296     .InitShadowWa     = InitGen9ShadowWa,
297 };
298 
299 static struct GfxDeviceInfo sklGt1f5Info = {
300     .platformType  = PLATFORM_MOBILE,
301     .productFamily = IGFX_SKYLAKE,
302     .displayFamily = IGFX_GEN9_CORE,
303     .renderFamily  = IGFX_GEN9_CORE,
304     .mediaFamily   = IGFX_UNKNOWN_CORE,
305     .eGTType       = GTTYPE_GT1_5,
306     .L3CacheSizeInKb = 768,
307     .L3BankCount   = 4,
308     .EUCount       = 18,
309     .SliceCount    = 1,
310     .SubSliceCount = 3,
311     .MaxEuPerSubSlice = 6,
312     .isLCIA        = 0,
313     .hasLLC        = 1,
314     .hasERAM       = 0,
315     .InitMediaSysInfo = InitGen9MediaSysInfo,
316     .InitShadowSku    = InitGen9ShadowSku,
317     .InitShadowWa     = InitGen9ShadowWa,
318 };
319 
320 static struct GfxDeviceInfo sklGt2Info = {
321     .platformType  = PLATFORM_MOBILE,
322     .productFamily = IGFX_SKYLAKE,
323     .displayFamily = IGFX_GEN9_CORE,
324     .renderFamily  = IGFX_GEN9_CORE,
325     .mediaFamily   = IGFX_UNKNOWN_CORE,
326     .eGTType       = GTTYPE_GT2,
327     .L3CacheSizeInKb = 768,
328     .L3BankCount   = 4,
329     .EUCount       = 24,
330     .SliceCount    = 1,
331     .SubSliceCount = 3,
332     .MaxEuPerSubSlice = 8,
333     .isLCIA        = 0,
334     .hasLLC        = 1,
335     .hasERAM       = 0,
336     .InitMediaSysInfo = InitGen9MediaSysInfo,
337     .InitShadowSku    = InitGen9ShadowSku,
338     .InitShadowWa     = InitGen9ShadowWa,
339 };
340 
341 static struct GfxDeviceInfo sklGt3Info = {
342     .platformType  = PLATFORM_MOBILE,
343     .productFamily = IGFX_SKYLAKE,
344     .displayFamily = IGFX_GEN9_CORE,
345     .renderFamily  = IGFX_GEN9_CORE,
346     .mediaFamily   = IGFX_UNKNOWN_CORE,
347     .eGTType       = GTTYPE_GT3,
348     .L3CacheSizeInKb = 1536,
349     .L3BankCount   = 8,
350     .EUCount       = 48,
351     .SliceCount    = 2,
352     .SubSliceCount = 6,
353     .MaxEuPerSubSlice = 8,
354     .isLCIA        = 0,
355     .hasLLC        = 1,
356     .hasERAM       = 0,
357     .InitMediaSysInfo = InitGen9MediaSysInfo,
358     .InitShadowSku    = InitGen9ShadowSku,
359     .InitShadowWa     = InitGen9ShadowWa,
360 };
361 
362 static struct GfxDeviceInfo sklGt3eInfo = {
363     .platformType  = PLATFORM_MOBILE,
364     .productFamily = IGFX_SKYLAKE,
365     .displayFamily = IGFX_GEN9_CORE,
366     .renderFamily  = IGFX_GEN9_CORE,
367     .mediaFamily   = IGFX_UNKNOWN_CORE,
368     .eGTType       = GTTYPE_GT3,
369     .L3CacheSizeInKb = 1536,
370     .L3BankCount   = 8,
371     .EUCount       = 48,
372     .SliceCount    = 2,
373     .SubSliceCount = 6,
374     .MaxEuPerSubSlice = 8,
375     .isLCIA        = 0,
376     .hasLLC        = 1,
377     .hasERAM       = 1,
378     .InitMediaSysInfo = InitGen9MediaSysInfo,
379     .InitShadowSku    = InitGen9ShadowSku,
380     .InitShadowWa     = InitGen9ShadowWa,
381 };
382 
383 static struct GfxDeviceInfo sklGt4Info = {
384     .platformType  = PLATFORM_MOBILE,
385     .productFamily = IGFX_SKYLAKE,
386     .displayFamily = IGFX_GEN9_CORE,
387     .renderFamily  = IGFX_GEN9_CORE,
388     .mediaFamily   = IGFX_UNKNOWN_CORE,
389     .eGTType       = GTTYPE_GT4,
390     .L3CacheSizeInKb = 2304,
391     .L3BankCount   = 12,
392     .EUCount       = 72,
393     .SliceCount    = 3,
394     .SubSliceCount = 9,
395     .MaxEuPerSubSlice = 8,
396     .isLCIA        = 0,
397     .hasLLC        = 1,
398     .hasERAM       = 0,
399     .InitMediaSysInfo = InitGen9MediaSysInfo,
400     .InitShadowSku    = InitGen9ShadowSku,
401     .InitShadowWa     = InitGen9ShadowWa,
402 };
403 
404 static struct GfxDeviceInfo sklGt4eInfo = {
405     .platformType  = PLATFORM_MOBILE,
406     .productFamily = IGFX_SKYLAKE,
407     .displayFamily = IGFX_GEN9_CORE,
408     .renderFamily  = IGFX_GEN9_CORE,
409     .mediaFamily   = IGFX_UNKNOWN_CORE,
410     .eGTType       = GTTYPE_GT4,
411     .L3CacheSizeInKb = 2304,
412     .L3BankCount   = 12,
413     .EUCount       = 72,
414     .SliceCount    = 3,
415     .SubSliceCount = 9,
416     .MaxEuPerSubSlice = 8,
417     .isLCIA        = 0,
418     .hasLLC        = 1,
419     .hasERAM       = 1,
420     .InitMediaSysInfo = InitGen9MediaSysInfo,
421     .InitShadowSku    = InitGen9ShadowSku,
422     .InitShadowWa     = InitGen9ShadowWa,
423 };
424 
425 static struct GfxDeviceInfo bxtGt1Info = {
426     .platformType  = PLATFORM_MOBILE,
427     .productFamily = IGFX_BROXTON,
428     .displayFamily = IGFX_GEN9_CORE,
429     .renderFamily  = IGFX_GEN9_CORE,
430     .mediaFamily   = IGFX_UNKNOWN_CORE,
431     .eGTType       = GTTYPE_GT1,
432     .L3CacheSizeInKb = 384,
433     .L3BankCount   = 2,
434     .EUCount       = 12,
435     .SliceCount    = 1,
436     .SubSliceCount = 2,
437     .MaxEuPerSubSlice = 6,
438     .isLCIA        = 1,
439     .hasLLC        = 0,
440     .hasERAM       = 0,
441     .InitMediaSysInfo = InitLCIAMediaSysInfo,
442     .InitShadowSku    = InitLCIAShadowSku,
443     .InitShadowWa     = InitLCIAShadowWa,
444 };
445 
446 static struct GfxDeviceInfo bxtGt1f5Info = {
447     .platformType  = PLATFORM_MOBILE,
448     .productFamily = IGFX_BROXTON,
449     .displayFamily = IGFX_GEN9_CORE,
450     .renderFamily  = IGFX_GEN9_CORE,
451     .mediaFamily   = IGFX_UNKNOWN_CORE,
452     .eGTType       = GTTYPE_GT1_5,
453     .L3CacheSizeInKb = 384,
454     .L3BankCount   = 2,
455     .EUCount       = 18,
456     .SliceCount    = 1,
457     .SubSliceCount = 3,
458     .MaxEuPerSubSlice = 6,
459     .isLCIA        = 1,
460     .hasLLC        = 0,
461     .hasERAM       = 0,
462     .InitMediaSysInfo = InitLCIAMediaSysInfo,
463     .InitShadowSku    = InitLCIAShadowSku,
464     .InitShadowWa     = InitLCIAShadowWa,
465 };
466 
467 static struct GfxDeviceInfo glkGt1Info = {
468     .platformType  = PLATFORM_MOBILE,
469     .productFamily = IGFX_GEMINILAKE,
470     .displayFamily = IGFX_GEN9_CORE,
471     .renderFamily  = IGFX_GEN9_CORE,
472     .mediaFamily   = IGFX_UNKNOWN_CORE,
473     .eGTType       = GTTYPE_GT1,
474     .L3CacheSizeInKb = 384,
475     .L3BankCount   = 2,
476     .EUCount       = 12,
477     .SliceCount    = 1,
478     .SubSliceCount = 2,
479     .MaxEuPerSubSlice = 6,
480     .isLCIA        = 1,
481     .hasLLC        = 0,
482     .hasERAM       = 0,
483     .InitMediaSysInfo = InitLCIAMediaSysInfo,
484     .InitShadowSku    = InitLCIAShadowSku,
485     .InitShadowWa     = InitLCIAShadowWa,
486 };
487 
488 static struct GfxDeviceInfo glkGt1f5Info = {
489     .platformType  = PLATFORM_MOBILE,
490     .productFamily = IGFX_GEMINILAKE,
491     .displayFamily = IGFX_GEN9_CORE,
492     .renderFamily  = IGFX_GEN9_CORE,
493     .mediaFamily   = IGFX_UNKNOWN_CORE,
494     .eGTType       = GTTYPE_GT1,
495     .L3CacheSizeInKb = 384,
496     .L3BankCount   = 2,
497     .EUCount       = 18,
498     .SliceCount    = 1,
499     .SubSliceCount = 3,
500     .MaxEuPerSubSlice = 6,
501     .isLCIA        = 1,
502     .hasLLC        = 0,
503     .hasERAM       = 0,
504     .InitMediaSysInfo = InitLCIAMediaSysInfo,
505     .InitShadowSku    = InitLCIAShadowSku,
506     .InitShadowWa     = InitLCIAShadowWa,
507 };
508 
509 static struct GfxDeviceInfo kblGt1Info = {
510     .platformType  = PLATFORM_MOBILE,
511     .productFamily = IGFX_KABYLAKE,
512     .displayFamily = IGFX_GEN9_CORE,
513     .renderFamily  = IGFX_GEN9_CORE,
514     .mediaFamily   = IGFX_UNKNOWN_CORE,
515     .eGTType       = GTTYPE_GT1_5,
516     .L3CacheSizeInKb = 384,
517     .L3BankCount   = 2,
518     .EUCount       = 12,
519     .SliceCount    = 1,
520     .SubSliceCount = 2,
521     .MaxEuPerSubSlice = 6,
522     .isLCIA        = 0,
523     .hasLLC        = 1,
524     .hasERAM       = 0,
525     .InitMediaSysInfo = InitGen9MediaSysInfo,
526     .InitShadowSku    = InitGen9ShadowSku,
527     .InitShadowWa     = InitGen9ShadowWa,
528 };
529 
530 static struct GfxDeviceInfo kblGt1f5Info = {
531     .platformType  = PLATFORM_MOBILE,
532     .productFamily = IGFX_KABYLAKE,
533     .displayFamily = IGFX_GEN9_CORE,
534     .renderFamily  = IGFX_GEN9_CORE,
535     .mediaFamily   = IGFX_UNKNOWN_CORE,
536     .eGTType       = GTTYPE_GT1_5,
537     .L3CacheSizeInKb = 768,
538     .L3BankCount   = 4,
539     .EUCount       = 18,
540     .SliceCount    = 1,
541     .SubSliceCount = 3,
542     .MaxEuPerSubSlice = 6,
543     .isLCIA        = 0,
544     .hasLLC        = 1,
545     .hasERAM       = 0,
546     .InitMediaSysInfo = InitGen9MediaSysInfo,
547     .InitShadowSku    = InitGen9ShadowSku,
548     .InitShadowWa     = InitGen9ShadowWa,
549 };
550 
551 static struct GfxDeviceInfo kblGt2Info = {
552     .platformType  = PLATFORM_MOBILE,
553     .productFamily = IGFX_KABYLAKE,
554     .displayFamily = IGFX_GEN9_CORE,
555     .renderFamily  = IGFX_GEN9_CORE,
556     .mediaFamily   = IGFX_UNKNOWN_CORE,
557     .eGTType       = GTTYPE_GT2,
558     .L3CacheSizeInKb = 768,
559     .L3BankCount   = 4,
560     .EUCount       = 24,
561     .SliceCount    = 1,
562     .SubSliceCount = 3,
563     .MaxEuPerSubSlice = 8,
564     .isLCIA        = 0,
565     .hasLLC        = 1,
566     .hasERAM       = 0,
567     .InitMediaSysInfo = InitGen9MediaSysInfo,
568     .InitShadowSku    = InitGen9ShadowSku,
569     .InitShadowWa     = InitGen9ShadowWa,
570 };
571 
572 static struct GfxDeviceInfo kblGt3Info = {
573     .platformType  = PLATFORM_MOBILE,
574     .productFamily = IGFX_KABYLAKE,
575     .displayFamily = IGFX_GEN9_CORE,
576     .renderFamily  = IGFX_GEN9_CORE,
577     .mediaFamily   = IGFX_UNKNOWN_CORE,
578     .eGTType       = GTTYPE_GT3,
579     .L3CacheSizeInKb = 1536,
580     .L3BankCount   = 8,
581     .EUCount       = 48,
582     .SliceCount    = 2,
583     .SubSliceCount = 6,
584     .MaxEuPerSubSlice = 8,
585     .isLCIA        = 0,
586     .hasLLC        = 1,
587     .hasERAM       = 0,
588     .InitMediaSysInfo = InitGen9MediaSysInfo,
589     .InitShadowSku    = InitGen9ShadowSku,
590     .InitShadowWa     = InitGen9ShadowWa,
591 };
592 
593 static struct GfxDeviceInfo kblGt3eInfo = {
594     .platformType  = PLATFORM_MOBILE,
595     .productFamily = IGFX_KABYLAKE,
596     .displayFamily = IGFX_GEN9_CORE,
597     .renderFamily  = IGFX_GEN9_CORE,
598     .mediaFamily   = IGFX_UNKNOWN_CORE,
599     .eGTType       = GTTYPE_GT3,
600     .L3CacheSizeInKb = 1536,
601     .L3BankCount   = 8,
602     .EUCount       = 48,
603     .SliceCount    = 2,
604     .SubSliceCount = 6,
605     .MaxEuPerSubSlice = 8,
606     .isLCIA        = 0,
607     .hasLLC        = 1,
608     .hasERAM       = 1,
609     .InitMediaSysInfo = InitGen9MediaSysInfo,
610     .InitShadowSku    = InitGen9ShadowSku,
611     .InitShadowWa     = InitGen9ShadowWa,
612 };
613 
614 static struct GfxDeviceInfo cflGt1Info = {
615     .platformType  = PLATFORM_MOBILE,
616     .productFamily = IGFX_COFFEELAKE,
617     .displayFamily = IGFX_GEN9_CORE,
618     .renderFamily  = IGFX_GEN9_CORE,
619     .mediaFamily   = IGFX_UNKNOWN_CORE,
620     .eGTType       = GTTYPE_GT1,
621     .L3CacheSizeInKb = 384,
622     .L3BankCount   = 2,
623     .EUCount       = 12,
624     .SliceCount    = 1,
625     .SubSliceCount = 2,
626     .MaxEuPerSubSlice = 6,
627     .isLCIA        = 0,
628     .hasLLC        = 1,
629     .hasERAM       = 0,
630     .InitMediaSysInfo = InitGen9MediaSysInfo,
631     .InitShadowSku    = InitGen9ShadowSku,
632     .InitShadowWa     = InitGen9ShadowWa,
633 };
634 
635 static struct GfxDeviceInfo cflGt2Info = {
636     .platformType  = PLATFORM_MOBILE,
637     .productFamily = IGFX_COFFEELAKE,
638     .displayFamily = IGFX_GEN9_CORE,
639     .renderFamily  = IGFX_GEN9_CORE,
640     .mediaFamily   = IGFX_UNKNOWN_CORE,
641     .eGTType       = GTTYPE_GT2,
642     .L3CacheSizeInKb = 768,
643     .L3BankCount   = 4,
644     .EUCount       = 24,
645     .SliceCount    = 1,
646     .SubSliceCount = 3,
647     .MaxEuPerSubSlice = 8,
648     .isLCIA        = 0,
649     .hasLLC        = 1,
650     .hasERAM       = 0,
651     .InitMediaSysInfo = InitGen9MediaSysInfo,
652     .InitShadowSku    = InitGen9ShadowSku,
653     .InitShadowWa     = InitGen9ShadowWa,
654 };
655 
656 static struct GfxDeviceInfo cflGt3Info = {
657     .platformType  = PLATFORM_MOBILE,
658     .productFamily = IGFX_COFFEELAKE,
659     .displayFamily = IGFX_GEN9_CORE,
660     .renderFamily  = IGFX_GEN9_CORE,
661     .mediaFamily   = IGFX_UNKNOWN_CORE,
662     .eGTType       = GTTYPE_GT3,
663     .L3CacheSizeInKb = 1536,
664     .L3BankCount   = 8,
665     .EUCount       = 48,
666     .SliceCount    = 2,
667     .SubSliceCount = 6,
668     .MaxEuPerSubSlice = 8,
669     .isLCIA        = 0,
670     .hasLLC        = 1,
671     .hasERAM       = 0,
672     .InitMediaSysInfo = InitGen9MediaSysInfo,
673     .InitShadowSku    = InitGen9ShadowSku,
674     .InitShadowWa     = InitGen9ShadowWa,
675 };
676 
677 static struct GfxDeviceInfo cflGt3eInfo = {
678     .platformType  = PLATFORM_MOBILE,
679     .productFamily = IGFX_COFFEELAKE,
680     .displayFamily = IGFX_GEN9_CORE,
681     .renderFamily  = IGFX_GEN9_CORE,
682     .mediaFamily   = IGFX_UNKNOWN_CORE,
683     .eGTType       = GTTYPE_GT3,
684     .L3CacheSizeInKb = 1536,
685     .L3BankCount   = 8,
686     .EUCount       = 48,
687     .SliceCount    = 2,
688     .SubSliceCount = 6,
689     .MaxEuPerSubSlice = 8,
690     .isLCIA        = 0,
691     .hasLLC        = 1,
692     .hasERAM       = 1,
693     .InitMediaSysInfo = InitGen9MediaSysInfo,
694     .InitShadowSku    = InitGen9ShadowSku,
695     .InitShadowWa     = InitGen9ShadowWa,
696 };
697 
698 static bool sklDevice1902 = DeviceInfoFactory<GfxDeviceInfo>::
699     RegisterDevice(0x1902, &sklGt1Info);
700 
701 static bool sklDevice1906 = DeviceInfoFactory<GfxDeviceInfo>::
702     RegisterDevice(0x1906, &sklGt1Info);
703 
704 static bool sklDevice190a = DeviceInfoFactory<GfxDeviceInfo>::
705     RegisterDevice(0x190a, &sklGt1Info);
706 
707 static bool sklDevice190b = DeviceInfoFactory<GfxDeviceInfo>::
708     RegisterDevice(0x190b, &sklGt1Info);
709 
710 static bool sklDevice190e = DeviceInfoFactory<GfxDeviceInfo>::
711     RegisterDevice(0x190e, &sklGt1Info);
712 
713 static bool sklDevice1913 = DeviceInfoFactory<GfxDeviceInfo>::
714     RegisterDevice(0x1913, &sklGt1f5Info);
715 
716 static bool sklDevice1915 = DeviceInfoFactory<GfxDeviceInfo>::
717     RegisterDevice(0x1915, &sklGt1f5Info);
718 
719 static bool sklDevice1917 = DeviceInfoFactory<GfxDeviceInfo>::
720     RegisterDevice(0x1917, &sklGt1f5Info);
721 
722 static bool sklDevice1912 = DeviceInfoFactory<GfxDeviceInfo>::
723     RegisterDevice(0x1912, &sklGt2Info);
724 
725 static bool sklDevice1916 = DeviceInfoFactory<GfxDeviceInfo>::
726     RegisterDevice(0x1916, &sklGt2Info);
727 
728 static bool sklDevice191a = DeviceInfoFactory<GfxDeviceInfo>::
729     RegisterDevice(0x191a, &sklGt2Info);
730 
731 static bool sklDevice191b = DeviceInfoFactory<GfxDeviceInfo>::
732     RegisterDevice(0x191b, &sklGt2Info);
733 
734 static bool sklDevice191d = DeviceInfoFactory<GfxDeviceInfo>::
735     RegisterDevice(0x191d, &sklGt2Info);
736 
737 static bool sklDevice191e = DeviceInfoFactory<GfxDeviceInfo>::
738     RegisterDevice(0x191e, &sklGt2Info);
739 
740 static bool sklDevice1921 = DeviceInfoFactory<GfxDeviceInfo>::
741     RegisterDevice(0x1921, &sklGt2Info);
742 
743 static bool sklDevice1923 = DeviceInfoFactory<GfxDeviceInfo>::
744     RegisterDevice(0x1923, &sklGt3Info);
745 
746 static bool sklDevice192b = DeviceInfoFactory<GfxDeviceInfo>::
747     RegisterDevice(0x192b, &sklGt3eInfo);
748 
749 static bool sklDevice1926 = DeviceInfoFactory<GfxDeviceInfo>::
750     RegisterDevice(0x1926, &sklGt3eInfo);
751 
752 static bool sklDevice1927 = DeviceInfoFactory<GfxDeviceInfo>::
753     RegisterDevice(0x1927, &sklGt3eInfo);
754 
755 static bool sklDevice192d = DeviceInfoFactory<GfxDeviceInfo>::
756     RegisterDevice(0x192d, &sklGt3eInfo);
757 
758 /* GT4 */
759 static bool sklDevice192a = DeviceInfoFactory<GfxDeviceInfo>::
760     RegisterDevice(0x192a, &sklGt4Info);
761 
762 static bool sklDevice1932 = DeviceInfoFactory<GfxDeviceInfo>::
763     RegisterDevice(0x1932, &sklGt4Info);
764 
765 static bool sklDevice193a = DeviceInfoFactory<GfxDeviceInfo>::
766     RegisterDevice(0x193a, &sklGt4eInfo);
767 
768 static bool sklDevice193b = DeviceInfoFactory<GfxDeviceInfo>::
769     RegisterDevice(0x193b, &sklGt4eInfo);
770 
771 static bool sklDevice193d = DeviceInfoFactory<GfxDeviceInfo>::
772     RegisterDevice(0x193d, &sklGt4eInfo);
773 
774 static bool bxtDevice0a84 = DeviceInfoFactory<GfxDeviceInfo>::
775     RegisterDevice(0x0a84, &bxtGt1f5Info);
776 
777 static bool bxtDevice1a84 = DeviceInfoFactory<GfxDeviceInfo>::
778     RegisterDevice(0x1a84, &bxtGt1f5Info);
779 
780 static bool bxtDevice1a85 = DeviceInfoFactory<GfxDeviceInfo>::
781     RegisterDevice(0x1a85, &bxtGt1Info);
782 
783 static bool bxtDevice5a84 = DeviceInfoFactory<GfxDeviceInfo>::
784     RegisterDevice(0x5a84, &bxtGt1f5Info);
785 
786 static bool bxtDevice5a85 = DeviceInfoFactory<GfxDeviceInfo>::
787     RegisterDevice(0x5a85, &bxtGt1Info);
788 
789 static bool glkDevice3a84 = DeviceInfoFactory<GfxDeviceInfo>::
790     RegisterDevice(0x3184, &glkGt1f5Info);
791 
792 static bool glkDevice3a85 = DeviceInfoFactory<GfxDeviceInfo>::
793     RegisterDevice(0x3185, &glkGt1Info);
794 
795 static bool kblDevice5906 = DeviceInfoFactory<GfxDeviceInfo>::
796     RegisterDevice(0x5906, &kblGt1Info);
797 
798 static bool kblDevice5902 = DeviceInfoFactory<GfxDeviceInfo>::
799     RegisterDevice(0x5902, &kblGt1Info);
800 
801 static bool kblDevice5908 = DeviceInfoFactory<GfxDeviceInfo>::
802     RegisterDevice(0x5908, &kblGt1Info);
803 
804 static bool kblDevice590a = DeviceInfoFactory<GfxDeviceInfo>::
805     RegisterDevice(0x590a, &kblGt1Info);
806 
807 static bool kblDevice590b = DeviceInfoFactory<GfxDeviceInfo>::
808     RegisterDevice(0x590b, &kblGt1Info);
809 
810 static bool kblDevice590e = DeviceInfoFactory<GfxDeviceInfo>::
811     RegisterDevice(0x590e, &kblGt1Info);
812 
813 static bool kblDevice5913 = DeviceInfoFactory<GfxDeviceInfo>::
814     RegisterDevice(0x5913, &kblGt1f5Info);
815 
816 static bool kblDevice5915 = DeviceInfoFactory<GfxDeviceInfo>::
817     RegisterDevice(0x5915, &kblGt1f5Info);
818 
819 static bool kblDevice5916 = DeviceInfoFactory<GfxDeviceInfo>::
820     RegisterDevice(0x5916, &kblGt2Info);
821 
822 static bool kblDevice5917 = DeviceInfoFactory<GfxDeviceInfo>::
823     RegisterDevice(0x5917, &kblGt2Info);
824 
825 static bool kblDevice5912 = DeviceInfoFactory<GfxDeviceInfo>::
826     RegisterDevice(0x5912, &kblGt2Info);
827 
828 static bool kblDevice591e = DeviceInfoFactory<GfxDeviceInfo>::
829     RegisterDevice(0x591e, &kblGt2Info);
830 
831 static bool kblDevice591a = DeviceInfoFactory<GfxDeviceInfo>::
832     RegisterDevice(0x591a, &kblGt2Info);
833 
834 static bool kblDevice591b = DeviceInfoFactory<GfxDeviceInfo>::
835     RegisterDevice(0x591b, &kblGt2Info);
836 
837 static bool kblDevice591d = DeviceInfoFactory<GfxDeviceInfo>::
838     RegisterDevice(0x591d, &kblGt2Info);
839 
840 static bool kblDevice5921 = DeviceInfoFactory<GfxDeviceInfo>::
841     RegisterDevice(0x5921, &kblGt2Info);
842 
843 static bool kblDevice5923 = DeviceInfoFactory<GfxDeviceInfo>::
844     RegisterDevice(0x5923, &kblGt3Info);
845 
846 static bool kblDevice5926 = DeviceInfoFactory<GfxDeviceInfo>::
847     RegisterDevice(0x5926, &kblGt3eInfo);
848 
849 static bool kblDevice5927 = DeviceInfoFactory<GfxDeviceInfo>::
850     RegisterDevice(0x5927, &kblGt3eInfo);
851 
852 static bool kblDevice593b = DeviceInfoFactory<GfxDeviceInfo>::
853     RegisterDevice(0x593b, &kblGt3Info);
854 
855 static bool kblDevice5932 = DeviceInfoFactory<GfxDeviceInfo>::
856     RegisterDevice(0x5932, &kblGt3Info);
857 
858 static bool kblDevice592b = DeviceInfoFactory<GfxDeviceInfo>::
859     RegisterDevice(0x592b, &kblGt3Info);
860 
861 static bool kblDevice592a = DeviceInfoFactory<GfxDeviceInfo>::
862     RegisterDevice(0x592a, &kblGt3Info);
863 
864 static bool cflDevice3e93 = DeviceInfoFactory<GfxDeviceInfo>::
865     RegisterDevice(0x3e93, &cflGt1Info);
866 
867 static bool cflDevice3e99 = DeviceInfoFactory<GfxDeviceInfo>::
868     RegisterDevice(0x3e99, &cflGt1Info);
869 
870 static bool cflDevice3e90 = DeviceInfoFactory<GfxDeviceInfo>::
871     RegisterDevice(0x3e90, &cflGt1Info);
872 
873 static bool cflDevice3e92 = DeviceInfoFactory<GfxDeviceInfo>::
874     RegisterDevice(0x3e92, &cflGt2Info);
875 
876 static bool cflDevice3e94 = DeviceInfoFactory<GfxDeviceInfo>::
877     RegisterDevice(0x3e94, &cflGt2Info);
878 
879 static bool cflDevice3e91 = DeviceInfoFactory<GfxDeviceInfo>::
880     RegisterDevice(0x3e91, &cflGt2Info);
881 
882 static bool cflDevice3e96 = DeviceInfoFactory<GfxDeviceInfo>::
883     RegisterDevice(0x3e96, &cflGt2Info);
884 
885 static bool cflDevice3e98 = DeviceInfoFactory<GfxDeviceInfo>::
886     RegisterDevice(0x3e98, &cflGt2Info);
887 
888 static bool cflDevice3e9a = DeviceInfoFactory<GfxDeviceInfo>::
889     RegisterDevice(0x3e9a, &cflGt2Info);
890 
891 static bool cflDevice3e9b = DeviceInfoFactory<GfxDeviceInfo>::
892     RegisterDevice(0x3e9b, &cflGt2Info);
893 
894 static bool cflDevice3e9c = DeviceInfoFactory<GfxDeviceInfo>::
895     RegisterDevice(0x3e9c, &cflGt1Info);
896 
897 static bool cflDevice3ea5 = DeviceInfoFactory<GfxDeviceInfo>::
898     RegisterDevice(0x3ea5, &cflGt3eInfo);
899 
900 static bool cflDevice3ea6 = DeviceInfoFactory<GfxDeviceInfo>::
901     RegisterDevice(0x3ea6, &cflGt3eInfo);
902 
903 static bool cflDevice3ea7 = DeviceInfoFactory<GfxDeviceInfo>::
904     RegisterDevice(0x3ea7, &cflGt3eInfo);
905 
906 static bool cflDevice3ea8 = DeviceInfoFactory<GfxDeviceInfo>::
907     RegisterDevice(0x3ea8, &cflGt3eInfo);
908 
909 static bool cflDevice3ea9 = DeviceInfoFactory<GfxDeviceInfo>::
910     RegisterDevice(0x3ea9, &cflGt2Info);
911 
912 static bool cflDevice3ea1 = DeviceInfoFactory<GfxDeviceInfo>::
913     RegisterDevice(0x3ea1, &cflGt1Info);
914 
915 static bool cflDevice3ea4 = DeviceInfoFactory<GfxDeviceInfo>::
916     RegisterDevice(0x3ea4, &cflGt1Info);
917 
918 static bool cflDevice3ea0 = DeviceInfoFactory<GfxDeviceInfo>::
919     RegisterDevice(0x3ea0, &cflGt2Info);
920 
921 static bool cflDevice3ea3 = DeviceInfoFactory<GfxDeviceInfo>::
922     RegisterDevice(0x3ea3, &cflGt2Info);
923 
924 static bool cflDevice3ea2 = DeviceInfoFactory<GfxDeviceInfo>::
925     RegisterDevice(0x3ea2, &cflGt3eInfo);
926 
927 /* CML GT1 */
928 static bool cmlDevice9b21 = DeviceInfoFactory<GfxDeviceInfo>::
929     RegisterDevice(0x9b21, &cflGt1Info);
930 static bool cmlDevice9baa = DeviceInfoFactory<GfxDeviceInfo>::
931     RegisterDevice(0x9baa, &cflGt1Info);
932 static bool cmlDevice9bab = DeviceInfoFactory<GfxDeviceInfo>::
933     RegisterDevice(0x9bab, &cflGt1Info);
934 static bool cmlDevice9bac = DeviceInfoFactory<GfxDeviceInfo>::
935     RegisterDevice(0x9bac, &cflGt1Info);
936 static bool cmlDeviceba0 = DeviceInfoFactory<GfxDeviceInfo>::
937     RegisterDevice(0x9ba0, &cflGt1Info);
938 static bool cmlDevice9ba5 = DeviceInfoFactory<GfxDeviceInfo>::
939     RegisterDevice(0x9ba5, &cflGt1Info);
940 static bool cmlDevice9ba8 = DeviceInfoFactory<GfxDeviceInfo>::
941     RegisterDevice(0x9ba8, &cflGt1Info);
942 static bool cmlDevice9ba4 = DeviceInfoFactory<GfxDeviceInfo>::
943     RegisterDevice(0x9ba4, &cflGt1Info);
944 static bool cmlDevice9ba2 = DeviceInfoFactory<GfxDeviceInfo>::
945     RegisterDevice(0x9ba2, &cflGt1Info);
946 
947 /* CML GT2 */
948 static bool cmlDevice9b41 = DeviceInfoFactory<GfxDeviceInfo>::
949     RegisterDevice(0x9b41, &cflGt2Info);
950 static bool cmlDevice9bca = DeviceInfoFactory<GfxDeviceInfo>::
951     RegisterDevice(0x9bca, &cflGt2Info);
952 static bool cmlDevice9bcb = DeviceInfoFactory<GfxDeviceInfo>::
953     RegisterDevice(0x9bcb, &cflGt2Info);
954 static bool cmlDevice9bcc = DeviceInfoFactory<GfxDeviceInfo>::
955     RegisterDevice(0x9bcc, &cflGt2Info);
956 static bool cmlDevice9bc0 = DeviceInfoFactory<GfxDeviceInfo>::
957     RegisterDevice(0x9bc0, &cflGt2Info);
958 static bool cmlDevice9bc5 = DeviceInfoFactory<GfxDeviceInfo>::
959     RegisterDevice(0x9bc5, &cflGt2Info);
960 static bool cmlDevice9bc6 = DeviceInfoFactory<GfxDeviceInfo>::
961     RegisterDevice(0x9bc6, &cflGt2Info);
962 static bool cmlDevice9bc8 = DeviceInfoFactory<GfxDeviceInfo>::
963     RegisterDevice(0x9bc8, &cflGt2Info);
964 static bool cmlDevice9bc4 = DeviceInfoFactory<GfxDeviceInfo>::
965     RegisterDevice(0x9bc4, &cflGt2Info);
966 static bool cmlDevice9bc2 = DeviceInfoFactory<GfxDeviceInfo>::
967     RegisterDevice(0x9bc2, &cflGt2Info);
968 static bool cmlDevice9be6 = DeviceInfoFactory<GfxDeviceInfo>::
969     RegisterDevice(0x9be6, &cflGt2Info);
970 static bool cmlDevice9bf6 = DeviceInfoFactory<GfxDeviceInfo>::
971     RegisterDevice(0x9bf6, &cflGt2Info);
972 
973 /* AML/KBL Y GT2 */
974 static bool cmlDevice591c = DeviceInfoFactory<GfxDeviceInfo>::
975     RegisterDevice(0x591C, &cflGt2Info);
976 static bool cmlDevice87C0 = DeviceInfoFactory<GfxDeviceInfo>::
977     RegisterDevice(0x87C0, &cflGt2Info);
978 
979 /* AML/CFL Y GT2 */
980 static bool cmlDevice87ca = DeviceInfoFactory<GfxDeviceInfo>::
981     RegisterDevice(0x87ca, &cflGt2Info);
982