forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/gpu/drm/i915/i915_pci.c
....@@ -23,244 +23,407 @@
2323 */
2424
2525 #include <linux/console.h>
26
-#include <linux/vgaarb.h>
2726 #include <linux/vga_switcheroo.h>
2827
28
+#include <drm/drm_drv.h>
29
+#include <drm/i915_pciids.h>
30
+
31
+#include "display/intel_fbdev.h"
32
+
2933 #include "i915_drv.h"
34
+#include "i915_perf.h"
35
+#include "i915_globals.h"
3036 #include "i915_selftest.h"
3137
32
-#define PLATFORM(x) .platform = (x), .platform_mask = BIT(x)
38
+#define PLATFORM(x) .platform = (x)
3339 #define GEN(x) .gen = (x), .gen_mask = BIT((x) - 1)
3440
35
-#define GEN_DEFAULT_PIPEOFFSETS \
36
- .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
37
- PIPE_C_OFFSET, PIPE_EDP_OFFSET }, \
38
- .trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
39
- TRANSCODER_C_OFFSET, TRANSCODER_EDP_OFFSET }, \
40
- .palette_offsets = { PALETTE_A_OFFSET, PALETTE_B_OFFSET }
41
+#define I845_PIPE_OFFSETS \
42
+ .pipe_offsets = { \
43
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
44
+ }, \
45
+ .trans_offsets = { \
46
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
47
+ }
4148
42
-#define GEN_CHV_PIPEOFFSETS \
43
- .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
44
- CHV_PIPE_C_OFFSET }, \
45
- .trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
46
- CHV_TRANSCODER_C_OFFSET, }, \
47
- .palette_offsets = { PALETTE_A_OFFSET, PALETTE_B_OFFSET, \
48
- CHV_PALETTE_C_OFFSET }
49
+#define I9XX_PIPE_OFFSETS \
50
+ .pipe_offsets = { \
51
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
52
+ [TRANSCODER_B] = PIPE_B_OFFSET, \
53
+ }, \
54
+ .trans_offsets = { \
55
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
56
+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \
57
+ }
4958
50
-#define CURSOR_OFFSETS \
51
- .cursor_offsets = { CURSOR_A_OFFSET, CURSOR_B_OFFSET, CHV_CURSOR_C_OFFSET }
59
+#define IVB_PIPE_OFFSETS \
60
+ .pipe_offsets = { \
61
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
62
+ [TRANSCODER_B] = PIPE_B_OFFSET, \
63
+ [TRANSCODER_C] = PIPE_C_OFFSET, \
64
+ }, \
65
+ .trans_offsets = { \
66
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
67
+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \
68
+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \
69
+ }
70
+
71
+#define HSW_PIPE_OFFSETS \
72
+ .pipe_offsets = { \
73
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
74
+ [TRANSCODER_B] = PIPE_B_OFFSET, \
75
+ [TRANSCODER_C] = PIPE_C_OFFSET, \
76
+ [TRANSCODER_EDP] = PIPE_EDP_OFFSET, \
77
+ }, \
78
+ .trans_offsets = { \
79
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
80
+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \
81
+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \
82
+ [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, \
83
+ }
84
+
85
+#define CHV_PIPE_OFFSETS \
86
+ .pipe_offsets = { \
87
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
88
+ [TRANSCODER_B] = PIPE_B_OFFSET, \
89
+ [TRANSCODER_C] = CHV_PIPE_C_OFFSET, \
90
+ }, \
91
+ .trans_offsets = { \
92
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
93
+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \
94
+ [TRANSCODER_C] = CHV_TRANSCODER_C_OFFSET, \
95
+ }
96
+
97
+#define I845_CURSOR_OFFSETS \
98
+ .cursor_offsets = { \
99
+ [PIPE_A] = CURSOR_A_OFFSET, \
100
+ }
101
+
102
+#define I9XX_CURSOR_OFFSETS \
103
+ .cursor_offsets = { \
104
+ [PIPE_A] = CURSOR_A_OFFSET, \
105
+ [PIPE_B] = CURSOR_B_OFFSET, \
106
+ }
107
+
108
+#define CHV_CURSOR_OFFSETS \
109
+ .cursor_offsets = { \
110
+ [PIPE_A] = CURSOR_A_OFFSET, \
111
+ [PIPE_B] = CURSOR_B_OFFSET, \
112
+ [PIPE_C] = CHV_CURSOR_C_OFFSET, \
113
+ }
52114
53115 #define IVB_CURSOR_OFFSETS \
54
- .cursor_offsets = { CURSOR_A_OFFSET, IVB_CURSOR_B_OFFSET, IVB_CURSOR_C_OFFSET }
116
+ .cursor_offsets = { \
117
+ [PIPE_A] = CURSOR_A_OFFSET, \
118
+ [PIPE_B] = IVB_CURSOR_B_OFFSET, \
119
+ [PIPE_C] = IVB_CURSOR_C_OFFSET, \
120
+ }
55121
56
-#define BDW_COLORS \
57
- .color = { .degamma_lut_size = 512, .gamma_lut_size = 512 }
122
+#define TGL_CURSOR_OFFSETS \
123
+ .cursor_offsets = { \
124
+ [PIPE_A] = CURSOR_A_OFFSET, \
125
+ [PIPE_B] = IVB_CURSOR_B_OFFSET, \
126
+ [PIPE_C] = IVB_CURSOR_C_OFFSET, \
127
+ [PIPE_D] = TGL_CURSOR_D_OFFSET, \
128
+ }
129
+
130
+#define I9XX_COLORS \
131
+ .color = { .gamma_lut_size = 256 }
132
+#define I965_COLORS \
133
+ .color = { .gamma_lut_size = 129, \
134
+ .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
135
+ }
136
+#define ILK_COLORS \
137
+ .color = { .gamma_lut_size = 1024 }
138
+#define IVB_COLORS \
139
+ .color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 }
58140 #define CHV_COLORS \
59
- .color = { .degamma_lut_size = 65, .gamma_lut_size = 257 }
141
+ .color = { .degamma_lut_size = 65, .gamma_lut_size = 257, \
142
+ .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
143
+ .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
144
+ }
60145 #define GLK_COLORS \
61
- .color = { .degamma_lut_size = 0, .gamma_lut_size = 1024 }
146
+ .color = { .degamma_lut_size = 33, .gamma_lut_size = 1024, \
147
+ .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
148
+ DRM_COLOR_LUT_EQUAL_CHANNELS, \
149
+ }
62150
63151 /* Keep in gen based order, and chronological order within a gen */
64152
65153 #define GEN_DEFAULT_PAGE_SIZES \
66154 .page_sizes = I915_GTT_PAGE_SIZE_4K
67155
68
-#define GEN2_FEATURES \
156
+#define GEN_DEFAULT_REGIONS \
157
+ .memory_regions = REGION_SMEM | REGION_STOLEN
158
+
159
+#define I830_FEATURES \
69160 GEN(2), \
70
- .num_pipes = 1, \
71
- .has_overlay = 1, .overlay_needs_physical = 1, \
72
- .has_gmch_display = 1, \
161
+ .is_mobile = 1, \
162
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
163
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \
164
+ .display.has_overlay = 1, \
165
+ .display.cursor_needs_physical = 1, \
166
+ .display.overlay_needs_physical = 1, \
167
+ .display.has_gmch = 1, \
168
+ .gpu_reset_clobbers_display = true, \
73169 .hws_needs_physical = 1, \
74170 .unfenced_needs_alignment = 1, \
75
- .ring_mask = RENDER_RING, \
171
+ .platform_engine_mask = BIT(RCS0), \
76172 .has_snoop = true, \
77
- GEN_DEFAULT_PIPEOFFSETS, \
173
+ .has_coherent_ggtt = false, \
174
+ .dma_mask_size = 32, \
175
+ I9XX_PIPE_OFFSETS, \
176
+ I9XX_CURSOR_OFFSETS, \
177
+ I9XX_COLORS, \
78178 GEN_DEFAULT_PAGE_SIZES, \
79
- CURSOR_OFFSETS
179
+ GEN_DEFAULT_REGIONS
80180
81
-static const struct intel_device_info intel_i830_info = {
82
- GEN2_FEATURES,
181
+#define I845_FEATURES \
182
+ GEN(2), \
183
+ .pipe_mask = BIT(PIPE_A), \
184
+ .cpu_transcoder_mask = BIT(TRANSCODER_A), \
185
+ .display.has_overlay = 1, \
186
+ .display.overlay_needs_physical = 1, \
187
+ .display.has_gmch = 1, \
188
+ .gpu_reset_clobbers_display = true, \
189
+ .hws_needs_physical = 1, \
190
+ .unfenced_needs_alignment = 1, \
191
+ .platform_engine_mask = BIT(RCS0), \
192
+ .has_snoop = true, \
193
+ .has_coherent_ggtt = false, \
194
+ .dma_mask_size = 32, \
195
+ I845_PIPE_OFFSETS, \
196
+ I845_CURSOR_OFFSETS, \
197
+ I9XX_COLORS, \
198
+ GEN_DEFAULT_PAGE_SIZES, \
199
+ GEN_DEFAULT_REGIONS
200
+
201
+static const struct intel_device_info i830_info = {
202
+ I830_FEATURES,
83203 PLATFORM(INTEL_I830),
84
- .is_mobile = 1, .cursor_needs_physical = 1,
85
- .num_pipes = 2, /* legal, last one wins */
86204 };
87205
88
-static const struct intel_device_info intel_i845g_info = {
89
- GEN2_FEATURES,
206
+static const struct intel_device_info i845g_info = {
207
+ I845_FEATURES,
90208 PLATFORM(INTEL_I845G),
91209 };
92210
93
-static const struct intel_device_info intel_i85x_info = {
94
- GEN2_FEATURES,
211
+static const struct intel_device_info i85x_info = {
212
+ I830_FEATURES,
95213 PLATFORM(INTEL_I85X),
96
- .is_mobile = 1,
97
- .num_pipes = 2, /* legal, last one wins */
98
- .cursor_needs_physical = 1,
99
- .has_fbc = 1,
214
+ .display.has_fbc = 1,
100215 };
101216
102
-static const struct intel_device_info intel_i865g_info = {
103
- GEN2_FEATURES,
217
+static const struct intel_device_info i865g_info = {
218
+ I845_FEATURES,
104219 PLATFORM(INTEL_I865G),
220
+ .display.has_fbc = 1,
105221 };
106222
107223 #define GEN3_FEATURES \
108224 GEN(3), \
109
- .num_pipes = 2, \
110
- .has_gmch_display = 1, \
111
- .ring_mask = RENDER_RING, \
225
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
226
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \
227
+ .display.has_gmch = 1, \
228
+ .gpu_reset_clobbers_display = true, \
229
+ .platform_engine_mask = BIT(RCS0), \
112230 .has_snoop = true, \
113
- GEN_DEFAULT_PIPEOFFSETS, \
231
+ .has_coherent_ggtt = true, \
232
+ .dma_mask_size = 32, \
233
+ I9XX_PIPE_OFFSETS, \
234
+ I9XX_CURSOR_OFFSETS, \
235
+ I9XX_COLORS, \
114236 GEN_DEFAULT_PAGE_SIZES, \
115
- CURSOR_OFFSETS
237
+ GEN_DEFAULT_REGIONS
116238
117
-static const struct intel_device_info intel_i915g_info = {
239
+static const struct intel_device_info i915g_info = {
118240 GEN3_FEATURES,
119241 PLATFORM(INTEL_I915G),
120
- .cursor_needs_physical = 1,
121
- .has_overlay = 1, .overlay_needs_physical = 1,
242
+ .has_coherent_ggtt = false,
243
+ .display.cursor_needs_physical = 1,
244
+ .display.has_overlay = 1,
245
+ .display.overlay_needs_physical = 1,
122246 .hws_needs_physical = 1,
123247 .unfenced_needs_alignment = 1,
124248 };
125249
126
-static const struct intel_device_info intel_i915gm_info = {
250
+static const struct intel_device_info i915gm_info = {
127251 GEN3_FEATURES,
128252 PLATFORM(INTEL_I915GM),
129253 .is_mobile = 1,
130
- .cursor_needs_physical = 1,
131
- .has_overlay = 1, .overlay_needs_physical = 1,
132
- .supports_tv = 1,
133
- .has_fbc = 1,
254
+ .display.cursor_needs_physical = 1,
255
+ .display.has_overlay = 1,
256
+ .display.overlay_needs_physical = 1,
257
+ .display.supports_tv = 1,
258
+ .display.has_fbc = 1,
134259 .hws_needs_physical = 1,
135260 .unfenced_needs_alignment = 1,
136261 };
137262
138
-static const struct intel_device_info intel_i945g_info = {
263
+static const struct intel_device_info i945g_info = {
139264 GEN3_FEATURES,
140265 PLATFORM(INTEL_I945G),
141
- .has_hotplug = 1, .cursor_needs_physical = 1,
142
- .has_overlay = 1, .overlay_needs_physical = 1,
266
+ .display.has_hotplug = 1,
267
+ .display.cursor_needs_physical = 1,
268
+ .display.has_overlay = 1,
269
+ .display.overlay_needs_physical = 1,
143270 .hws_needs_physical = 1,
144271 .unfenced_needs_alignment = 1,
145272 };
146273
147
-static const struct intel_device_info intel_i945gm_info = {
274
+static const struct intel_device_info i945gm_info = {
148275 GEN3_FEATURES,
149276 PLATFORM(INTEL_I945GM),
150277 .is_mobile = 1,
151
- .has_hotplug = 1, .cursor_needs_physical = 1,
152
- .has_overlay = 1, .overlay_needs_physical = 1,
153
- .supports_tv = 1,
154
- .has_fbc = 1,
278
+ .display.has_hotplug = 1,
279
+ .display.cursor_needs_physical = 1,
280
+ .display.has_overlay = 1,
281
+ .display.overlay_needs_physical = 1,
282
+ .display.supports_tv = 1,
283
+ .display.has_fbc = 1,
155284 .hws_needs_physical = 1,
156285 .unfenced_needs_alignment = 1,
157286 };
158287
159
-static const struct intel_device_info intel_g33_info = {
288
+static const struct intel_device_info g33_info = {
160289 GEN3_FEATURES,
161290 PLATFORM(INTEL_G33),
162
- .has_hotplug = 1,
163
- .has_overlay = 1,
291
+ .display.has_hotplug = 1,
292
+ .display.has_overlay = 1,
293
+ .dma_mask_size = 36,
164294 };
165295
166
-static const struct intel_device_info intel_pineview_info = {
296
+static const struct intel_device_info pnv_g_info = {
297
+ GEN3_FEATURES,
298
+ PLATFORM(INTEL_PINEVIEW),
299
+ .display.has_hotplug = 1,
300
+ .display.has_overlay = 1,
301
+ .dma_mask_size = 36,
302
+};
303
+
304
+static const struct intel_device_info pnv_m_info = {
167305 GEN3_FEATURES,
168306 PLATFORM(INTEL_PINEVIEW),
169307 .is_mobile = 1,
170
- .has_hotplug = 1,
171
- .has_overlay = 1,
308
+ .display.has_hotplug = 1,
309
+ .display.has_overlay = 1,
310
+ .dma_mask_size = 36,
172311 };
173312
174313 #define GEN4_FEATURES \
175314 GEN(4), \
176
- .num_pipes = 2, \
177
- .has_hotplug = 1, \
178
- .has_gmch_display = 1, \
179
- .ring_mask = RENDER_RING, \
315
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
316
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \
317
+ .display.has_hotplug = 1, \
318
+ .display.has_gmch = 1, \
319
+ .gpu_reset_clobbers_display = true, \
320
+ .platform_engine_mask = BIT(RCS0), \
180321 .has_snoop = true, \
181
- GEN_DEFAULT_PIPEOFFSETS, \
322
+ .has_coherent_ggtt = true, \
323
+ .dma_mask_size = 36, \
324
+ I9XX_PIPE_OFFSETS, \
325
+ I9XX_CURSOR_OFFSETS, \
326
+ I965_COLORS, \
182327 GEN_DEFAULT_PAGE_SIZES, \
183
- CURSOR_OFFSETS
328
+ GEN_DEFAULT_REGIONS
184329
185
-static const struct intel_device_info intel_i965g_info = {
330
+static const struct intel_device_info i965g_info = {
186331 GEN4_FEATURES,
187332 PLATFORM(INTEL_I965G),
188
- .has_overlay = 1,
333
+ .display.has_overlay = 1,
189334 .hws_needs_physical = 1,
190335 .has_snoop = false,
191336 };
192337
193
-static const struct intel_device_info intel_i965gm_info = {
338
+static const struct intel_device_info i965gm_info = {
194339 GEN4_FEATURES,
195340 PLATFORM(INTEL_I965GM),
196
- .is_mobile = 1, .has_fbc = 1,
197
- .has_overlay = 1,
198
- .supports_tv = 1,
341
+ .is_mobile = 1,
342
+ .display.has_fbc = 1,
343
+ .display.has_overlay = 1,
344
+ .display.supports_tv = 1,
199345 .hws_needs_physical = 1,
200346 .has_snoop = false,
201347 };
202348
203
-static const struct intel_device_info intel_g45_info = {
349
+static const struct intel_device_info g45_info = {
204350 GEN4_FEATURES,
205351 PLATFORM(INTEL_G45),
206
- .ring_mask = RENDER_RING | BSD_RING,
352
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0),
353
+ .gpu_reset_clobbers_display = false,
207354 };
208355
209
-static const struct intel_device_info intel_gm45_info = {
356
+static const struct intel_device_info gm45_info = {
210357 GEN4_FEATURES,
211358 PLATFORM(INTEL_GM45),
212
- .is_mobile = 1, .has_fbc = 1,
213
- .supports_tv = 1,
214
- .ring_mask = RENDER_RING | BSD_RING,
359
+ .is_mobile = 1,
360
+ .display.has_fbc = 1,
361
+ .display.supports_tv = 1,
362
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0),
363
+ .gpu_reset_clobbers_display = false,
215364 };
216365
217366 #define GEN5_FEATURES \
218367 GEN(5), \
219
- .num_pipes = 2, \
220
- .has_hotplug = 1, \
221
- .ring_mask = RENDER_RING | BSD_RING, \
368
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
369
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \
370
+ .display.has_hotplug = 1, \
371
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0), \
222372 .has_snoop = true, \
373
+ .has_coherent_ggtt = true, \
223374 /* ilk does support rc6, but we do not implement [power] contexts */ \
224375 .has_rc6 = 0, \
225
- GEN_DEFAULT_PIPEOFFSETS, \
376
+ .dma_mask_size = 36, \
377
+ I9XX_PIPE_OFFSETS, \
378
+ I9XX_CURSOR_OFFSETS, \
379
+ ILK_COLORS, \
226380 GEN_DEFAULT_PAGE_SIZES, \
227
- CURSOR_OFFSETS
381
+ GEN_DEFAULT_REGIONS
228382
229
-static const struct intel_device_info intel_ironlake_d_info = {
383
+static const struct intel_device_info ilk_d_info = {
230384 GEN5_FEATURES,
231385 PLATFORM(INTEL_IRONLAKE),
232386 };
233387
234
-static const struct intel_device_info intel_ironlake_m_info = {
388
+static const struct intel_device_info ilk_m_info = {
235389 GEN5_FEATURES,
236390 PLATFORM(INTEL_IRONLAKE),
237
- .is_mobile = 1, .has_fbc = 1,
391
+ .is_mobile = 1,
392
+ .has_rps = true,
393
+ .display.has_fbc = 1,
238394 };
239395
240396 #define GEN6_FEATURES \
241397 GEN(6), \
242
- .num_pipes = 2, \
243
- .has_hotplug = 1, \
244
- .has_fbc = 1, \
245
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
398
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
399
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \
400
+ .display.has_hotplug = 1, \
401
+ .display.has_fbc = 1, \
402
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
403
+ .has_coherent_ggtt = true, \
246404 .has_llc = 1, \
247405 .has_rc6 = 1, \
248406 .has_rc6p = 1, \
249
- .has_aliasing_ppgtt = 1, \
250
- GEN_DEFAULT_PIPEOFFSETS, \
407
+ .has_rps = true, \
408
+ .dma_mask_size = 40, \
409
+ .ppgtt_type = INTEL_PPGTT_ALIASING, \
410
+ .ppgtt_size = 31, \
411
+ I9XX_PIPE_OFFSETS, \
412
+ I9XX_CURSOR_OFFSETS, \
413
+ ILK_COLORS, \
251414 GEN_DEFAULT_PAGE_SIZES, \
252
- CURSOR_OFFSETS
415
+ GEN_DEFAULT_REGIONS
253416
254417 #define SNB_D_PLATFORM \
255418 GEN6_FEATURES, \
256419 PLATFORM(INTEL_SANDYBRIDGE)
257420
258
-static const struct intel_device_info intel_sandybridge_d_gt1_info = {
421
+static const struct intel_device_info snb_d_gt1_info = {
259422 SNB_D_PLATFORM,
260423 .gt = 1,
261424 };
262425
263
-static const struct intel_device_info intel_sandybridge_d_gt2_info = {
426
+static const struct intel_device_info snb_d_gt2_info = {
264427 SNB_D_PLATFORM,
265428 .gt = 2,
266429 };
....@@ -271,42 +434,48 @@
271434 .is_mobile = 1
272435
273436
274
-static const struct intel_device_info intel_sandybridge_m_gt1_info = {
437
+static const struct intel_device_info snb_m_gt1_info = {
275438 SNB_M_PLATFORM,
276439 .gt = 1,
277440 };
278441
279
-static const struct intel_device_info intel_sandybridge_m_gt2_info = {
442
+static const struct intel_device_info snb_m_gt2_info = {
280443 SNB_M_PLATFORM,
281444 .gt = 2,
282445 };
283446
284447 #define GEN7_FEATURES \
285448 GEN(7), \
286
- .num_pipes = 3, \
287
- .has_hotplug = 1, \
288
- .has_fbc = 1, \
289
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
449
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \
450
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), \
451
+ .display.has_hotplug = 1, \
452
+ .display.has_fbc = 1, \
453
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
454
+ .has_coherent_ggtt = true, \
290455 .has_llc = 1, \
291456 .has_rc6 = 1, \
292457 .has_rc6p = 1, \
293
- .has_aliasing_ppgtt = 1, \
294
- .has_full_ppgtt = 1, \
295
- GEN_DEFAULT_PIPEOFFSETS, \
458
+ .has_rps = true, \
459
+ .dma_mask_size = 40, \
460
+ .ppgtt_type = INTEL_PPGTT_ALIASING, \
461
+ .ppgtt_size = 31, \
462
+ IVB_PIPE_OFFSETS, \
463
+ IVB_CURSOR_OFFSETS, \
464
+ IVB_COLORS, \
296465 GEN_DEFAULT_PAGE_SIZES, \
297
- IVB_CURSOR_OFFSETS
466
+ GEN_DEFAULT_REGIONS
298467
299468 #define IVB_D_PLATFORM \
300469 GEN7_FEATURES, \
301470 PLATFORM(INTEL_IVYBRIDGE), \
302471 .has_l3_dpf = 1
303472
304
-static const struct intel_device_info intel_ivybridge_d_gt1_info = {
473
+static const struct intel_device_info ivb_d_gt1_info = {
305474 IVB_D_PLATFORM,
306475 .gt = 1,
307476 };
308477
309
-static const struct intel_device_info intel_ivybridge_d_gt2_info = {
478
+static const struct intel_device_info ivb_d_gt2_info = {
310479 IVB_D_PLATFORM,
311480 .gt = 2,
312481 };
....@@ -317,52 +486,62 @@
317486 .is_mobile = 1, \
318487 .has_l3_dpf = 1
319488
320
-static const struct intel_device_info intel_ivybridge_m_gt1_info = {
489
+static const struct intel_device_info ivb_m_gt1_info = {
321490 IVB_M_PLATFORM,
322491 .gt = 1,
323492 };
324493
325
-static const struct intel_device_info intel_ivybridge_m_gt2_info = {
494
+static const struct intel_device_info ivb_m_gt2_info = {
326495 IVB_M_PLATFORM,
327496 .gt = 2,
328497 };
329498
330
-static const struct intel_device_info intel_ivybridge_q_info = {
499
+static const struct intel_device_info ivb_q_info = {
331500 GEN7_FEATURES,
332501 PLATFORM(INTEL_IVYBRIDGE),
333502 .gt = 2,
334
- .num_pipes = 0, /* legal, last one wins */
503
+ .pipe_mask = 0, /* legal, last one wins */
504
+ .cpu_transcoder_mask = 0,
335505 .has_l3_dpf = 1,
336506 };
337507
338
-static const struct intel_device_info intel_valleyview_info = {
508
+static const struct intel_device_info vlv_info = {
339509 PLATFORM(INTEL_VALLEYVIEW),
340510 GEN(7),
341511 .is_lp = 1,
342
- .num_pipes = 2,
512
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B),
513
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B),
343514 .has_runtime_pm = 1,
344515 .has_rc6 = 1,
345
- .has_gmch_display = 1,
346
- .has_hotplug = 1,
347
- .has_aliasing_ppgtt = 1,
348
- .has_full_ppgtt = 1,
516
+ .has_rps = true,
517
+ .display.has_gmch = 1,
518
+ .display.has_hotplug = 1,
519
+ .dma_mask_size = 40,
520
+ .ppgtt_type = INTEL_PPGTT_ALIASING,
521
+ .ppgtt_size = 31,
349522 .has_snoop = true,
350
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING,
523
+ .has_coherent_ggtt = false,
524
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0),
351525 .display_mmio_offset = VLV_DISPLAY_BASE,
526
+ I9XX_PIPE_OFFSETS,
527
+ I9XX_CURSOR_OFFSETS,
528
+ I965_COLORS,
352529 GEN_DEFAULT_PAGE_SIZES,
353
- GEN_DEFAULT_PIPEOFFSETS,
354
- CURSOR_OFFSETS
530
+ GEN_DEFAULT_REGIONS,
355531 };
356532
357533 #define G75_FEATURES \
358534 GEN7_FEATURES, \
359
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
360
- .has_ddi = 1, \
535
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
536
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
537
+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), \
538
+ .display.has_ddi = 1, \
361539 .has_fpga_dbg = 1, \
362
- .has_psr = 1, \
363
- .has_resource_streamer = 1, \
364
- .has_dp_mst = 1, \
540
+ .display.has_psr = 1, \
541
+ .display.has_psr_hw_tracking = 1, \
542
+ .display.has_dp_mst = 1, \
365543 .has_rc6p = 0 /* RC6p removed-by HSW */, \
544
+ HSW_PIPE_OFFSETS, \
366545 .has_runtime_pm = 1
367546
368547 #define HSW_PLATFORM \
....@@ -370,17 +549,17 @@
370549 PLATFORM(INTEL_HASWELL), \
371550 .has_l3_dpf = 1
372551
373
-static const struct intel_device_info intel_haswell_gt1_info = {
552
+static const struct intel_device_info hsw_gt1_info = {
374553 HSW_PLATFORM,
375554 .gt = 1,
376555 };
377556
378
-static const struct intel_device_info intel_haswell_gt2_info = {
557
+static const struct intel_device_info hsw_gt2_info = {
379558 HSW_PLATFORM,
380559 .gt = 2,
381560 };
382561
383
-static const struct intel_device_info intel_haswell_gt3_info = {
562
+static const struct intel_device_info hsw_gt3_info = {
384563 HSW_PLATFORM,
385564 .gt = 3,
386565 };
....@@ -388,11 +567,10 @@
388567 #define GEN8_FEATURES \
389568 G75_FEATURES, \
390569 GEN(8), \
391
- BDW_COLORS, \
392
- .page_sizes = I915_GTT_PAGE_SIZE_4K | \
393
- I915_GTT_PAGE_SIZE_2M, \
394570 .has_logical_ring_contexts = 1, \
395
- .has_full_48bit_ppgtt = 1, \
571
+ .dma_mask_size = 39, \
572
+ .ppgtt_type = INTEL_PPGTT_FULL, \
573
+ .ppgtt_size = 48, \
396574 .has_64bit_reloc = 1, \
397575 .has_reset_engine = 1
398576
....@@ -400,17 +578,17 @@
400578 GEN8_FEATURES, \
401579 PLATFORM(INTEL_BROADWELL)
402580
403
-static const struct intel_device_info intel_broadwell_gt1_info = {
581
+static const struct intel_device_info bdw_gt1_info = {
404582 BDW_PLATFORM,
405583 .gt = 1,
406584 };
407585
408
-static const struct intel_device_info intel_broadwell_gt2_info = {
586
+static const struct intel_device_info bdw_gt2_info = {
409587 BDW_PLATFORM,
410588 .gt = 2,
411589 };
412590
413
-static const struct intel_device_info intel_broadwell_rsvd_info = {
591
+static const struct intel_device_info bdw_rsvd_info = {
414592 BDW_PLATFORM,
415593 .gt = 3,
416594 /* According to the device ID those devices are GT3, they were
....@@ -418,76 +596,83 @@
418596 */
419597 };
420598
421
-static const struct intel_device_info intel_broadwell_gt3_info = {
599
+static const struct intel_device_info bdw_gt3_info = {
422600 BDW_PLATFORM,
423601 .gt = 3,
424
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
602
+ .platform_engine_mask =
603
+ BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
425604 };
426605
427
-static const struct intel_device_info intel_cherryview_info = {
606
+static const struct intel_device_info chv_info = {
428607 PLATFORM(INTEL_CHERRYVIEW),
429608 GEN(8),
430
- .num_pipes = 3,
431
- .has_hotplug = 1,
609
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C),
610
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C),
611
+ .display.has_hotplug = 1,
432612 .is_lp = 1,
433
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
613
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0),
434614 .has_64bit_reloc = 1,
435615 .has_runtime_pm = 1,
436
- .has_resource_streamer = 1,
437616 .has_rc6 = 1,
617
+ .has_rps = true,
438618 .has_logical_ring_contexts = 1,
439
- .has_gmch_display = 1,
440
- .has_aliasing_ppgtt = 1,
441
- .has_full_ppgtt = 1,
619
+ .display.has_gmch = 1,
620
+ .dma_mask_size = 39,
621
+ .ppgtt_type = INTEL_PPGTT_FULL,
622
+ .ppgtt_size = 32,
442623 .has_reset_engine = 1,
443624 .has_snoop = true,
625
+ .has_coherent_ggtt = false,
444626 .display_mmio_offset = VLV_DISPLAY_BASE,
445
- GEN_DEFAULT_PAGE_SIZES,
446
- GEN_CHV_PIPEOFFSETS,
447
- CURSOR_OFFSETS,
627
+ CHV_PIPE_OFFSETS,
628
+ CHV_CURSOR_OFFSETS,
448629 CHV_COLORS,
630
+ GEN_DEFAULT_PAGE_SIZES,
631
+ GEN_DEFAULT_REGIONS,
449632 };
450633
451634 #define GEN9_DEFAULT_PAGE_SIZES \
452635 .page_sizes = I915_GTT_PAGE_SIZE_4K | \
453
- I915_GTT_PAGE_SIZE_64K | \
454
- I915_GTT_PAGE_SIZE_2M
636
+ I915_GTT_PAGE_SIZE_64K
455637
456638 #define GEN9_FEATURES \
457639 GEN8_FEATURES, \
458640 GEN(9), \
459641 GEN9_DEFAULT_PAGE_SIZES, \
460642 .has_logical_ring_preemption = 1, \
461
- .has_csr = 1, \
462
- .has_guc = 1, \
463
- .has_ipc = 1, \
464
- .ddb_size = 896
643
+ .display.has_csr = 1, \
644
+ .has_gt_uc = 1, \
645
+ .display.has_hdcp = 1, \
646
+ .display.has_ipc = 1, \
647
+ .ddb_size = 896, \
648
+ .num_supported_dbuf_slices = 1
465649
466650 #define SKL_PLATFORM \
467651 GEN9_FEATURES, \
468652 PLATFORM(INTEL_SKYLAKE)
469653
470
-static const struct intel_device_info intel_skylake_gt1_info = {
654
+static const struct intel_device_info skl_gt1_info = {
471655 SKL_PLATFORM,
472656 .gt = 1,
473657 };
474658
475
-static const struct intel_device_info intel_skylake_gt2_info = {
659
+static const struct intel_device_info skl_gt2_info = {
476660 SKL_PLATFORM,
477661 .gt = 2,
478662 };
479663
480664 #define SKL_GT3_PLUS_PLATFORM \
481665 SKL_PLATFORM, \
482
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING
666
+ .platform_engine_mask = \
667
+ BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1)
483668
484669
485
-static const struct intel_device_info intel_skylake_gt3_info = {
670
+static const struct intel_device_info skl_gt3_info = {
486671 SKL_GT3_PLUS_PLATFORM,
487672 .gt = 3,
488673 };
489674
490
-static const struct intel_device_info intel_skylake_gt4_info = {
675
+static const struct intel_device_info skl_gt4_info = {
491676 SKL_GT3_PLUS_PLATFORM,
492677 .gt = 4,
493678 };
....@@ -495,41 +680,48 @@
495680 #define GEN9_LP_FEATURES \
496681 GEN(9), \
497682 .is_lp = 1, \
498
- .has_hotplug = 1, \
499
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
500
- .num_pipes = 3, \
683
+ .num_supported_dbuf_slices = 1, \
684
+ .display.has_hotplug = 1, \
685
+ .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
686
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \
687
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
688
+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \
689
+ BIT(TRANSCODER_DSI_A) | BIT(TRANSCODER_DSI_C), \
501690 .has_64bit_reloc = 1, \
502
- .has_ddi = 1, \
691
+ .display.has_ddi = 1, \
503692 .has_fpga_dbg = 1, \
504
- .has_fbc = 1, \
505
- .has_psr = 1, \
693
+ .display.has_fbc = 1, \
694
+ .display.has_hdcp = 1, \
695
+ .display.has_psr = 1, \
696
+ .display.has_psr_hw_tracking = 1, \
506697 .has_runtime_pm = 1, \
507
- .has_pooled_eu = 0, \
508
- .has_csr = 1, \
509
- .has_resource_streamer = 1, \
698
+ .display.has_csr = 1, \
510699 .has_rc6 = 1, \
511
- .has_dp_mst = 1, \
700
+ .has_rps = true, \
701
+ .display.has_dp_mst = 1, \
512702 .has_logical_ring_contexts = 1, \
513703 .has_logical_ring_preemption = 1, \
514
- .has_guc = 1, \
515
- .has_aliasing_ppgtt = 1, \
516
- .has_full_ppgtt = 1, \
517
- .has_full_48bit_ppgtt = 1, \
704
+ .has_gt_uc = 1, \
705
+ .dma_mask_size = 39, \
706
+ .ppgtt_type = INTEL_PPGTT_FULL, \
707
+ .ppgtt_size = 48, \
518708 .has_reset_engine = 1, \
519709 .has_snoop = true, \
520
- .has_ipc = 1, \
521
- GEN9_DEFAULT_PAGE_SIZES, \
522
- GEN_DEFAULT_PIPEOFFSETS, \
710
+ .has_coherent_ggtt = false, \
711
+ .display.has_ipc = 1, \
712
+ HSW_PIPE_OFFSETS, \
523713 IVB_CURSOR_OFFSETS, \
524
- BDW_COLORS
714
+ IVB_COLORS, \
715
+ GEN9_DEFAULT_PAGE_SIZES, \
716
+ GEN_DEFAULT_REGIONS
525717
526
-static const struct intel_device_info intel_broxton_info = {
718
+static const struct intel_device_info bxt_info = {
527719 GEN9_LP_FEATURES,
528720 PLATFORM(INTEL_BROXTON),
529721 .ddb_size = 512,
530722 };
531723
532
-static const struct intel_device_info intel_geminilake_info = {
724
+static const struct intel_device_info glk_info = {
533725 GEN9_LP_FEATURES,
534726 PLATFORM(INTEL_GEMINILAKE),
535727 .ddb_size = 1024,
....@@ -540,66 +732,185 @@
540732 GEN9_FEATURES, \
541733 PLATFORM(INTEL_KABYLAKE)
542734
543
-static const struct intel_device_info intel_kabylake_gt1_info = {
735
+static const struct intel_device_info kbl_gt1_info = {
544736 KBL_PLATFORM,
545737 .gt = 1,
546738 };
547739
548
-static const struct intel_device_info intel_kabylake_gt2_info = {
740
+static const struct intel_device_info kbl_gt2_info = {
549741 KBL_PLATFORM,
550742 .gt = 2,
551743 };
552744
553
-static const struct intel_device_info intel_kabylake_gt3_info = {
745
+static const struct intel_device_info kbl_gt3_info = {
554746 KBL_PLATFORM,
555747 .gt = 3,
556
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
748
+ .platform_engine_mask =
749
+ BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
557750 };
558751
559752 #define CFL_PLATFORM \
560753 GEN9_FEATURES, \
561754 PLATFORM(INTEL_COFFEELAKE)
562755
563
-static const struct intel_device_info intel_coffeelake_gt1_info = {
756
+static const struct intel_device_info cfl_gt1_info = {
564757 CFL_PLATFORM,
565758 .gt = 1,
566759 };
567760
568
-static const struct intel_device_info intel_coffeelake_gt2_info = {
761
+static const struct intel_device_info cfl_gt2_info = {
569762 CFL_PLATFORM,
570763 .gt = 2,
571764 };
572765
573
-static const struct intel_device_info intel_coffeelake_gt3_info = {
766
+static const struct intel_device_info cfl_gt3_info = {
574767 CFL_PLATFORM,
575768 .gt = 3,
576
- .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
769
+ .platform_engine_mask =
770
+ BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
771
+};
772
+
773
+#define CML_PLATFORM \
774
+ GEN9_FEATURES, \
775
+ PLATFORM(INTEL_COMETLAKE)
776
+
777
+static const struct intel_device_info cml_gt1_info = {
778
+ CML_PLATFORM,
779
+ .gt = 1,
780
+};
781
+
782
+static const struct intel_device_info cml_gt2_info = {
783
+ CML_PLATFORM,
784
+ .gt = 2,
577785 };
578786
579787 #define GEN10_FEATURES \
580788 GEN9_FEATURES, \
581789 GEN(10), \
582790 .ddb_size = 1024, \
791
+ .display.has_dsc = 1, \
792
+ .has_coherent_ggtt = false, \
583793 GLK_COLORS
584794
585
-static const struct intel_device_info intel_cannonlake_info = {
795
+static const struct intel_device_info cnl_info = {
586796 GEN10_FEATURES,
587797 PLATFORM(INTEL_CANNONLAKE),
588798 .gt = 2,
589799 };
590800
801
+#define GEN11_DEFAULT_PAGE_SIZES \
802
+ .page_sizes = I915_GTT_PAGE_SIZE_4K | \
803
+ I915_GTT_PAGE_SIZE_64K | \
804
+ I915_GTT_PAGE_SIZE_2M
805
+
591806 #define GEN11_FEATURES \
592807 GEN10_FEATURES, \
808
+ GEN11_DEFAULT_PAGE_SIZES, \
809
+ .abox_mask = BIT(0), \
810
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
811
+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \
812
+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \
813
+ .pipe_offsets = { \
814
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
815
+ [TRANSCODER_B] = PIPE_B_OFFSET, \
816
+ [TRANSCODER_C] = PIPE_C_OFFSET, \
817
+ [TRANSCODER_EDP] = PIPE_EDP_OFFSET, \
818
+ [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \
819
+ [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \
820
+ }, \
821
+ .trans_offsets = { \
822
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
823
+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \
824
+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \
825
+ [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, \
826
+ [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \
827
+ [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \
828
+ }, \
593829 GEN(11), \
594830 .ddb_size = 2048, \
595
- .has_logical_ring_elsq = 1
831
+ .num_supported_dbuf_slices = 2, \
832
+ .has_logical_ring_elsq = 1, \
833
+ .color = { .degamma_lut_size = 33, .gamma_lut_size = 262145 }
596834
597
-static const struct intel_device_info intel_icelake_11_info = {
835
+static const struct intel_device_info icl_info = {
598836 GEN11_FEATURES,
599837 PLATFORM(INTEL_ICELAKE),
600
- .is_alpha_support = 1,
601
- .has_resource_streamer = 0,
602
- .ring_mask = RENDER_RING | BLT_RING | VEBOX_RING | BSD_RING | BSD3_RING,
838
+ .platform_engine_mask =
839
+ BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
840
+};
841
+
842
+static const struct intel_device_info ehl_info = {
843
+ GEN11_FEATURES,
844
+ PLATFORM(INTEL_ELKHARTLAKE),
845
+ .require_force_probe = 1,
846
+ .platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0),
847
+ .ppgtt_size = 36,
848
+};
849
+
850
+#define GEN12_FEATURES \
851
+ GEN11_FEATURES, \
852
+ GEN(12), \
853
+ .abox_mask = GENMASK(2, 1), \
854
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \
855
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
856
+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \
857
+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \
858
+ .pipe_offsets = { \
859
+ [TRANSCODER_A] = PIPE_A_OFFSET, \
860
+ [TRANSCODER_B] = PIPE_B_OFFSET, \
861
+ [TRANSCODER_C] = PIPE_C_OFFSET, \
862
+ [TRANSCODER_D] = PIPE_D_OFFSET, \
863
+ [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \
864
+ [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \
865
+ }, \
866
+ .trans_offsets = { \
867
+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \
868
+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \
869
+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \
870
+ [TRANSCODER_D] = TRANSCODER_D_OFFSET, \
871
+ [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \
872
+ [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \
873
+ }, \
874
+ TGL_CURSOR_OFFSETS, \
875
+ .has_global_mocs = 1, \
876
+ .display.has_dsb = 1
877
+
878
+static const struct intel_device_info tgl_info = {
879
+ GEN12_FEATURES,
880
+ PLATFORM(INTEL_TIGERLAKE),
881
+ .display.has_modular_fia = 1,
882
+ .platform_engine_mask =
883
+ BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
884
+};
885
+
886
+static const struct intel_device_info rkl_info = {
887
+ GEN12_FEATURES,
888
+ PLATFORM(INTEL_ROCKETLAKE),
889
+ .abox_mask = BIT(0),
890
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C),
891
+ .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |
892
+ BIT(TRANSCODER_C),
893
+ .require_force_probe = 1,
894
+ .display.has_hti = 1,
895
+ .display.has_psr_hw_tracking = 0,
896
+ .platform_engine_mask =
897
+ BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0),
898
+};
899
+
900
+#define GEN12_DGFX_FEATURES \
901
+ GEN12_FEATURES, \
902
+ .memory_regions = REGION_SMEM | REGION_LMEM, \
903
+ .has_master_unit_irq = 1, \
904
+ .is_dgfx = 1
905
+
906
+static const struct intel_device_info dg1_info __maybe_unused = {
907
+ GEN12_DGFX_FEATURES,
908
+ PLATFORM(INTEL_DG1),
909
+ .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D),
910
+ .require_force_probe = 1,
911
+ .platform_engine_mask =
912
+ BIT(RCS0) | BIT(BCS0) | BIT(VECS0) |
913
+ BIT(VCS0) | BIT(VCS2),
603914 };
604915
605916 #undef GEN
....@@ -612,77 +923,116 @@
612923 * PCI ID matches, otherwise we'll use the wrong info struct above.
613924 */
614925 static const struct pci_device_id pciidlist[] = {
615
- INTEL_I830_IDS(&intel_i830_info),
616
- INTEL_I845G_IDS(&intel_i845g_info),
617
- INTEL_I85X_IDS(&intel_i85x_info),
618
- INTEL_I865G_IDS(&intel_i865g_info),
619
- INTEL_I915G_IDS(&intel_i915g_info),
620
- INTEL_I915GM_IDS(&intel_i915gm_info),
621
- INTEL_I945G_IDS(&intel_i945g_info),
622
- INTEL_I945GM_IDS(&intel_i945gm_info),
623
- INTEL_I965G_IDS(&intel_i965g_info),
624
- INTEL_G33_IDS(&intel_g33_info),
625
- INTEL_I965GM_IDS(&intel_i965gm_info),
626
- INTEL_GM45_IDS(&intel_gm45_info),
627
- INTEL_G45_IDS(&intel_g45_info),
628
- INTEL_PINEVIEW_IDS(&intel_pineview_info),
629
- INTEL_IRONLAKE_D_IDS(&intel_ironlake_d_info),
630
- INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),
631
- INTEL_SNB_D_GT1_IDS(&intel_sandybridge_d_gt1_info),
632
- INTEL_SNB_D_GT2_IDS(&intel_sandybridge_d_gt2_info),
633
- INTEL_SNB_M_GT1_IDS(&intel_sandybridge_m_gt1_info),
634
- INTEL_SNB_M_GT2_IDS(&intel_sandybridge_m_gt2_info),
635
- INTEL_IVB_Q_IDS(&intel_ivybridge_q_info), /* must be first IVB */
636
- INTEL_IVB_M_GT1_IDS(&intel_ivybridge_m_gt1_info),
637
- INTEL_IVB_M_GT2_IDS(&intel_ivybridge_m_gt2_info),
638
- INTEL_IVB_D_GT1_IDS(&intel_ivybridge_d_gt1_info),
639
- INTEL_IVB_D_GT2_IDS(&intel_ivybridge_d_gt2_info),
640
- INTEL_HSW_GT1_IDS(&intel_haswell_gt1_info),
641
- INTEL_HSW_GT2_IDS(&intel_haswell_gt2_info),
642
- INTEL_HSW_GT3_IDS(&intel_haswell_gt3_info),
643
- INTEL_VLV_IDS(&intel_valleyview_info),
644
- INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info),
645
- INTEL_BDW_GT2_IDS(&intel_broadwell_gt2_info),
646
- INTEL_BDW_GT3_IDS(&intel_broadwell_gt3_info),
647
- INTEL_BDW_RSVD_IDS(&intel_broadwell_rsvd_info),
648
- INTEL_CHV_IDS(&intel_cherryview_info),
649
- INTEL_SKL_GT1_IDS(&intel_skylake_gt1_info),
650
- INTEL_SKL_GT2_IDS(&intel_skylake_gt2_info),
651
- INTEL_SKL_GT3_IDS(&intel_skylake_gt3_info),
652
- INTEL_SKL_GT4_IDS(&intel_skylake_gt4_info),
653
- INTEL_BXT_IDS(&intel_broxton_info),
654
- INTEL_GLK_IDS(&intel_geminilake_info),
655
- INTEL_KBL_GT1_IDS(&intel_kabylake_gt1_info),
656
- INTEL_KBL_GT2_IDS(&intel_kabylake_gt2_info),
657
- INTEL_KBL_GT3_IDS(&intel_kabylake_gt3_info),
658
- INTEL_KBL_GT4_IDS(&intel_kabylake_gt3_info),
659
- INTEL_AML_GT2_IDS(&intel_kabylake_gt2_info),
660
- INTEL_CFL_S_GT1_IDS(&intel_coffeelake_gt1_info),
661
- INTEL_CFL_S_GT2_IDS(&intel_coffeelake_gt2_info),
662
- INTEL_CFL_H_GT2_IDS(&intel_coffeelake_gt2_info),
663
- INTEL_CFL_U_GT2_IDS(&intel_coffeelake_gt2_info),
664
- INTEL_CFL_U_GT3_IDS(&intel_coffeelake_gt3_info),
665
- INTEL_WHL_U_GT1_IDS(&intel_coffeelake_gt1_info),
666
- INTEL_WHL_U_GT2_IDS(&intel_coffeelake_gt2_info),
667
- INTEL_WHL_U_GT3_IDS(&intel_coffeelake_gt3_info),
668
- INTEL_CNL_IDS(&intel_cannonlake_info),
669
- INTEL_ICL_11_IDS(&intel_icelake_11_info),
926
+ INTEL_I830_IDS(&i830_info),
927
+ INTEL_I845G_IDS(&i845g_info),
928
+ INTEL_I85X_IDS(&i85x_info),
929
+ INTEL_I865G_IDS(&i865g_info),
930
+ INTEL_I915G_IDS(&i915g_info),
931
+ INTEL_I915GM_IDS(&i915gm_info),
932
+ INTEL_I945G_IDS(&i945g_info),
933
+ INTEL_I945GM_IDS(&i945gm_info),
934
+ INTEL_I965G_IDS(&i965g_info),
935
+ INTEL_G33_IDS(&g33_info),
936
+ INTEL_I965GM_IDS(&i965gm_info),
937
+ INTEL_GM45_IDS(&gm45_info),
938
+ INTEL_G45_IDS(&g45_info),
939
+ INTEL_PINEVIEW_G_IDS(&pnv_g_info),
940
+ INTEL_PINEVIEW_M_IDS(&pnv_m_info),
941
+ INTEL_IRONLAKE_D_IDS(&ilk_d_info),
942
+ INTEL_IRONLAKE_M_IDS(&ilk_m_info),
943
+ INTEL_SNB_D_GT1_IDS(&snb_d_gt1_info),
944
+ INTEL_SNB_D_GT2_IDS(&snb_d_gt2_info),
945
+ INTEL_SNB_M_GT1_IDS(&snb_m_gt1_info),
946
+ INTEL_SNB_M_GT2_IDS(&snb_m_gt2_info),
947
+ INTEL_IVB_Q_IDS(&ivb_q_info), /* must be first IVB */
948
+ INTEL_IVB_M_GT1_IDS(&ivb_m_gt1_info),
949
+ INTEL_IVB_M_GT2_IDS(&ivb_m_gt2_info),
950
+ INTEL_IVB_D_GT1_IDS(&ivb_d_gt1_info),
951
+ INTEL_IVB_D_GT2_IDS(&ivb_d_gt2_info),
952
+ INTEL_HSW_GT1_IDS(&hsw_gt1_info),
953
+ INTEL_HSW_GT2_IDS(&hsw_gt2_info),
954
+ INTEL_HSW_GT3_IDS(&hsw_gt3_info),
955
+ INTEL_VLV_IDS(&vlv_info),
956
+ INTEL_BDW_GT1_IDS(&bdw_gt1_info),
957
+ INTEL_BDW_GT2_IDS(&bdw_gt2_info),
958
+ INTEL_BDW_GT3_IDS(&bdw_gt3_info),
959
+ INTEL_BDW_RSVD_IDS(&bdw_rsvd_info),
960
+ INTEL_CHV_IDS(&chv_info),
961
+ INTEL_SKL_GT1_IDS(&skl_gt1_info),
962
+ INTEL_SKL_GT2_IDS(&skl_gt2_info),
963
+ INTEL_SKL_GT3_IDS(&skl_gt3_info),
964
+ INTEL_SKL_GT4_IDS(&skl_gt4_info),
965
+ INTEL_BXT_IDS(&bxt_info),
966
+ INTEL_GLK_IDS(&glk_info),
967
+ INTEL_KBL_GT1_IDS(&kbl_gt1_info),
968
+ INTEL_KBL_GT2_IDS(&kbl_gt2_info),
969
+ INTEL_KBL_GT3_IDS(&kbl_gt3_info),
970
+ INTEL_KBL_GT4_IDS(&kbl_gt3_info),
971
+ INTEL_AML_KBL_GT2_IDS(&kbl_gt2_info),
972
+ INTEL_CFL_S_GT1_IDS(&cfl_gt1_info),
973
+ INTEL_CFL_S_GT2_IDS(&cfl_gt2_info),
974
+ INTEL_CFL_H_GT1_IDS(&cfl_gt1_info),
975
+ INTEL_CFL_H_GT2_IDS(&cfl_gt2_info),
976
+ INTEL_CFL_U_GT2_IDS(&cfl_gt2_info),
977
+ INTEL_CFL_U_GT3_IDS(&cfl_gt3_info),
978
+ INTEL_WHL_U_GT1_IDS(&cfl_gt1_info),
979
+ INTEL_WHL_U_GT2_IDS(&cfl_gt2_info),
980
+ INTEL_AML_CFL_GT2_IDS(&cfl_gt2_info),
981
+ INTEL_WHL_U_GT3_IDS(&cfl_gt3_info),
982
+ INTEL_CML_GT1_IDS(&cml_gt1_info),
983
+ INTEL_CML_GT2_IDS(&cml_gt2_info),
984
+ INTEL_CML_U_GT1_IDS(&cml_gt1_info),
985
+ INTEL_CML_U_GT2_IDS(&cml_gt2_info),
986
+ INTEL_CNL_IDS(&cnl_info),
987
+ INTEL_ICL_11_IDS(&icl_info),
988
+ INTEL_EHL_IDS(&ehl_info),
989
+ INTEL_TGL_12_IDS(&tgl_info),
990
+ INTEL_RKL_IDS(&rkl_info),
670991 {0, 0, 0}
671992 };
672993 MODULE_DEVICE_TABLE(pci, pciidlist);
673994
674995 static void i915_pci_remove(struct pci_dev *pdev)
675996 {
676
- struct drm_device *dev;
997
+ struct drm_i915_private *i915;
677998
678
- dev = pci_get_drvdata(pdev);
679
- if (!dev) /* driver load aborted, nothing to cleanup */
999
+ i915 = pci_get_drvdata(pdev);
1000
+ if (!i915) /* driver load aborted, nothing to cleanup */
6801001 return;
6811002
682
- i915_driver_unload(dev);
683
- drm_dev_put(dev);
684
-
1003
+ i915_driver_remove(i915);
6851004 pci_set_drvdata(pdev, NULL);
1005
+}
1006
+
1007
+/* is device_id present in comma separated list of ids */
1008
+static bool force_probe(u16 device_id, const char *devices)
1009
+{
1010
+ char *s, *p, *tok;
1011
+ bool ret;
1012
+
1013
+ if (!devices || !*devices)
1014
+ return false;
1015
+
1016
+ /* match everything */
1017
+ if (strcmp(devices, "*") == 0)
1018
+ return true;
1019
+
1020
+ s = kstrdup(devices, GFP_KERNEL);
1021
+ if (!s)
1022
+ return false;
1023
+
1024
+ for (p = s, ret = false; (tok = strsep(&p, ",")) != NULL; ) {
1025
+ u16 val;
1026
+
1027
+ if (kstrtou16(tok, 16, &val) == 0 && val == device_id) {
1028
+ ret = true;
1029
+ break;
1030
+ }
1031
+ }
1032
+
1033
+ kfree(s);
1034
+
1035
+ return ret;
6861036 }
6871037
6881038 static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
....@@ -691,10 +1041,14 @@
6911041 (struct intel_device_info *) ent->driver_data;
6921042 int err;
6931043
694
- if (IS_ALPHA_SUPPORT(intel_info) && !i915_modparams.alpha_support) {
695
- DRM_INFO("The driver support for your hardware in this kernel version is alpha quality\n"
696
- "See CONFIG_DRM_I915_ALPHA_SUPPORT or i915.alpha_support module parameter\n"
697
- "to enable support in this kernel version, or check for kernel updates.\n");
1044
+ if (intel_info->require_force_probe &&
1045
+ !force_probe(pdev->device, i915_modparams.force_probe)) {
1046
+ dev_info(&pdev->dev,
1047
+ "Your graphics device %04x is not properly supported by the driver in this\n"
1048
+ "kernel version. To force driver probe anyway, use i915.force_probe=%04x\n"
1049
+ "module parameter or CONFIG_DRM_I915_FORCE_PROBE=%04x configuration option,\n"
1050
+ "or (recommended) check for kernel updates.\n",
1051
+ pdev->device, pdev->device, pdev->device);
6981052 return -ENODEV;
6991053 }
7001054
....@@ -713,16 +1067,22 @@
7131067 if (vga_switcheroo_client_probe_defer(pdev))
7141068 return -EPROBE_DEFER;
7151069
716
- err = i915_driver_load(pdev, ent);
1070
+ err = i915_driver_probe(pdev, ent);
7171071 if (err)
7181072 return err;
7191073
720
- if (i915_inject_load_failure()) {
1074
+ if (i915_inject_probe_failure(pci_get_drvdata(pdev))) {
7211075 i915_pci_remove(pdev);
7221076 return -ENODEV;
7231077 }
7241078
7251079 err = i915_live_selftests(pdev);
1080
+ if (err) {
1081
+ i915_pci_remove(pdev);
1082
+ return err > 0 ? -ENOTTY : err;
1083
+ }
1084
+
1085
+ err = i915_perf_selftests(pdev);
7261086 if (err) {
7271087 i915_pci_remove(pdev);
7281088 return err > 0 ? -ENOTTY : err;
....@@ -743,6 +1103,10 @@
7431103 {
7441104 bool use_kms = true;
7451105 int err;
1106
+
1107
+ err = i915_globals_init();
1108
+ if (err)
1109
+ return err;
7461110
7471111 err = i915_mock_selftests();
7481112 if (err)
....@@ -766,7 +1130,12 @@
7661130 return 0;
7671131 }
7681132
769
- return pci_register_driver(&i915_pci_driver);
1133
+ err = pci_register_driver(&i915_pci_driver);
1134
+ if (err)
1135
+ return err;
1136
+
1137
+ i915_perf_sysctl_register();
1138
+ return 0;
7701139 }
7711140
7721141 static void __exit i915_exit(void)
....@@ -774,7 +1143,9 @@
7741143 if (!i915_pci_driver.driver.owner)
7751144 return;
7761145
1146
+ i915_perf_sysctl_unregister();
7771147 pci_unregister_driver(&i915_pci_driver);
1148
+ i915_globals_exit();
7781149 }
7791150
7801151 module_init(i915_init);