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