xref: /aosp_15_r20/external/igt-gpu-tools/lib/intel_device_info.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker #include "intel_chipset.h"
2*d83cc019SAndroid Build Coastguard Worker #include "i915_pciids.h"
3*d83cc019SAndroid Build Coastguard Worker 
4*d83cc019SAndroid Build Coastguard Worker #include <strings.h> /* ffs() */
5*d83cc019SAndroid Build Coastguard Worker 
6*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_generic_info = {
7*d83cc019SAndroid Build Coastguard Worker 	.gen = 0,
8*d83cc019SAndroid Build Coastguard Worker };
9*d83cc019SAndroid Build Coastguard Worker 
10*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i810_info = {
11*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(0),
12*d83cc019SAndroid Build Coastguard Worker 	.is_whitney = true,
13*d83cc019SAndroid Build Coastguard Worker 	.codename = "solano" /* 815 == "whitney" ? or vice versa? */
14*d83cc019SAndroid Build Coastguard Worker };
15*d83cc019SAndroid Build Coastguard Worker 
16*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i815_info = {
17*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(0),
18*d83cc019SAndroid Build Coastguard Worker 	.is_whitney = true,
19*d83cc019SAndroid Build Coastguard Worker 	.codename = "whitney"
20*d83cc019SAndroid Build Coastguard Worker };
21*d83cc019SAndroid Build Coastguard Worker 
22*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i830_info = {
23*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(1),
24*d83cc019SAndroid Build Coastguard Worker 	.is_almador = true,
25*d83cc019SAndroid Build Coastguard Worker 	.codename = "almador"
26*d83cc019SAndroid Build Coastguard Worker };
27*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i845_info = {
28*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(1),
29*d83cc019SAndroid Build Coastguard Worker 	.is_brookdale = true,
30*d83cc019SAndroid Build Coastguard Worker 	.codename = "brookdale"
31*d83cc019SAndroid Build Coastguard Worker };
32*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i855_info = {
33*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(1),
34*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
35*d83cc019SAndroid Build Coastguard Worker 	.is_montara = true,
36*d83cc019SAndroid Build Coastguard Worker 	.codename = "montara"
37*d83cc019SAndroid Build Coastguard Worker };
38*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i865_info = {
39*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(1),
40*d83cc019SAndroid Build Coastguard Worker 	.is_springdale = true,
41*d83cc019SAndroid Build Coastguard Worker 	.codename = "spingdale"
42*d83cc019SAndroid Build Coastguard Worker };
43*d83cc019SAndroid Build Coastguard Worker 
44*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i915_info = {
45*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
46*d83cc019SAndroid Build Coastguard Worker 	.is_grantsdale = true,
47*d83cc019SAndroid Build Coastguard Worker 	.codename = "grantsdale"
48*d83cc019SAndroid Build Coastguard Worker };
49*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i915m_info = {
50*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
51*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
52*d83cc019SAndroid Build Coastguard Worker 	.is_alviso = true,
53*d83cc019SAndroid Build Coastguard Worker 	.codename = "alviso"
54*d83cc019SAndroid Build Coastguard Worker };
55*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i945_info = {
56*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
57*d83cc019SAndroid Build Coastguard Worker 	.is_lakeport = true,
58*d83cc019SAndroid Build Coastguard Worker 	.codename = "lakeport"
59*d83cc019SAndroid Build Coastguard Worker };
60*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i945m_info = {
61*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
62*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
63*d83cc019SAndroid Build Coastguard Worker 	.is_calistoga = true,
64*d83cc019SAndroid Build Coastguard Worker 	.codename = "calistoga"
65*d83cc019SAndroid Build Coastguard Worker };
66*d83cc019SAndroid Build Coastguard Worker 
67*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_g33_info = {
68*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
69*d83cc019SAndroid Build Coastguard Worker 	.is_bearlake = true,
70*d83cc019SAndroid Build Coastguard Worker 	.codename = "bearlake"
71*d83cc019SAndroid Build Coastguard Worker };
72*d83cc019SAndroid Build Coastguard Worker 
73*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_pineview_g_info = {
74*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
75*d83cc019SAndroid Build Coastguard Worker 	.is_pineview = true,
76*d83cc019SAndroid Build Coastguard Worker 	.codename = "pineview"
77*d83cc019SAndroid Build Coastguard Worker };
78*d83cc019SAndroid Build Coastguard Worker 
79*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_pineview_m_info = {
80*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(2),
81*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
82*d83cc019SAndroid Build Coastguard Worker 	.is_pineview = true,
83*d83cc019SAndroid Build Coastguard Worker 	.codename = "pineview"
84*d83cc019SAndroid Build Coastguard Worker };
85*d83cc019SAndroid Build Coastguard Worker 
86*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i965_info = {
87*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(3),
88*d83cc019SAndroid Build Coastguard Worker 	.is_broadwater = true,
89*d83cc019SAndroid Build Coastguard Worker 	.codename = "broadwater"
90*d83cc019SAndroid Build Coastguard Worker };
91*d83cc019SAndroid Build Coastguard Worker 
92*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_i965m_info = {
93*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(3),
94*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
95*d83cc019SAndroid Build Coastguard Worker 	.is_crestline = true,
96*d83cc019SAndroid Build Coastguard Worker 	.codename = "crestline"
97*d83cc019SAndroid Build Coastguard Worker };
98*d83cc019SAndroid Build Coastguard Worker 
99*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_g45_info = {
100*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(3),
101*d83cc019SAndroid Build Coastguard Worker 	.is_eaglelake = true,
102*d83cc019SAndroid Build Coastguard Worker 	.codename = "eaglelake"
103*d83cc019SAndroid Build Coastguard Worker };
104*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_gm45_info = {
105*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(3),
106*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
107*d83cc019SAndroid Build Coastguard Worker 	.is_cantiga = true,
108*d83cc019SAndroid Build Coastguard Worker 	.codename = "cantiga"
109*d83cc019SAndroid Build Coastguard Worker };
110*d83cc019SAndroid Build Coastguard Worker 
111*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_ironlake_info = {
112*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(4),
113*d83cc019SAndroid Build Coastguard Worker 	.is_ironlake = true,
114*d83cc019SAndroid Build Coastguard Worker 	.codename = "ironlake" /* clarkdale? */
115*d83cc019SAndroid Build Coastguard Worker };
116*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_ironlake_m_info = {
117*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(4),
118*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
119*d83cc019SAndroid Build Coastguard Worker 	.is_arrandale = true,
120*d83cc019SAndroid Build Coastguard Worker 	.codename = "arrandale"
121*d83cc019SAndroid Build Coastguard Worker };
122*d83cc019SAndroid Build Coastguard Worker 
123*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_sandybridge_info = {
124*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(5),
125*d83cc019SAndroid Build Coastguard Worker 	.is_sandybridge = true,
126*d83cc019SAndroid Build Coastguard Worker 	.codename = "sandybridge"
127*d83cc019SAndroid Build Coastguard Worker };
128*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_sandybridge_m_info = {
129*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(5),
130*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
131*d83cc019SAndroid Build Coastguard Worker 	.is_sandybridge = true,
132*d83cc019SAndroid Build Coastguard Worker 	.codename = "sandybridge"
133*d83cc019SAndroid Build Coastguard Worker };
134*d83cc019SAndroid Build Coastguard Worker 
135*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_ivybridge_info = {
136*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(6),
137*d83cc019SAndroid Build Coastguard Worker 	.is_ivybridge = true,
138*d83cc019SAndroid Build Coastguard Worker 	.codename = "ivybridge"
139*d83cc019SAndroid Build Coastguard Worker };
140*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_ivybridge_m_info = {
141*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(6),
142*d83cc019SAndroid Build Coastguard Worker 	.is_mobile = true,
143*d83cc019SAndroid Build Coastguard Worker 	.is_ivybridge = true,
144*d83cc019SAndroid Build Coastguard Worker 	.codename = "ivybridge"
145*d83cc019SAndroid Build Coastguard Worker };
146*d83cc019SAndroid Build Coastguard Worker 
147*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_valleyview_info = {
148*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(6),
149*d83cc019SAndroid Build Coastguard Worker 	.is_valleyview = true,
150*d83cc019SAndroid Build Coastguard Worker 	.codename = "valleyview"
151*d83cc019SAndroid Build Coastguard Worker };
152*d83cc019SAndroid Build Coastguard Worker 
153*d83cc019SAndroid Build Coastguard Worker #define HASWELL_FIELDS \
154*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(6), \
155*d83cc019SAndroid Build Coastguard Worker 	.is_haswell = true, \
156*d83cc019SAndroid Build Coastguard Worker 	.codename = "haswell"
157*d83cc019SAndroid Build Coastguard Worker 
158*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_haswell_gt1_info = {
159*d83cc019SAndroid Build Coastguard Worker 	HASWELL_FIELDS,
160*d83cc019SAndroid Build Coastguard Worker 	.gt = 1,
161*d83cc019SAndroid Build Coastguard Worker };
162*d83cc019SAndroid Build Coastguard Worker 
163*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_haswell_gt2_info = {
164*d83cc019SAndroid Build Coastguard Worker 	HASWELL_FIELDS,
165*d83cc019SAndroid Build Coastguard Worker 	.gt = 2,
166*d83cc019SAndroid Build Coastguard Worker };
167*d83cc019SAndroid Build Coastguard Worker 
168*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_haswell_gt3_info = {
169*d83cc019SAndroid Build Coastguard Worker 	HASWELL_FIELDS,
170*d83cc019SAndroid Build Coastguard Worker 	.gt = 3,
171*d83cc019SAndroid Build Coastguard Worker };
172*d83cc019SAndroid Build Coastguard Worker 
173*d83cc019SAndroid Build Coastguard Worker #define BROADWELL_FIELDS \
174*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(7), \
175*d83cc019SAndroid Build Coastguard Worker 	.is_broadwell = true, \
176*d83cc019SAndroid Build Coastguard Worker 	.codename = "broadwell"
177*d83cc019SAndroid Build Coastguard Worker 
178*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_broadwell_gt1_info = {
179*d83cc019SAndroid Build Coastguard Worker 	BROADWELL_FIELDS,
180*d83cc019SAndroid Build Coastguard Worker 	.gt = 1,
181*d83cc019SAndroid Build Coastguard Worker };
182*d83cc019SAndroid Build Coastguard Worker 
183*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_broadwell_gt2_info = {
184*d83cc019SAndroid Build Coastguard Worker 	BROADWELL_FIELDS,
185*d83cc019SAndroid Build Coastguard Worker 	.gt = 2,
186*d83cc019SAndroid Build Coastguard Worker };
187*d83cc019SAndroid Build Coastguard Worker 
188*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_broadwell_gt3_info = {
189*d83cc019SAndroid Build Coastguard Worker 	BROADWELL_FIELDS,
190*d83cc019SAndroid Build Coastguard Worker 	.gt = 3,
191*d83cc019SAndroid Build Coastguard Worker };
192*d83cc019SAndroid Build Coastguard Worker 
193*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_broadwell_unknown_info = {
194*d83cc019SAndroid Build Coastguard Worker 	BROADWELL_FIELDS,
195*d83cc019SAndroid Build Coastguard Worker };
196*d83cc019SAndroid Build Coastguard Worker 
197*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_cherryview_info = {
198*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(7),
199*d83cc019SAndroid Build Coastguard Worker 	.is_cherryview = true,
200*d83cc019SAndroid Build Coastguard Worker 	.codename = "cherryview"
201*d83cc019SAndroid Build Coastguard Worker };
202*d83cc019SAndroid Build Coastguard Worker 
203*d83cc019SAndroid Build Coastguard Worker #define SKYLAKE_FIELDS \
204*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(8), \
205*d83cc019SAndroid Build Coastguard Worker 	.codename = "skylake", \
206*d83cc019SAndroid Build Coastguard Worker 	.is_skylake = true
207*d83cc019SAndroid Build Coastguard Worker 
208*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_skylake_gt1_info = {
209*d83cc019SAndroid Build Coastguard Worker 	SKYLAKE_FIELDS,
210*d83cc019SAndroid Build Coastguard Worker 	.gt = 1,
211*d83cc019SAndroid Build Coastguard Worker };
212*d83cc019SAndroid Build Coastguard Worker 
213*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_skylake_gt2_info = {
214*d83cc019SAndroid Build Coastguard Worker 	SKYLAKE_FIELDS,
215*d83cc019SAndroid Build Coastguard Worker 	.gt = 2,
216*d83cc019SAndroid Build Coastguard Worker };
217*d83cc019SAndroid Build Coastguard Worker 
218*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_skylake_gt3_info = {
219*d83cc019SAndroid Build Coastguard Worker 	SKYLAKE_FIELDS,
220*d83cc019SAndroid Build Coastguard Worker 	.gt = 3,
221*d83cc019SAndroid Build Coastguard Worker };
222*d83cc019SAndroid Build Coastguard Worker 
223*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_skylake_gt4_info = {
224*d83cc019SAndroid Build Coastguard Worker 	SKYLAKE_FIELDS,
225*d83cc019SAndroid Build Coastguard Worker 	.gt = 4,
226*d83cc019SAndroid Build Coastguard Worker };
227*d83cc019SAndroid Build Coastguard Worker 
228*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_broxton_info = {
229*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(8),
230*d83cc019SAndroid Build Coastguard Worker 	.is_broxton = true,
231*d83cc019SAndroid Build Coastguard Worker 	.codename = "broxton"
232*d83cc019SAndroid Build Coastguard Worker };
233*d83cc019SAndroid Build Coastguard Worker 
234*d83cc019SAndroid Build Coastguard Worker #define KABYLAKE_FIELDS \
235*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(8), \
236*d83cc019SAndroid Build Coastguard Worker 	.is_kabylake = true, \
237*d83cc019SAndroid Build Coastguard Worker 	.codename = "kabylake"
238*d83cc019SAndroid Build Coastguard Worker 
239*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_kabylake_gt1_info = {
240*d83cc019SAndroid Build Coastguard Worker 	KABYLAKE_FIELDS,
241*d83cc019SAndroid Build Coastguard Worker 	.gt = 1,
242*d83cc019SAndroid Build Coastguard Worker };
243*d83cc019SAndroid Build Coastguard Worker 
244*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_kabylake_gt2_info = {
245*d83cc019SAndroid Build Coastguard Worker 	KABYLAKE_FIELDS,
246*d83cc019SAndroid Build Coastguard Worker 	.gt = 2,
247*d83cc019SAndroid Build Coastguard Worker };
248*d83cc019SAndroid Build Coastguard Worker 
249*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_kabylake_gt3_info = {
250*d83cc019SAndroid Build Coastguard Worker 	KABYLAKE_FIELDS,
251*d83cc019SAndroid Build Coastguard Worker 	.gt = 3,
252*d83cc019SAndroid Build Coastguard Worker };
253*d83cc019SAndroid Build Coastguard Worker 
254*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_kabylake_gt4_info = {
255*d83cc019SAndroid Build Coastguard Worker 	KABYLAKE_FIELDS,
256*d83cc019SAndroid Build Coastguard Worker 	.gt = 4,
257*d83cc019SAndroid Build Coastguard Worker };
258*d83cc019SAndroid Build Coastguard Worker 
259*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_geminilake_info = {
260*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(8),
261*d83cc019SAndroid Build Coastguard Worker 	.is_geminilake = true,
262*d83cc019SAndroid Build Coastguard Worker 	.codename = "geminilake"
263*d83cc019SAndroid Build Coastguard Worker };
264*d83cc019SAndroid Build Coastguard Worker 
265*d83cc019SAndroid Build Coastguard Worker #define COFFEELAKE_FIELDS \
266*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(8), \
267*d83cc019SAndroid Build Coastguard Worker 	.is_coffeelake = true, \
268*d83cc019SAndroid Build Coastguard Worker 	.codename = "coffeelake"
269*d83cc019SAndroid Build Coastguard Worker 
270*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_coffeelake_gt1_info = {
271*d83cc019SAndroid Build Coastguard Worker 	COFFEELAKE_FIELDS,
272*d83cc019SAndroid Build Coastguard Worker 	.gt = 1,
273*d83cc019SAndroid Build Coastguard Worker };
274*d83cc019SAndroid Build Coastguard Worker 
275*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_coffeelake_gt2_info = {
276*d83cc019SAndroid Build Coastguard Worker 	COFFEELAKE_FIELDS,
277*d83cc019SAndroid Build Coastguard Worker 	.gt = 2,
278*d83cc019SAndroid Build Coastguard Worker };
279*d83cc019SAndroid Build Coastguard Worker 
280*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_coffeelake_gt3_info = {
281*d83cc019SAndroid Build Coastguard Worker 	COFFEELAKE_FIELDS,
282*d83cc019SAndroid Build Coastguard Worker 	.gt = 3,
283*d83cc019SAndroid Build Coastguard Worker };
284*d83cc019SAndroid Build Coastguard Worker 
285*d83cc019SAndroid Build Coastguard Worker #define COMETLAKE_FIELDS \
286*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(8), \
287*d83cc019SAndroid Build Coastguard Worker 	.is_cometlake = true, \
288*d83cc019SAndroid Build Coastguard Worker 	.codename = "cometlake"
289*d83cc019SAndroid Build Coastguard Worker 
290*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_cometlake_gt1_info = {
291*d83cc019SAndroid Build Coastguard Worker 	COMETLAKE_FIELDS,
292*d83cc019SAndroid Build Coastguard Worker 	.gt = 1,
293*d83cc019SAndroid Build Coastguard Worker };
294*d83cc019SAndroid Build Coastguard Worker 
295*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_cometlake_gt2_info = {
296*d83cc019SAndroid Build Coastguard Worker 	COMETLAKE_FIELDS,
297*d83cc019SAndroid Build Coastguard Worker 	.gt = 2,
298*d83cc019SAndroid Build Coastguard Worker };
299*d83cc019SAndroid Build Coastguard Worker 
300*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_cannonlake_info = {
301*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(9),
302*d83cc019SAndroid Build Coastguard Worker 	.is_cannonlake = true,
303*d83cc019SAndroid Build Coastguard Worker 	.codename = "cannonlake"
304*d83cc019SAndroid Build Coastguard Worker };
305*d83cc019SAndroid Build Coastguard Worker 
306*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_icelake_info = {
307*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(10),
308*d83cc019SAndroid Build Coastguard Worker 	.is_icelake = true,
309*d83cc019SAndroid Build Coastguard Worker 	.codename = "icelake"
310*d83cc019SAndroid Build Coastguard Worker };
311*d83cc019SAndroid Build Coastguard Worker 
312*d83cc019SAndroid Build Coastguard Worker static const struct intel_device_info intel_tigerlake_info = {
313*d83cc019SAndroid Build Coastguard Worker 	.gen = BIT(11),
314*d83cc019SAndroid Build Coastguard Worker 	.is_tigerlake = true,
315*d83cc019SAndroid Build Coastguard Worker 	.codename = "tigerlake"
316*d83cc019SAndroid Build Coastguard Worker };
317*d83cc019SAndroid Build Coastguard Worker 
318*d83cc019SAndroid Build Coastguard Worker static const struct pci_id_match intel_device_match[] = {
319*d83cc019SAndroid Build Coastguard Worker 	INTEL_I810_IDS(&intel_i810_info),
320*d83cc019SAndroid Build Coastguard Worker 	INTEL_I815_IDS(&intel_i815_info),
321*d83cc019SAndroid Build Coastguard Worker 
322*d83cc019SAndroid Build Coastguard Worker 	INTEL_I830_IDS(&intel_i830_info),
323*d83cc019SAndroid Build Coastguard Worker 	INTEL_I845G_IDS(&intel_i845_info),
324*d83cc019SAndroid Build Coastguard Worker 	INTEL_I85X_IDS(&intel_i855_info),
325*d83cc019SAndroid Build Coastguard Worker 	INTEL_I865G_IDS(&intel_i865_info),
326*d83cc019SAndroid Build Coastguard Worker 
327*d83cc019SAndroid Build Coastguard Worker 	INTEL_I915G_IDS(&intel_i915_info),
328*d83cc019SAndroid Build Coastguard Worker 	INTEL_I915GM_IDS(&intel_i915m_info),
329*d83cc019SAndroid Build Coastguard Worker 	INTEL_I945G_IDS(&intel_i945_info),
330*d83cc019SAndroid Build Coastguard Worker 	INTEL_I945GM_IDS(&intel_i945m_info),
331*d83cc019SAndroid Build Coastguard Worker 
332*d83cc019SAndroid Build Coastguard Worker 	INTEL_G33_IDS(&intel_g33_info),
333*d83cc019SAndroid Build Coastguard Worker 	INTEL_PINEVIEW_G_IDS(&intel_pineview_g_info),
334*d83cc019SAndroid Build Coastguard Worker 	INTEL_PINEVIEW_M_IDS(&intel_pineview_m_info),
335*d83cc019SAndroid Build Coastguard Worker 
336*d83cc019SAndroid Build Coastguard Worker 	INTEL_I965G_IDS(&intel_i965_info),
337*d83cc019SAndroid Build Coastguard Worker 	INTEL_I965GM_IDS(&intel_i965m_info),
338*d83cc019SAndroid Build Coastguard Worker 
339*d83cc019SAndroid Build Coastguard Worker 	INTEL_G45_IDS(&intel_g45_info),
340*d83cc019SAndroid Build Coastguard Worker 	INTEL_GM45_IDS(&intel_gm45_info),
341*d83cc019SAndroid Build Coastguard Worker 
342*d83cc019SAndroid Build Coastguard Worker 	INTEL_IRONLAKE_D_IDS(&intel_ironlake_info),
343*d83cc019SAndroid Build Coastguard Worker 	INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),
344*d83cc019SAndroid Build Coastguard Worker 
345*d83cc019SAndroid Build Coastguard Worker 	INTEL_SNB_D_IDS(&intel_sandybridge_info),
346*d83cc019SAndroid Build Coastguard Worker 	INTEL_SNB_M_IDS(&intel_sandybridge_m_info),
347*d83cc019SAndroid Build Coastguard Worker 
348*d83cc019SAndroid Build Coastguard Worker 	INTEL_IVB_D_IDS(&intel_ivybridge_info),
349*d83cc019SAndroid Build Coastguard Worker 	INTEL_IVB_M_IDS(&intel_ivybridge_m_info),
350*d83cc019SAndroid Build Coastguard Worker 
351*d83cc019SAndroid Build Coastguard Worker 	INTEL_HSW_GT1_IDS(&intel_haswell_gt1_info),
352*d83cc019SAndroid Build Coastguard Worker 	INTEL_HSW_GT2_IDS(&intel_haswell_gt2_info),
353*d83cc019SAndroid Build Coastguard Worker 	INTEL_HSW_GT3_IDS(&intel_haswell_gt3_info),
354*d83cc019SAndroid Build Coastguard Worker 
355*d83cc019SAndroid Build Coastguard Worker 	INTEL_VLV_IDS(&intel_valleyview_info),
356*d83cc019SAndroid Build Coastguard Worker 
357*d83cc019SAndroid Build Coastguard Worker 	INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info),
358*d83cc019SAndroid Build Coastguard Worker 	INTEL_BDW_GT2_IDS(&intel_broadwell_gt2_info),
359*d83cc019SAndroid Build Coastguard Worker 	INTEL_BDW_GT3_IDS(&intel_broadwell_gt3_info),
360*d83cc019SAndroid Build Coastguard Worker 	INTEL_BDW_RSVD_IDS(&intel_broadwell_unknown_info),
361*d83cc019SAndroid Build Coastguard Worker 
362*d83cc019SAndroid Build Coastguard Worker 	INTEL_CHV_IDS(&intel_cherryview_info),
363*d83cc019SAndroid Build Coastguard Worker 
364*d83cc019SAndroid Build Coastguard Worker 	INTEL_SKL_GT1_IDS(&intel_skylake_gt1_info),
365*d83cc019SAndroid Build Coastguard Worker 	INTEL_SKL_GT2_IDS(&intel_skylake_gt2_info),
366*d83cc019SAndroid Build Coastguard Worker 	INTEL_SKL_GT3_IDS(&intel_skylake_gt3_info),
367*d83cc019SAndroid Build Coastguard Worker 	INTEL_SKL_GT4_IDS(&intel_skylake_gt4_info),
368*d83cc019SAndroid Build Coastguard Worker 
369*d83cc019SAndroid Build Coastguard Worker 	INTEL_BXT_IDS(&intel_broxton_info),
370*d83cc019SAndroid Build Coastguard Worker 
371*d83cc019SAndroid Build Coastguard Worker 	INTEL_KBL_GT1_IDS(&intel_kabylake_gt1_info),
372*d83cc019SAndroid Build Coastguard Worker 	INTEL_KBL_GT2_IDS(&intel_kabylake_gt2_info),
373*d83cc019SAndroid Build Coastguard Worker 	INTEL_KBL_GT3_IDS(&intel_kabylake_gt3_info),
374*d83cc019SAndroid Build Coastguard Worker 	INTEL_KBL_GT4_IDS(&intel_kabylake_gt4_info),
375*d83cc019SAndroid Build Coastguard Worker 	INTEL_AML_KBL_GT2_IDS(&intel_kabylake_gt2_info),
376*d83cc019SAndroid Build Coastguard Worker 
377*d83cc019SAndroid Build Coastguard Worker 	INTEL_GLK_IDS(&intel_geminilake_info),
378*d83cc019SAndroid Build Coastguard Worker 
379*d83cc019SAndroid Build Coastguard Worker 	INTEL_CFL_S_GT1_IDS(&intel_coffeelake_gt1_info),
380*d83cc019SAndroid Build Coastguard Worker 	INTEL_CFL_S_GT2_IDS(&intel_coffeelake_gt2_info),
381*d83cc019SAndroid Build Coastguard Worker 	INTEL_CFL_H_GT1_IDS(&intel_coffeelake_gt1_info),
382*d83cc019SAndroid Build Coastguard Worker 	INTEL_CFL_H_GT2_IDS(&intel_coffeelake_gt2_info),
383*d83cc019SAndroid Build Coastguard Worker 	INTEL_CFL_U_GT2_IDS(&intel_coffeelake_gt2_info),
384*d83cc019SAndroid Build Coastguard Worker 	INTEL_CFL_U_GT3_IDS(&intel_coffeelake_gt3_info),
385*d83cc019SAndroid Build Coastguard Worker 	INTEL_WHL_U_GT1_IDS(&intel_coffeelake_gt1_info),
386*d83cc019SAndroid Build Coastguard Worker 	INTEL_WHL_U_GT2_IDS(&intel_coffeelake_gt2_info),
387*d83cc019SAndroid Build Coastguard Worker 	INTEL_WHL_U_GT3_IDS(&intel_coffeelake_gt3_info),
388*d83cc019SAndroid Build Coastguard Worker 	INTEL_AML_CFL_GT2_IDS(&intel_coffeelake_gt2_info),
389*d83cc019SAndroid Build Coastguard Worker 
390*d83cc019SAndroid Build Coastguard Worker 	INTEL_CML_GT1_IDS(&intel_cometlake_gt1_info),
391*d83cc019SAndroid Build Coastguard Worker 	INTEL_CML_GT2_IDS(&intel_cometlake_gt2_info),
392*d83cc019SAndroid Build Coastguard Worker 
393*d83cc019SAndroid Build Coastguard Worker 	INTEL_CNL_IDS(&intel_cannonlake_info),
394*d83cc019SAndroid Build Coastguard Worker 
395*d83cc019SAndroid Build Coastguard Worker 	INTEL_ICL_11_IDS(&intel_icelake_info),
396*d83cc019SAndroid Build Coastguard Worker 
397*d83cc019SAndroid Build Coastguard Worker 	INTEL_EHL_IDS(&intel_icelake_info),
398*d83cc019SAndroid Build Coastguard Worker 
399*d83cc019SAndroid Build Coastguard Worker 	INTEL_TGL_12_IDS(&intel_tigerlake_info),
400*d83cc019SAndroid Build Coastguard Worker 
401*d83cc019SAndroid Build Coastguard Worker 	INTEL_VGA_DEVICE(PCI_MATCH_ANY, &intel_generic_info),
402*d83cc019SAndroid Build Coastguard Worker };
403*d83cc019SAndroid Build Coastguard Worker 
404*d83cc019SAndroid Build Coastguard Worker /**
405*d83cc019SAndroid Build Coastguard Worker  * intel_get_device_info:
406*d83cc019SAndroid Build Coastguard Worker  * @devid: pci device id
407*d83cc019SAndroid Build Coastguard Worker  *
408*d83cc019SAndroid Build Coastguard Worker  * Looks up the Intel GFX device info for the given device id.
409*d83cc019SAndroid Build Coastguard Worker  *
410*d83cc019SAndroid Build Coastguard Worker  * Returns:
411*d83cc019SAndroid Build Coastguard Worker  * The associated intel_get_device_info
412*d83cc019SAndroid Build Coastguard Worker  */
intel_get_device_info(uint16_t devid)413*d83cc019SAndroid Build Coastguard Worker const struct intel_device_info *intel_get_device_info(uint16_t devid)
414*d83cc019SAndroid Build Coastguard Worker {
415*d83cc019SAndroid Build Coastguard Worker 	static const struct intel_device_info *cache = &intel_generic_info;
416*d83cc019SAndroid Build Coastguard Worker 	static uint16_t cached_devid;
417*d83cc019SAndroid Build Coastguard Worker 	int i;
418*d83cc019SAndroid Build Coastguard Worker 
419*d83cc019SAndroid Build Coastguard Worker 	if (cached_devid == devid)
420*d83cc019SAndroid Build Coastguard Worker 		goto out;
421*d83cc019SAndroid Build Coastguard Worker 
422*d83cc019SAndroid Build Coastguard Worker 	/* XXX Presort table and bsearch! */
423*d83cc019SAndroid Build Coastguard Worker 	for (i = 0; intel_device_match[i].device_id != PCI_MATCH_ANY; i++) {
424*d83cc019SAndroid Build Coastguard Worker 		if (devid == intel_device_match[i].device_id)
425*d83cc019SAndroid Build Coastguard Worker 			break;
426*d83cc019SAndroid Build Coastguard Worker 	}
427*d83cc019SAndroid Build Coastguard Worker 
428*d83cc019SAndroid Build Coastguard Worker 	cached_devid = devid;
429*d83cc019SAndroid Build Coastguard Worker 	cache = (void *)intel_device_match[i].match_data;
430*d83cc019SAndroid Build Coastguard Worker 
431*d83cc019SAndroid Build Coastguard Worker out:
432*d83cc019SAndroid Build Coastguard Worker 	return cache;
433*d83cc019SAndroid Build Coastguard Worker }
434*d83cc019SAndroid Build Coastguard Worker 
435*d83cc019SAndroid Build Coastguard Worker /**
436*d83cc019SAndroid Build Coastguard Worker  * intel_gen:
437*d83cc019SAndroid Build Coastguard Worker  * @devid: pci device id
438*d83cc019SAndroid Build Coastguard Worker  *
439*d83cc019SAndroid Build Coastguard Worker  * Computes the Intel GFX generation for the given device id.
440*d83cc019SAndroid Build Coastguard Worker  *
441*d83cc019SAndroid Build Coastguard Worker  * Returns:
442*d83cc019SAndroid Build Coastguard Worker  * The GFX generation on successful lookup, 0 on failure.
443*d83cc019SAndroid Build Coastguard Worker  */
intel_gen(uint16_t devid)444*d83cc019SAndroid Build Coastguard Worker unsigned intel_gen(uint16_t devid)
445*d83cc019SAndroid Build Coastguard Worker {
446*d83cc019SAndroid Build Coastguard Worker 	return ffs(intel_get_device_info(devid)->gen);
447*d83cc019SAndroid Build Coastguard Worker }
448*d83cc019SAndroid Build Coastguard Worker 
449*d83cc019SAndroid Build Coastguard Worker /**
450*d83cc019SAndroid Build Coastguard Worker  * intel_gt:
451*d83cc019SAndroid Build Coastguard Worker  * @devid: pci device id
452*d83cc019SAndroid Build Coastguard Worker  *
453*d83cc019SAndroid Build Coastguard Worker  * Computes the Intel GFX GT size for the given device id.
454*d83cc019SAndroid Build Coastguard Worker  *
455*d83cc019SAndroid Build Coastguard Worker  * Returns:
456*d83cc019SAndroid Build Coastguard Worker  * The GT size.
457*d83cc019SAndroid Build Coastguard Worker  */
intel_gt(uint16_t devid)458*d83cc019SAndroid Build Coastguard Worker unsigned intel_gt(uint16_t devid)
459*d83cc019SAndroid Build Coastguard Worker {
460*d83cc019SAndroid Build Coastguard Worker 	unsigned mask = intel_gen(devid);
461*d83cc019SAndroid Build Coastguard Worker 
462*d83cc019SAndroid Build Coastguard Worker 	if (mask >= 8)
463*d83cc019SAndroid Build Coastguard Worker 		mask = 0xf;
464*d83cc019SAndroid Build Coastguard Worker 	else if (mask >= 6)
465*d83cc019SAndroid Build Coastguard Worker 		mask = 0x3;
466*d83cc019SAndroid Build Coastguard Worker 	else
467*d83cc019SAndroid Build Coastguard Worker 		mask = 0;
468*d83cc019SAndroid Build Coastguard Worker 
469*d83cc019SAndroid Build Coastguard Worker 	return (devid >> 4) & mask;
470*d83cc019SAndroid Build Coastguard Worker }
471