1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#ifndef _I915_DRV_H_
31#define _I915_DRV_H_
32
33#include <uapi/drm/i915_drm.h>
34#include <uapi/drm/drm_fourcc.h>
35
36#include <linux/io-mapping.h>
37#include <linux/i2c.h>
38#include <linux/i2c-algo-bit.h>
39#include <linux/backlight.h>
40#include <linux/hash.h>
41#include <linux/intel-iommu.h>
42#include <linux/kref.h>
43#include <linux/pm_qos.h>
44#include <linux/reservation.h>
45#include <linux/shmem_fs.h>
46
47#include <drm/drmP.h>
48#include <drm/intel-gtt.h>
49#include <drm/drm_legacy.h>
50#include <drm/drm_gem.h>
51#include <drm/drm_auth.h>
52#include <drm/drm_cache.h>
53
54#include "i915_params.h"
55#include "i915_reg.h"
56#include "i915_utils.h"
57
58#include "intel_uncore.h"
59#include "intel_bios.h"
60#include "intel_dpll_mgr.h"
61#include "intel_uc.h"
62#include "intel_lrc.h"
63#include "intel_ringbuffer.h"
64
65#include "i915_gem.h"
66#include "i915_gem_context.h"
67#include "i915_gem_fence_reg.h"
68#include "i915_gem_object.h"
69#include "i915_gem_gtt.h"
70#include "i915_gem_render_state.h"
71#include "i915_gem_request.h"
72#include "i915_gem_timeline.h"
73
74#include "i915_vma.h"
75
76#include "intel_gvt.h"
77
78
79
80
81#define DRIVER_NAME "i915"
82#define DRIVER_DESC "Intel Graphics"
83#define DRIVER_DATE "20170818"
84#define DRIVER_TIMESTAMP 1503088845
85
86
87
88
89
90
91
92
93#define I915_STATE_WARN(condition, format...) ({ \
94 int __ret_warn_on = !!(condition); \
95 if (unlikely(__ret_warn_on)) \
96 if (!WARN(i915.verbose_state_checks, format)) \
97 DRM_ERROR(format); \
98 unlikely(__ret_warn_on); \
99})
100
101#define I915_STATE_WARN_ON(x) \
102 I915_STATE_WARN((x), "%s", "WARN_ON(" __stringify(x) ")")
103
104bool __i915_inject_load_failure(const char *func, int line);
105#define i915_inject_load_failure() \
106 __i915_inject_load_failure(__func__, __LINE__)
107
108typedef struct {
109 uint32_t val;
110} uint_fixed_16_16_t;
111
112#define FP_16_16_MAX ({ \
113 uint_fixed_16_16_t fp; \
114 fp.val = UINT_MAX; \
115 fp; \
116})
117
118static inline bool is_fixed16_zero(uint_fixed_16_16_t val)
119{
120 if (val.val == 0)
121 return true;
122 return false;
123}
124
125static inline uint_fixed_16_16_t u32_to_fixed16(uint32_t val)
126{
127 uint_fixed_16_16_t fp;
128
129 WARN_ON(val >> 16);
130
131 fp.val = val << 16;
132 return fp;
133}
134
135static inline uint32_t fixed16_to_u32_round_up(uint_fixed_16_16_t fp)
136{
137 return DIV_ROUND_UP(fp.val, 1 << 16);
138}
139
140static inline uint32_t fixed16_to_u32(uint_fixed_16_16_t fp)
141{
142 return fp.val >> 16;
143}
144
145static inline uint_fixed_16_16_t min_fixed16(uint_fixed_16_16_t min1,
146 uint_fixed_16_16_t min2)
147{
148 uint_fixed_16_16_t min;
149
150 min.val = min(min1.val, min2.val);
151 return min;
152}
153
154static inline uint_fixed_16_16_t max_fixed16(uint_fixed_16_16_t max1,
155 uint_fixed_16_16_t max2)
156{
157 uint_fixed_16_16_t max;
158
159 max.val = max(max1.val, max2.val);
160 return max;
161}
162
163static inline uint_fixed_16_16_t clamp_u64_to_fixed16(uint64_t val)
164{
165 uint_fixed_16_16_t fp;
166 WARN_ON(val >> 32);
167 fp.val = clamp_t(uint32_t, val, 0, ~0);
168 return fp;
169}
170
171static inline uint32_t div_round_up_fixed16(uint_fixed_16_16_t val,
172 uint_fixed_16_16_t d)
173{
174 return DIV_ROUND_UP(val.val, d.val);
175}
176
177static inline uint32_t mul_round_up_u32_fixed16(uint32_t val,
178 uint_fixed_16_16_t mul)
179{
180 uint64_t intermediate_val;
181
182 intermediate_val = (uint64_t) val * mul.val;
183 intermediate_val = DIV_ROUND_UP_ULL(intermediate_val, 1 << 16);
184 WARN_ON(intermediate_val >> 32);
185 return clamp_t(uint32_t, intermediate_val, 0, ~0);
186}
187
188static inline uint_fixed_16_16_t mul_fixed16(uint_fixed_16_16_t val,
189 uint_fixed_16_16_t mul)
190{
191 uint64_t intermediate_val;
192
193 intermediate_val = (uint64_t) val.val * mul.val;
194 intermediate_val = intermediate_val >> 16;
195 return clamp_u64_to_fixed16(intermediate_val);
196}
197
198static inline uint_fixed_16_16_t div_fixed16(uint32_t val, uint32_t d)
199{
200 uint64_t interm_val;
201
202 interm_val = (uint64_t)val << 16;
203 interm_val = DIV_ROUND_UP_ULL(interm_val, d);
204 return clamp_u64_to_fixed16(interm_val);
205}
206
207static inline uint32_t div_round_up_u32_fixed16(uint32_t val,
208 uint_fixed_16_16_t d)
209{
210 uint64_t interm_val;
211
212 interm_val = (uint64_t)val << 16;
213 interm_val = DIV_ROUND_UP_ULL(interm_val, d.val);
214 WARN_ON(interm_val >> 32);
215 return clamp_t(uint32_t, interm_val, 0, ~0);
216}
217
218static inline uint_fixed_16_16_t mul_u32_fixed16(uint32_t val,
219 uint_fixed_16_16_t mul)
220{
221 uint64_t intermediate_val;
222
223 intermediate_val = (uint64_t) val * mul.val;
224 return clamp_u64_to_fixed16(intermediate_val);
225}
226
227static inline uint_fixed_16_16_t add_fixed16(uint_fixed_16_16_t add1,
228 uint_fixed_16_16_t add2)
229{
230 uint64_t interm_sum;
231
232 interm_sum = (uint64_t) add1.val + add2.val;
233 return clamp_u64_to_fixed16(interm_sum);
234}
235
236static inline uint_fixed_16_16_t add_fixed16_u32(uint_fixed_16_16_t add1,
237 uint32_t add2)
238{
239 uint64_t interm_sum;
240 uint_fixed_16_16_t interm_add2 = u32_to_fixed16(add2);
241
242 interm_sum = (uint64_t) add1.val + interm_add2.val;
243 return clamp_u64_to_fixed16(interm_sum);
244}
245
246static inline const char *yesno(bool v)
247{
248 return v ? "yes" : "no";
249}
250
251static inline const char *onoff(bool v)
252{
253 return v ? "on" : "off";
254}
255
256static inline const char *enableddisabled(bool v)
257{
258 return v ? "enabled" : "disabled";
259}
260
261enum pipe {
262 INVALID_PIPE = -1,
263 PIPE_A = 0,
264 PIPE_B,
265 PIPE_C,
266 _PIPE_EDP,
267 I915_MAX_PIPES = _PIPE_EDP
268};
269#define pipe_name(p) ((p) + 'A')
270
271enum transcoder {
272 TRANSCODER_A = 0,
273 TRANSCODER_B,
274 TRANSCODER_C,
275 TRANSCODER_EDP,
276 TRANSCODER_DSI_A,
277 TRANSCODER_DSI_C,
278 I915_MAX_TRANSCODERS
279};
280
281static inline const char *transcoder_name(enum transcoder transcoder)
282{
283 switch (transcoder) {
284 case TRANSCODER_A:
285 return "A";
286 case TRANSCODER_B:
287 return "B";
288 case TRANSCODER_C:
289 return "C";
290 case TRANSCODER_EDP:
291 return "EDP";
292 case TRANSCODER_DSI_A:
293 return "DSI A";
294 case TRANSCODER_DSI_C:
295 return "DSI C";
296 default:
297 return "<invalid>";
298 }
299}
300
301static inline bool transcoder_is_dsi(enum transcoder transcoder)
302{
303 return transcoder == TRANSCODER_DSI_A || transcoder == TRANSCODER_DSI_C;
304}
305
306
307
308
309
310enum plane {
311 PLANE_A,
312 PLANE_B,
313 PLANE_C,
314};
315#define plane_name(p) ((p) + 'A')
316
317#define sprite_name(p, s) ((p) * INTEL_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A')
318
319
320
321
322
323
324
325
326
327
328
329enum plane_id {
330 PLANE_PRIMARY,
331 PLANE_SPRITE0,
332 PLANE_SPRITE1,
333 PLANE_SPRITE2,
334 PLANE_CURSOR,
335 I915_MAX_PLANES,
336};
337
338#define for_each_plane_id_on_crtc(__crtc, __p) \
339 for ((__p) = PLANE_PRIMARY; (__p) < I915_MAX_PLANES; (__p)++) \
340 for_each_if ((__crtc)->plane_ids_mask & BIT(__p))
341
342enum port {
343 PORT_NONE = -1,
344 PORT_A = 0,
345 PORT_B,
346 PORT_C,
347 PORT_D,
348 PORT_E,
349 I915_MAX_PORTS
350};
351#define port_name(p) ((p) + 'A')
352
353#define I915_NUM_PHYS_VLV 2
354
355enum dpio_channel {
356 DPIO_CH0,
357 DPIO_CH1
358};
359
360enum dpio_phy {
361 DPIO_PHY0,
362 DPIO_PHY1,
363 DPIO_PHY2,
364};
365
366enum intel_display_power_domain {
367 POWER_DOMAIN_PIPE_A,
368 POWER_DOMAIN_PIPE_B,
369 POWER_DOMAIN_PIPE_C,
370 POWER_DOMAIN_PIPE_A_PANEL_FITTER,
371 POWER_DOMAIN_PIPE_B_PANEL_FITTER,
372 POWER_DOMAIN_PIPE_C_PANEL_FITTER,
373 POWER_DOMAIN_TRANSCODER_A,
374 POWER_DOMAIN_TRANSCODER_B,
375 POWER_DOMAIN_TRANSCODER_C,
376 POWER_DOMAIN_TRANSCODER_EDP,
377 POWER_DOMAIN_TRANSCODER_DSI_A,
378 POWER_DOMAIN_TRANSCODER_DSI_C,
379 POWER_DOMAIN_PORT_DDI_A_LANES,
380 POWER_DOMAIN_PORT_DDI_B_LANES,
381 POWER_DOMAIN_PORT_DDI_C_LANES,
382 POWER_DOMAIN_PORT_DDI_D_LANES,
383 POWER_DOMAIN_PORT_DDI_E_LANES,
384 POWER_DOMAIN_PORT_DDI_A_IO,
385 POWER_DOMAIN_PORT_DDI_B_IO,
386 POWER_DOMAIN_PORT_DDI_C_IO,
387 POWER_DOMAIN_PORT_DDI_D_IO,
388 POWER_DOMAIN_PORT_DDI_E_IO,
389 POWER_DOMAIN_PORT_DSI,
390 POWER_DOMAIN_PORT_CRT,
391 POWER_DOMAIN_PORT_OTHER,
392 POWER_DOMAIN_VGA,
393 POWER_DOMAIN_AUDIO,
394 POWER_DOMAIN_PLLS,
395 POWER_DOMAIN_AUX_A,
396 POWER_DOMAIN_AUX_B,
397 POWER_DOMAIN_AUX_C,
398 POWER_DOMAIN_AUX_D,
399 POWER_DOMAIN_GMBUS,
400 POWER_DOMAIN_MODESET,
401 POWER_DOMAIN_INIT,
402
403 POWER_DOMAIN_NUM,
404};
405
406#define POWER_DOMAIN_PIPE(pipe) ((pipe) + POWER_DOMAIN_PIPE_A)
407#define POWER_DOMAIN_PIPE_PANEL_FITTER(pipe) \
408 ((pipe) + POWER_DOMAIN_PIPE_A_PANEL_FITTER)
409#define POWER_DOMAIN_TRANSCODER(tran) \
410 ((tran) == TRANSCODER_EDP ? POWER_DOMAIN_TRANSCODER_EDP : \
411 (tran) + POWER_DOMAIN_TRANSCODER_A)
412
413enum hpd_pin {
414 HPD_NONE = 0,
415 HPD_TV = HPD_NONE,
416 HPD_CRT,
417 HPD_SDVO_B,
418 HPD_SDVO_C,
419 HPD_PORT_A,
420 HPD_PORT_B,
421 HPD_PORT_C,
422 HPD_PORT_D,
423 HPD_PORT_E,
424 HPD_NUM_PINS
425};
426
427#define for_each_hpd_pin(__pin) \
428 for ((__pin) = (HPD_NONE + 1); (__pin) < HPD_NUM_PINS; (__pin)++)
429
430#define HPD_STORM_DEFAULT_THRESHOLD 5
431
432struct i915_hotplug {
433 struct work_struct hotplug_work;
434
435 struct {
436 unsigned long last_jiffies;
437 int count;
438 enum {
439 HPD_ENABLED = 0,
440 HPD_DISABLED = 1,
441 HPD_MARK_DISABLED = 2
442 } state;
443 } stats[HPD_NUM_PINS];
444 u32 event_bits;
445 struct delayed_work reenable_work;
446
447 struct intel_digital_port *irq_port[I915_MAX_PORTS];
448 u32 long_port_mask;
449 u32 short_port_mask;
450 struct work_struct dig_port_work;
451
452 struct work_struct poll_init_work;
453 bool poll_enabled;
454
455 unsigned int hpd_storm_threshold;
456
457
458
459
460
461
462
463
464 struct workqueue_struct *dp_wq;
465};
466
467#define I915_GEM_GPU_DOMAINS \
468 (I915_GEM_DOMAIN_RENDER | \
469 I915_GEM_DOMAIN_SAMPLER | \
470 I915_GEM_DOMAIN_COMMAND | \
471 I915_GEM_DOMAIN_INSTRUCTION | \
472 I915_GEM_DOMAIN_VERTEX)
473
474#define for_each_pipe(__dev_priv, __p) \
475 for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++)
476#define for_each_pipe_masked(__dev_priv, __p, __mask) \
477 for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++) \
478 for_each_if ((__mask) & (1 << (__p)))
479#define for_each_universal_plane(__dev_priv, __pipe, __p) \
480 for ((__p) = 0; \
481 (__p) < INTEL_INFO(__dev_priv)->num_sprites[(__pipe)] + 1; \
482 (__p)++)
483#define for_each_sprite(__dev_priv, __p, __s) \
484 for ((__s) = 0; \
485 (__s) < INTEL_INFO(__dev_priv)->num_sprites[(__p)]; \
486 (__s)++)
487
488#define for_each_port_masked(__port, __ports_mask) \
489 for ((__port) = PORT_A; (__port) < I915_MAX_PORTS; (__port)++) \
490 for_each_if ((__ports_mask) & (1 << (__port)))
491
492#define for_each_crtc(dev, crtc) \
493 list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
494
495#define for_each_intel_plane(dev, intel_plane) \
496 list_for_each_entry(intel_plane, \
497 &(dev)->mode_config.plane_list, \
498 base.head)
499
500#define for_each_intel_plane_mask(dev, intel_plane, plane_mask) \
501 list_for_each_entry(intel_plane, \
502 &(dev)->mode_config.plane_list, \
503 base.head) \
504 for_each_if ((plane_mask) & \
505 (1 << drm_plane_index(&intel_plane->base)))
506
507#define for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) \
508 list_for_each_entry(intel_plane, \
509 &(dev)->mode_config.plane_list, \
510 base.head) \
511 for_each_if ((intel_plane)->pipe == (intel_crtc)->pipe)
512
513#define for_each_intel_crtc(dev, intel_crtc) \
514 list_for_each_entry(intel_crtc, \
515 &(dev)->mode_config.crtc_list, \
516 base.head)
517
518#define for_each_intel_crtc_mask(dev, intel_crtc, crtc_mask) \
519 list_for_each_entry(intel_crtc, \
520 &(dev)->mode_config.crtc_list, \
521 base.head) \
522 for_each_if ((crtc_mask) & (1 << drm_crtc_index(&intel_crtc->base)))
523
524#define for_each_intel_encoder(dev, intel_encoder) \
525 list_for_each_entry(intel_encoder, \
526 &(dev)->mode_config.encoder_list, \
527 base.head)
528
529#define for_each_intel_connector_iter(intel_connector, iter) \
530 while ((intel_connector = to_intel_connector(drm_connector_list_iter_next(iter))))
531
532#define for_each_encoder_on_crtc(dev, __crtc, intel_encoder) \
533 list_for_each_entry((intel_encoder), &(dev)->mode_config.encoder_list, base.head) \
534 for_each_if ((intel_encoder)->base.crtc == (__crtc))
535
536#define for_each_connector_on_encoder(dev, __encoder, intel_connector) \
537 list_for_each_entry((intel_connector), &(dev)->mode_config.connector_list, base.head) \
538 for_each_if ((intel_connector)->base.encoder == (__encoder))
539
540#define for_each_power_domain(domain, mask) \
541 for ((domain) = 0; (domain) < POWER_DOMAIN_NUM; (domain)++) \
542 for_each_if (BIT_ULL(domain) & (mask))
543
544#define for_each_power_well(__dev_priv, __power_well) \
545 for ((__power_well) = (__dev_priv)->power_domains.power_wells; \
546 (__power_well) - (__dev_priv)->power_domains.power_wells < \
547 (__dev_priv)->power_domains.power_well_count; \
548 (__power_well)++)
549
550#define for_each_power_well_rev(__dev_priv, __power_well) \
551 for ((__power_well) = (__dev_priv)->power_domains.power_wells + \
552 (__dev_priv)->power_domains.power_well_count - 1; \
553 (__power_well) - (__dev_priv)->power_domains.power_wells >= 0; \
554 (__power_well)--)
555
556#define for_each_power_domain_well(__dev_priv, __power_well, __domain_mask) \
557 for_each_power_well(__dev_priv, __power_well) \
558 for_each_if ((__power_well)->domains & (__domain_mask))
559
560#define for_each_power_domain_well_rev(__dev_priv, __power_well, __domain_mask) \
561 for_each_power_well_rev(__dev_priv, __power_well) \
562 for_each_if ((__power_well)->domains & (__domain_mask))
563
564#define for_each_intel_plane_in_state(__state, plane, plane_state, __i) \
565 for ((__i) = 0; \
566 (__i) < (__state)->base.dev->mode_config.num_total_plane && \
567 ((plane) = to_intel_plane((__state)->base.planes[__i].ptr), \
568 (plane_state) = to_intel_plane_state((__state)->base.planes[__i].state), 1); \
569 (__i)++) \
570 for_each_if (plane_state)
571
572struct drm_i915_private;
573struct i915_mm_struct;
574struct i915_mmu_object;
575
576struct drm_i915_file_private {
577 struct drm_i915_private *dev_priv;
578 struct drm_file *file;
579
580 struct {
581 spinlock_t lock;
582 struct list_head request_list;
583
584
585
586
587
588#define DRM_I915_THROTTLE_JIFFIES msecs_to_jiffies(20)
589 } mm;
590 struct idr context_idr;
591
592 struct intel_rps_client {
593 atomic_t boosts;
594 } rps;
595
596 unsigned int bsd_engine;
597
598
599
600
601
602
603
604#define I915_MAX_CLIENT_CONTEXT_BANS 3
605 atomic_t context_bans;
606};
607
608
609struct intel_link_m_n {
610 uint32_t tu;
611 uint32_t gmch_m;
612 uint32_t gmch_n;
613 uint32_t link_m;
614 uint32_t link_n;
615};
616
617void intel_link_compute_m_n(int bpp, int nlanes,
618 int pixel_clock, int link_clock,
619 struct intel_link_m_n *m_n,
620 bool reduce_m_n);
621
622
623
624
625
626
627
628
629
630
631
632#define DRIVER_MAJOR 1
633#define DRIVER_MINOR 6
634#define DRIVER_PATCHLEVEL 0
635
636struct opregion_header;
637struct opregion_acpi;
638struct opregion_swsci;
639struct opregion_asle;
640
641struct intel_opregion {
642 struct opregion_header *header;
643 struct opregion_acpi *acpi;
644 struct opregion_swsci *swsci;
645 u32 swsci_gbda_sub_functions;
646 u32 swsci_sbcb_sub_functions;
647 struct opregion_asle *asle;
648 void *rvda;
649 void *vbt_firmware;
650 const void *vbt;
651 u32 vbt_size;
652 u32 *lid_state;
653 struct work_struct asle_work;
654};
655#define OPREGION_SIZE (8*1024)
656
657struct intel_overlay;
658struct intel_overlay_error_state;
659
660struct sdvo_device_mapping {
661 u8 initialized;
662 u8 dvo_port;
663 u8 slave_addr;
664 u8 dvo_wiring;
665 u8 i2c_pin;
666 u8 ddc_pin;
667};
668
669struct intel_connector;
670struct intel_encoder;
671struct intel_atomic_state;
672struct intel_crtc_state;
673struct intel_initial_plane_config;
674struct intel_crtc;
675struct intel_limit;
676struct dpll;
677struct intel_cdclk_state;
678
679struct drm_i915_display_funcs {
680 void (*get_cdclk)(struct drm_i915_private *dev_priv,
681 struct intel_cdclk_state *cdclk_state);
682 void (*set_cdclk)(struct drm_i915_private *dev_priv,
683 const struct intel_cdclk_state *cdclk_state);
684 int (*get_fifo_size)(struct drm_i915_private *dev_priv, int plane);
685 int (*compute_pipe_wm)(struct intel_crtc_state *cstate);
686 int (*compute_intermediate_wm)(struct drm_device *dev,
687 struct intel_crtc *intel_crtc,
688 struct intel_crtc_state *newstate);
689 void (*initial_watermarks)(struct intel_atomic_state *state,
690 struct intel_crtc_state *cstate);
691 void (*atomic_update_watermarks)(struct intel_atomic_state *state,
692 struct intel_crtc_state *cstate);
693 void (*optimize_watermarks)(struct intel_atomic_state *state,
694 struct intel_crtc_state *cstate);
695 int (*compute_global_watermarks)(struct drm_atomic_state *state);
696 void (*update_wm)(struct intel_crtc *crtc);
697 int (*modeset_calc_cdclk)(struct drm_atomic_state *state);
698
699
700 bool (*get_pipe_config)(struct intel_crtc *,
701 struct intel_crtc_state *);
702 void (*get_initial_plane_config)(struct intel_crtc *,
703 struct intel_initial_plane_config *);
704 int (*crtc_compute_clock)(struct intel_crtc *crtc,
705 struct intel_crtc_state *crtc_state);
706 void (*crtc_enable)(struct intel_crtc_state *pipe_config,
707 struct drm_atomic_state *old_state);
708 void (*crtc_disable)(struct intel_crtc_state *old_crtc_state,
709 struct drm_atomic_state *old_state);
710 void (*update_crtcs)(struct drm_atomic_state *state,
711 unsigned int *crtc_vblank_mask);
712 void (*audio_codec_enable)(struct drm_connector *connector,
713 struct intel_encoder *encoder,
714 const struct drm_display_mode *adjusted_mode);
715 void (*audio_codec_disable)(struct intel_encoder *encoder);
716 void (*fdi_link_train)(struct intel_crtc *crtc,
717 const struct intel_crtc_state *crtc_state);
718 void (*init_clock_gating)(struct drm_i915_private *dev_priv);
719 void (*hpd_irq_setup)(struct drm_i915_private *dev_priv);
720
721
722
723
724
725
726 void (*load_csc_matrix)(struct drm_crtc_state *crtc_state);
727 void (*load_luts)(struct drm_crtc_state *crtc_state);
728};
729
730#define CSR_VERSION(major, minor) ((major) << 16 | (minor))
731#define CSR_VERSION_MAJOR(version) ((version) >> 16)
732#define CSR_VERSION_MINOR(version) ((version) & 0xffff)
733
734struct intel_csr {
735 struct work_struct work;
736 const char *fw_path;
737 uint32_t *dmc_payload;
738 uint32_t dmc_fw_size;
739 uint32_t version;
740 uint32_t mmio_count;
741 i915_reg_t mmioaddr[8];
742 uint32_t mmiodata[8];
743 uint32_t dc_state;
744 uint32_t allowed_dc_mask;
745};
746
747#define DEV_INFO_FOR_EACH_FLAG(func) \
748 func(is_mobile); \
749 func(is_lp); \
750 func(is_alpha_support); \
751 \
752 func(has_64bit_reloc); \
753 func(has_aliasing_ppgtt); \
754 func(has_csr); \
755 func(has_ddi); \
756 func(has_dp_mst); \
757 func(has_reset_engine); \
758 func(has_fbc); \
759 func(has_fpga_dbg); \
760 func(has_full_ppgtt); \
761 func(has_full_48bit_ppgtt); \
762 func(has_gmbus_irq); \
763 func(has_gmch_display); \
764 func(has_guc); \
765 func(has_guc_ct); \
766 func(has_hotplug); \
767 func(has_l3_dpf); \
768 func(has_llc); \
769 func(has_logical_ring_contexts); \
770 func(has_overlay); \
771 func(has_pipe_cxsr); \
772 func(has_pooled_eu); \
773 func(has_psr); \
774 func(has_rc6); \
775 func(has_rc6p); \
776 func(has_resource_streamer); \
777 func(has_runtime_pm); \
778 func(has_snoop); \
779 func(unfenced_needs_alignment); \
780 func(cursor_needs_physical); \
781 func(hws_needs_physical); \
782 func(overlay_needs_physical); \
783 func(supports_tv);
784
785struct sseu_dev_info {
786 u8 slice_mask;
787 u8 subslice_mask;
788 u8 eu_total;
789 u8 eu_per_subslice;
790 u8 min_eu_in_pool;
791
792 u8 subslice_7eu[3];
793 u8 has_slice_pg:1;
794 u8 has_subslice_pg:1;
795 u8 has_eu_pg:1;
796};
797
798static inline unsigned int sseu_subslice_total(const struct sseu_dev_info *sseu)
799{
800 return hweight8(sseu->slice_mask) * hweight8(sseu->subslice_mask);
801}
802
803
804enum intel_platform {
805 INTEL_PLATFORM_UNINITIALIZED = 0,
806 INTEL_I830,
807 INTEL_I845G,
808 INTEL_I85X,
809 INTEL_I865G,
810 INTEL_I915G,
811 INTEL_I915GM,
812 INTEL_I945G,
813 INTEL_I945GM,
814 INTEL_G33,
815 INTEL_PINEVIEW,
816 INTEL_I965G,
817 INTEL_I965GM,
818 INTEL_G45,
819 INTEL_GM45,
820 INTEL_IRONLAKE,
821 INTEL_SANDYBRIDGE,
822 INTEL_IVYBRIDGE,
823 INTEL_VALLEYVIEW,
824 INTEL_HASWELL,
825 INTEL_BROADWELL,
826 INTEL_CHERRYVIEW,
827 INTEL_SKYLAKE,
828 INTEL_BROXTON,
829 INTEL_KABYLAKE,
830 INTEL_GEMINILAKE,
831 INTEL_COFFEELAKE,
832 INTEL_CANNONLAKE,
833 INTEL_MAX_PLATFORMS
834};
835
836struct intel_device_info {
837 u32 display_mmio_offset;
838 u16 device_id;
839 u8 num_pipes;
840 u8 num_sprites[I915_MAX_PIPES];
841 u8 num_scalers[I915_MAX_PIPES];
842 u8 gen;
843 u16 gen_mask;
844 enum intel_platform platform;
845 u8 ring_mask;
846 u8 num_rings;
847#define DEFINE_FLAG(name) u8 name:1
848 DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG);
849#undef DEFINE_FLAG
850 u16 ddb_size;
851
852 int pipe_offsets[I915_MAX_TRANSCODERS];
853 int trans_offsets[I915_MAX_TRANSCODERS];
854 int palette_offsets[I915_MAX_PIPES];
855 int cursor_offsets[I915_MAX_PIPES];
856
857
858 struct sseu_dev_info sseu;
859
860 struct color_luts {
861 u16 degamma_lut_size;
862 u16 gamma_lut_size;
863 } color;
864};
865
866struct intel_display_error_state;
867
868struct i915_gpu_state {
869 struct kref ref;
870 struct timeval time;
871 struct timeval boottime;
872 struct timeval uptime;
873
874 struct drm_i915_private *i915;
875
876 char error_msg[128];
877 bool simulated;
878 bool awake;
879 bool wakelock;
880 bool suspended;
881 int iommu;
882 u32 reset_count;
883 u32 suspend_count;
884 struct intel_device_info device_info;
885 struct i915_params params;
886
887
888 u32 eir;
889 u32 pgtbl_er;
890 u32 ier;
891 u32 gtier[4], ngtier;
892 u32 ccid;
893 u32 derrmr;
894 u32 forcewake;
895 u32 error;
896 u32 err_int;
897 u32 fault_data0;
898 u32 fault_data1;
899 u32 done_reg;
900 u32 gac_eco;
901 u32 gam_ecochk;
902 u32 gab_ctl;
903 u32 gfx_mode;
904
905 u32 nfence;
906 u64 fence[I915_MAX_NUM_FENCES];
907 struct intel_overlay_error_state *overlay;
908 struct intel_display_error_state *display;
909 struct drm_i915_error_object *semaphore;
910 struct drm_i915_error_object *guc_log;
911
912 struct drm_i915_error_engine {
913 int engine_id;
914
915 bool waiting;
916 int num_waiters;
917 unsigned long hangcheck_timestamp;
918 bool hangcheck_stalled;
919 enum intel_engine_hangcheck_action hangcheck_action;
920 struct i915_address_space *vm;
921 int num_requests;
922 u32 reset_count;
923
924
925 u32 rq_head, rq_post, rq_tail;
926
927
928 u32 cpu_ring_head;
929 u32 cpu_ring_tail;
930
931 u32 last_seqno;
932
933
934 u32 start;
935 u32 tail;
936 u32 head;
937 u32 ctl;
938 u32 mode;
939 u32 hws;
940 u32 ipeir;
941 u32 ipehr;
942 u32 bbstate;
943 u32 instpm;
944 u32 instps;
945 u32 seqno;
946 u64 bbaddr;
947 u64 acthd;
948 u32 fault_reg;
949 u64 faddr;
950 u32 rc_psmi;
951 u32 semaphore_mboxes[I915_NUM_ENGINES - 1];
952 struct intel_instdone instdone;
953
954 struct drm_i915_error_context {
955 char comm[TASK_COMM_LEN];
956 pid_t pid;
957 u32 handle;
958 u32 hw_id;
959 int ban_score;
960 int active;
961 int guilty;
962 } context;
963
964 struct drm_i915_error_object {
965 u64 gtt_offset;
966 u64 gtt_size;
967 int page_count;
968 int unused;
969 u32 *pages[0];
970 } *ringbuffer, *batchbuffer, *wa_batchbuffer, *ctx, *hws_page;
971
972 struct drm_i915_error_object **user_bo;
973 long user_bo_count;
974
975 struct drm_i915_error_object *wa_ctx;
976
977 struct drm_i915_error_request {
978 long jiffies;
979 pid_t pid;
980 u32 context;
981 int ban_score;
982 u32 seqno;
983 u32 head;
984 u32 tail;
985 } *requests, execlist[2];
986
987 struct drm_i915_error_waiter {
988 char comm[TASK_COMM_LEN];
989 pid_t pid;
990 u32 seqno;
991 } *waiters;
992
993 struct {
994 u32 gfx_mode;
995 union {
996 u64 pdp[4];
997 u32 pp_dir_base;
998 };
999 } vm_info;
1000 } engine[I915_NUM_ENGINES];
1001
1002 struct drm_i915_error_buffer {
1003 u32 size;
1004 u32 name;
1005 u32 rseqno[I915_NUM_ENGINES], wseqno;
1006 u64 gtt_offset;
1007 u32 read_domains;
1008 u32 write_domain;
1009 s32 fence_reg:I915_MAX_NUM_FENCE_BITS;
1010 u32 tiling:2;
1011 u32 dirty:1;
1012 u32 purgeable:1;
1013 u32 userptr:1;
1014 s32 engine:4;
1015 u32 cache_level:3;
1016 } *active_bo[I915_NUM_ENGINES], *pinned_bo;
1017 u32 active_bo_count[I915_NUM_ENGINES], pinned_bo_count;
1018 struct i915_address_space *active_vm[I915_NUM_ENGINES];
1019};
1020
1021enum i915_cache_level {
1022 I915_CACHE_NONE = 0,
1023 I915_CACHE_LLC,
1024 I915_CACHE_L3_LLC,
1025
1026
1027
1028 I915_CACHE_WT,
1029};
1030
1031#define I915_COLOR_UNEVICTABLE (-1)
1032
1033enum fb_op_origin {
1034 ORIGIN_GTT,
1035 ORIGIN_CPU,
1036 ORIGIN_CS,
1037 ORIGIN_FLIP,
1038 ORIGIN_DIRTYFB,
1039};
1040
1041struct intel_fbc {
1042
1043
1044 struct mutex lock;
1045 unsigned threshold;
1046 unsigned int possible_framebuffer_bits;
1047 unsigned int busy_bits;
1048 unsigned int visible_pipes_mask;
1049 struct intel_crtc *crtc;
1050
1051 struct drm_mm_node compressed_fb;
1052 struct drm_mm_node *compressed_llb;
1053
1054 bool false_color;
1055
1056 bool enabled;
1057 bool active;
1058
1059 bool underrun_detected;
1060 struct work_struct underrun_work;
1061
1062
1063
1064
1065
1066
1067 struct intel_fbc_state_cache {
1068 struct i915_vma *vma;
1069
1070 struct {
1071 unsigned int mode_flags;
1072 uint32_t hsw_bdw_pixel_rate;
1073 } crtc;
1074
1075 struct {
1076 unsigned int rotation;
1077 int src_w;
1078 int src_h;
1079 bool visible;
1080 } plane;
1081
1082 struct {
1083 const struct drm_format_info *format;
1084 unsigned int stride;
1085 } fb;
1086 } state_cache;
1087
1088
1089
1090
1091
1092
1093
1094
1095 struct intel_fbc_reg_params {
1096 struct i915_vma *vma;
1097
1098 struct {
1099 enum pipe pipe;
1100 enum plane plane;
1101 unsigned int fence_y_offset;
1102 } crtc;
1103
1104 struct {
1105 const struct drm_format_info *format;
1106 unsigned int stride;
1107 } fb;
1108
1109 int cfb_size;
1110 } params;
1111
1112 struct intel_fbc_work {
1113 bool scheduled;
1114 u32 scheduled_vblank;
1115 struct work_struct work;
1116 } work;
1117
1118 const char *no_fbc_reason;
1119};
1120
1121
1122
1123
1124
1125
1126enum drrs_refresh_rate_type {
1127 DRRS_HIGH_RR,
1128 DRRS_LOW_RR,
1129 DRRS_MAX_RR,
1130};
1131
1132enum drrs_support_type {
1133 DRRS_NOT_SUPPORTED = 0,
1134 STATIC_DRRS_SUPPORT = 1,
1135 SEAMLESS_DRRS_SUPPORT = 2
1136};
1137
1138struct intel_dp;
1139struct i915_drrs {
1140 struct mutex mutex;
1141 struct delayed_work work;
1142 struct intel_dp *dp;
1143 unsigned busy_frontbuffer_bits;
1144 enum drrs_refresh_rate_type refresh_rate_type;
1145 enum drrs_support_type type;
1146};
1147
1148struct i915_psr {
1149 struct mutex lock;
1150 bool sink_support;
1151 bool source_ok;
1152 struct intel_dp *enabled;
1153 bool active;
1154 struct delayed_work work;
1155 unsigned busy_frontbuffer_bits;
1156 bool psr2_support;
1157 bool aux_frame_sync;
1158 bool link_standby;
1159 bool y_cord_support;
1160 bool colorimetry_support;
1161 bool alpm;
1162};
1163
1164enum intel_pch {
1165 PCH_NONE = 0,
1166 PCH_IBX,
1167 PCH_CPT,
1168 PCH_LPT,
1169 PCH_SPT,
1170 PCH_KBP,
1171 PCH_CNP,
1172 PCH_NOP,
1173};
1174
1175enum intel_sbi_destination {
1176 SBI_ICLK,
1177 SBI_MPHY,
1178};
1179
1180#define QUIRK_LVDS_SSC_DISABLE (1<<1)
1181#define QUIRK_INVERT_BRIGHTNESS (1<<2)
1182#define QUIRK_BACKLIGHT_PRESENT (1<<3)
1183#define QUIRK_PIN_SWIZZLED_PAGES (1<<5)
1184#define QUIRK_INCREASE_T12_DELAY (1<<6)
1185
1186struct intel_fbdev;
1187struct intel_fbc_work;
1188
1189struct intel_gmbus {
1190 struct i2c_adapter adapter;
1191#define GMBUS_FORCE_BIT_RETRY (1U << 31)
1192 u32 force_bit;
1193 u32 reg0;
1194 i915_reg_t gpio_reg;
1195 struct i2c_algo_bit_data bit_algo;
1196 struct drm_i915_private *dev_priv;
1197};
1198
1199struct i915_suspend_saved_registers {
1200 u32 saveDSPARB;
1201 u32 saveFBC_CONTROL;
1202 u32 saveCACHE_MODE_0;
1203 u32 saveMI_ARB_STATE;
1204 u32 saveSWF0[16];
1205 u32 saveSWF1[16];
1206 u32 saveSWF3[3];
1207 uint64_t saveFENCE[I915_MAX_NUM_FENCES];
1208 u32 savePCH_PORT_HOTPLUG;
1209 u16 saveGCDGMBUS;
1210};
1211
1212struct vlv_s0ix_state {
1213
1214 u32 wr_watermark;
1215 u32 gfx_prio_ctrl;
1216 u32 arb_mode;
1217 u32 gfx_pend_tlb0;
1218 u32 gfx_pend_tlb1;
1219 u32 lra_limits[GEN7_LRA_LIMITS_REG_NUM];
1220 u32 media_max_req_count;
1221 u32 gfx_max_req_count;
1222 u32 render_hwsp;
1223 u32 ecochk;
1224 u32 bsd_hwsp;
1225 u32 blt_hwsp;
1226 u32 tlb_rd_addr;
1227
1228
1229 u32 g3dctl;
1230 u32 gsckgctl;
1231 u32 mbctl;
1232
1233
1234 u32 ucgctl1;
1235 u32 ucgctl3;
1236 u32 rcgctl1;
1237 u32 rcgctl2;
1238 u32 rstctl;
1239 u32 misccpctl;
1240
1241
1242 u32 gfxpause;
1243 u32 rpdeuhwtc;
1244 u32 rpdeuc;
1245 u32 ecobus;
1246 u32 pwrdwnupctl;
1247 u32 rp_down_timeout;
1248 u32 rp_deucsw;
1249 u32 rcubmabdtmr;
1250 u32 rcedata;
1251 u32 spare2gh;
1252
1253
1254 u32 gt_imr;
1255 u32 gt_ier;
1256 u32 pm_imr;
1257 u32 pm_ier;
1258 u32 gt_scratch[GEN7_GT_SCRATCH_REG_NUM];
1259
1260
1261 u32 tilectl;
1262 u32 gt_fifoctl;
1263 u32 gtlc_wake_ctrl;
1264 u32 gtlc_survive;
1265 u32 pmwgicz;
1266
1267
1268 u32 gu_ctl0;
1269 u32 gu_ctl1;
1270 u32 pcbr;
1271 u32 clock_gate_dis2;
1272};
1273
1274struct intel_rps_ei {
1275 ktime_t ktime;
1276 u32 render_c0;
1277 u32 media_c0;
1278};
1279
1280struct intel_gen6_power_mgmt {
1281
1282
1283
1284
1285 struct work_struct work;
1286 bool interrupts_enabled;
1287 u32 pm_iir;
1288
1289
1290 u32 pm_intrmsk_mbz;
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302 u8 cur_freq;
1303 u8 min_freq_softlimit;
1304 u8 max_freq_softlimit;
1305 u8 max_freq;
1306 u8 min_freq;
1307 u8 boost_freq;
1308 u8 idle_freq;
1309 u8 efficient_freq;
1310 u8 rp1_freq;
1311 u8 rp0_freq;
1312 u16 gpll_ref_freq;
1313
1314 u8 up_threshold;
1315 u8 down_threshold;
1316
1317 int last_adj;
1318 enum { LOW_POWER, BETWEEN, HIGH_POWER } power;
1319
1320 bool enabled;
1321 struct delayed_work autoenable_work;
1322 atomic_t num_waiters;
1323 atomic_t boosts;
1324
1325
1326 struct intel_rps_ei ei;
1327
1328
1329
1330
1331
1332
1333
1334 struct mutex hw_lock;
1335};
1336
1337
1338extern spinlock_t mchdev_lock;
1339
1340struct intel_ilk_power_mgmt {
1341 u8 cur_delay;
1342 u8 min_delay;
1343 u8 max_delay;
1344 u8 fmax;
1345 u8 fstart;
1346
1347 u64 last_count1;
1348 unsigned long last_time1;
1349 unsigned long chipset_power;
1350 u64 last_count2;
1351 u64 last_time2;
1352 unsigned long gfx_power;
1353 u8 corr;
1354
1355 int c_m;
1356 int r_t;
1357};
1358
1359struct drm_i915_private;
1360struct i915_power_well;
1361
1362struct i915_power_well_ops {
1363
1364
1365
1366
1367
1368
1369 void (*sync_hw)(struct drm_i915_private *dev_priv,
1370 struct i915_power_well *power_well);
1371
1372
1373
1374
1375
1376 void (*enable)(struct drm_i915_private *dev_priv,
1377 struct i915_power_well *power_well);
1378
1379
1380
1381
1382 void (*disable)(struct drm_i915_private *dev_priv,
1383 struct i915_power_well *power_well);
1384
1385 bool (*is_enabled)(struct drm_i915_private *dev_priv,
1386 struct i915_power_well *power_well);
1387};
1388
1389
1390struct i915_power_well {
1391 const char *name;
1392 bool always_on;
1393
1394 int count;
1395
1396 bool hw_enabled;
1397 u64 domains;
1398
1399 enum i915_power_well_id id;
1400
1401
1402
1403
1404 union {
1405 struct {
1406 enum dpio_phy phy;
1407 } bxt;
1408 struct {
1409
1410 u8 irq_pipe_mask;
1411
1412 bool has_vga:1;
1413 bool has_fuses:1;
1414 } hsw;
1415 };
1416 const struct i915_power_well_ops *ops;
1417};
1418
1419struct i915_power_domains {
1420
1421
1422
1423
1424 bool init_power_on;
1425 bool initializing;
1426 int power_well_count;
1427
1428 struct mutex lock;
1429 int domain_use_count[POWER_DOMAIN_NUM];
1430 struct i915_power_well *power_wells;
1431};
1432
1433#define MAX_L3_SLICES 2
1434struct intel_l3_parity {
1435 u32 *remap_info[MAX_L3_SLICES];
1436 struct work_struct error_work;
1437 int which_slice;
1438};
1439
1440struct i915_gem_mm {
1441
1442 struct drm_mm stolen;
1443
1444
1445 struct mutex stolen_lock;
1446
1447
1448
1449 struct list_head bound_list;
1450
1451
1452
1453
1454
1455 struct list_head unbound_list;
1456
1457
1458
1459
1460 struct list_head userfault_list;
1461
1462
1463
1464
1465 struct llist_head free_list;
1466 struct work_struct free_work;
1467
1468
1469 dma_addr_t stolen_base;
1470
1471
1472 struct i915_hw_ppgtt *aliasing_ppgtt;
1473
1474 struct notifier_block oom_notifier;
1475 struct notifier_block vmap_notifier;
1476 struct shrinker shrinker;
1477
1478
1479 struct list_head fence_list;
1480
1481
1482
1483
1484
1485
1486 struct workqueue_struct *userptr_wq;
1487
1488 u64 unordered_timeline;
1489
1490
1491 atomic_t bsd_engine_dispatch_index;
1492
1493
1494 uint32_t bit_6_swizzle_x;
1495
1496 uint32_t bit_6_swizzle_y;
1497
1498
1499 spinlock_t object_stat_lock;
1500 u64 object_memory;
1501 u32 object_count;
1502};
1503
1504struct drm_i915_error_state_buf {
1505 struct drm_i915_private *i915;
1506 unsigned bytes;
1507 unsigned size;
1508 int err;
1509 u8 *buf;
1510 loff_t start;
1511 loff_t pos;
1512};
1513
1514#define I915_RESET_TIMEOUT (10 * HZ)
1515#define I915_FENCE_TIMEOUT (10 * HZ)
1516
1517#define I915_ENGINE_DEAD_TIMEOUT (4 * HZ)
1518#define I915_SEQNO_DEAD_TIMEOUT (12 * HZ)
1519
1520struct i915_gpu_error {
1521
1522#define DRM_I915_HANGCHECK_PERIOD 1500
1523#define DRM_I915_HANGCHECK_JIFFIES msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)
1524
1525 struct delayed_work hangcheck_work;
1526
1527
1528 spinlock_t lock;
1529
1530 struct i915_gpu_state *first_error;
1531
1532 atomic_t pending_fb_pin;
1533
1534 unsigned long missed_irq_rings;
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558 unsigned long reset_count;
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590 unsigned long flags;
1591#define I915_RESET_BACKOFF 0
1592#define I915_RESET_HANDOFF 1
1593#define I915_RESET_MODESET 2
1594#define I915_WEDGED (BITS_PER_LONG - 1)
1595#define I915_RESET_ENGINE (I915_WEDGED - I915_NUM_ENGINES)
1596
1597
1598 u32 reset_engine_count[I915_NUM_ENGINES];
1599
1600
1601
1602
1603
1604 wait_queue_head_t wait_queue;
1605
1606
1607
1608
1609
1610 wait_queue_head_t reset_queue;
1611
1612
1613 unsigned long test_irq_rings;
1614};
1615
1616enum modeset_restore {
1617 MODESET_ON_LID_OPEN,
1618 MODESET_DONE,
1619 MODESET_SUSPENDED,
1620};
1621
1622#define DP_AUX_A 0x40
1623#define DP_AUX_B 0x10
1624#define DP_AUX_C 0x20
1625#define DP_AUX_D 0x30
1626
1627#define DDC_PIN_B 0x05
1628#define DDC_PIN_C 0x04
1629#define DDC_PIN_D 0x06
1630
1631struct ddi_vbt_port_info {
1632
1633
1634
1635
1636
1637#define HDMI_LEVEL_SHIFT_UNKNOWN 0xff
1638 uint8_t hdmi_level_shift;
1639
1640 uint8_t supports_dvi:1;
1641 uint8_t supports_hdmi:1;
1642 uint8_t supports_dp:1;
1643 uint8_t supports_edp:1;
1644
1645 uint8_t alternate_aux_channel;
1646 uint8_t alternate_ddc_pin;
1647
1648 uint8_t dp_boost_level;
1649 uint8_t hdmi_boost_level;
1650};
1651
1652enum psr_lines_to_wait {
1653 PSR_0_LINES_TO_WAIT = 0,
1654 PSR_1_LINE_TO_WAIT,
1655 PSR_4_LINES_TO_WAIT,
1656 PSR_8_LINES_TO_WAIT
1657};
1658
1659struct intel_vbt_data {
1660 struct drm_display_mode *lfp_lvds_vbt_mode;
1661 struct drm_display_mode *sdvo_lvds_vbt_mode;
1662
1663
1664 unsigned int int_tv_support:1;
1665 unsigned int lvds_dither:1;
1666 unsigned int lvds_vbt:1;
1667 unsigned int int_crt_support:1;
1668 unsigned int lvds_use_ssc:1;
1669 unsigned int display_clock_mode:1;
1670 unsigned int fdi_rx_polarity_inverted:1;
1671 unsigned int panel_type:4;
1672 int lvds_ssc_freq;
1673 unsigned int bios_lvds_val;
1674
1675 enum drrs_support_type drrs_type;
1676
1677 struct {
1678 int rate;
1679 int lanes;
1680 int preemphasis;
1681 int vswing;
1682 bool low_vswing;
1683 bool initialized;
1684 bool support;
1685 int bpp;
1686 struct edp_power_seq pps;
1687 } edp;
1688
1689 struct {
1690 bool full_link;
1691 bool require_aux_wakeup;
1692 int idle_frames;
1693 enum psr_lines_to_wait lines_to_wait;
1694 int tp1_wakeup_time;
1695 int tp2_tp3_wakeup_time;
1696 } psr;
1697
1698 struct {
1699 u16 pwm_freq_hz;
1700 bool present;
1701 bool active_low_pwm;
1702 u8 min_brightness;
1703 u8 controller;
1704 enum intel_backlight_type type;
1705 } backlight;
1706
1707
1708 struct {
1709 u16 panel_id;
1710 struct mipi_config *config;
1711 struct mipi_pps_data *pps;
1712 u8 seq_version;
1713 u32 size;
1714 u8 *data;
1715 const u8 *sequence[MIPI_SEQ_MAX];
1716 } dsi;
1717
1718 int crt_ddc_pin;
1719
1720 int child_dev_num;
1721 union child_device_config *child_dev;
1722
1723 struct ddi_vbt_port_info ddi_port_info[I915_MAX_PORTS];
1724 struct sdvo_device_mapping sdvo_mappings[2];
1725};
1726
1727enum intel_ddb_partitioning {
1728 INTEL_DDB_PART_1_2,
1729 INTEL_DDB_PART_5_6,
1730};
1731
1732struct intel_wm_level {
1733 bool enable;
1734 uint32_t pri_val;
1735 uint32_t spr_val;
1736 uint32_t cur_val;
1737 uint32_t fbc_val;
1738};
1739
1740struct ilk_wm_values {
1741 uint32_t wm_pipe[3];
1742 uint32_t wm_lp[3];
1743 uint32_t wm_lp_spr[3];
1744 uint32_t wm_linetime[3];
1745 bool enable_fbc_wm;
1746 enum intel_ddb_partitioning partitioning;
1747};
1748
1749struct g4x_pipe_wm {
1750 uint16_t plane[I915_MAX_PLANES];
1751 uint16_t fbc;
1752};
1753
1754struct g4x_sr_wm {
1755 uint16_t plane;
1756 uint16_t cursor;
1757 uint16_t fbc;
1758};
1759
1760struct vlv_wm_ddl_values {
1761 uint8_t plane[I915_MAX_PLANES];
1762};
1763
1764struct vlv_wm_values {
1765 struct g4x_pipe_wm pipe[3];
1766 struct g4x_sr_wm sr;
1767 struct vlv_wm_ddl_values ddl[3];
1768 uint8_t level;
1769 bool cxsr;
1770};
1771
1772struct g4x_wm_values {
1773 struct g4x_pipe_wm pipe[2];
1774 struct g4x_sr_wm sr;
1775 struct g4x_sr_wm hpll;
1776 bool cxsr;
1777 bool hpll_en;
1778 bool fbc_en;
1779};
1780
1781struct skl_ddb_entry {
1782 uint16_t start, end;
1783};
1784
1785static inline uint16_t skl_ddb_entry_size(const struct skl_ddb_entry *entry)
1786{
1787 return entry->end - entry->start;
1788}
1789
1790static inline bool skl_ddb_entry_equal(const struct skl_ddb_entry *e1,
1791 const struct skl_ddb_entry *e2)
1792{
1793 if (e1->start == e2->start && e1->end == e2->end)
1794 return true;
1795
1796 return false;
1797}
1798
1799struct skl_ddb_allocation {
1800 struct skl_ddb_entry plane[I915_MAX_PIPES][I915_MAX_PLANES];
1801 struct skl_ddb_entry y_plane[I915_MAX_PIPES][I915_MAX_PLANES];
1802};
1803
1804struct skl_wm_values {
1805 unsigned dirty_pipes;
1806 struct skl_ddb_allocation ddb;
1807};
1808
1809struct skl_wm_level {
1810 bool plane_en;
1811 uint16_t plane_res_b;
1812 uint8_t plane_res_l;
1813};
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838struct i915_runtime_pm {
1839 atomic_t wakeref_count;
1840 bool suspended;
1841 bool irqs_enabled;
1842};
1843
1844enum intel_pipe_crc_source {
1845 INTEL_PIPE_CRC_SOURCE_NONE,
1846 INTEL_PIPE_CRC_SOURCE_PLANE1,
1847 INTEL_PIPE_CRC_SOURCE_PLANE2,
1848 INTEL_PIPE_CRC_SOURCE_PF,
1849 INTEL_PIPE_CRC_SOURCE_PIPE,
1850
1851 INTEL_PIPE_CRC_SOURCE_TV,
1852 INTEL_PIPE_CRC_SOURCE_DP_B,
1853 INTEL_PIPE_CRC_SOURCE_DP_C,
1854 INTEL_PIPE_CRC_SOURCE_DP_D,
1855 INTEL_PIPE_CRC_SOURCE_AUTO,
1856 INTEL_PIPE_CRC_SOURCE_MAX,
1857};
1858
1859struct intel_pipe_crc_entry {
1860 uint32_t frame;
1861 uint32_t crc[5];
1862};
1863
1864#define INTEL_PIPE_CRC_ENTRIES_NR 128
1865struct intel_pipe_crc {
1866 spinlock_t lock;
1867 bool opened;
1868 struct intel_pipe_crc_entry *entries;
1869 enum intel_pipe_crc_source source;
1870 int head, tail;
1871 wait_queue_head_t wq;
1872 int skipped;
1873};
1874
1875struct i915_frontbuffer_tracking {
1876 spinlock_t lock;
1877
1878
1879
1880
1881
1882 unsigned busy_bits;
1883 unsigned flip_bits;
1884};
1885
1886struct i915_wa_reg {
1887 i915_reg_t addr;
1888 u32 value;
1889
1890 u32 mask;
1891};
1892
1893
1894
1895
1896
1897
1898
1899#define I915_MAX_WA_REGS (16 + RING_MAX_NONPRIV_SLOTS)
1900
1901struct i915_workarounds {
1902 struct i915_wa_reg reg[I915_MAX_WA_REGS];
1903 u32 count;
1904 u32 hw_whitelist_count[I915_NUM_ENGINES];
1905};
1906
1907struct i915_virtual_gpu {
1908 bool active;
1909 u32 caps;
1910};
1911
1912
1913struct intel_wm_config {
1914 unsigned int num_pipes_active;
1915 bool sprites_enabled;
1916 bool sprites_scaled;
1917};
1918
1919struct i915_oa_format {
1920 u32 format;
1921 int size;
1922};
1923
1924struct i915_oa_reg {
1925 i915_reg_t addr;
1926 u32 value;
1927};
1928
1929struct i915_oa_config {
1930 char uuid[UUID_STRING_LEN + 1];
1931 int id;
1932
1933 const struct i915_oa_reg *mux_regs;
1934 u32 mux_regs_len;
1935 const struct i915_oa_reg *b_counter_regs;
1936 u32 b_counter_regs_len;
1937 const struct i915_oa_reg *flex_regs;
1938 u32 flex_regs_len;
1939
1940 struct attribute_group sysfs_metric;
1941 struct attribute *attrs[2];
1942 struct device_attribute sysfs_metric_id;
1943
1944 atomic_t ref_count;
1945};
1946
1947struct i915_perf_stream;
1948
1949
1950
1951
1952struct i915_perf_stream_ops {
1953
1954
1955
1956
1957
1958 void (*enable)(struct i915_perf_stream *stream);
1959
1960
1961
1962
1963
1964
1965 void (*disable)(struct i915_perf_stream *stream);
1966
1967
1968
1969
1970
1971 void (*poll_wait)(struct i915_perf_stream *stream,
1972 struct file *file,
1973 poll_table *wait);
1974
1975
1976
1977
1978
1979
1980 int (*wait_unlocked)(struct i915_perf_stream *stream);
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000 int (*read)(struct i915_perf_stream *stream,
2001 char __user *buf,
2002 size_t count,
2003 size_t *offset);
2004
2005
2006
2007
2008
2009
2010 void (*destroy)(struct i915_perf_stream *stream);
2011};
2012
2013
2014
2015
2016struct i915_perf_stream {
2017
2018
2019
2020 struct drm_i915_private *dev_priv;
2021
2022
2023
2024
2025 struct list_head link;
2026
2027
2028
2029
2030
2031
2032 u32 sample_flags;
2033
2034
2035
2036
2037
2038
2039 int sample_size;
2040
2041
2042
2043
2044
2045 struct i915_gem_context *ctx;
2046
2047
2048
2049
2050
2051
2052 bool enabled;
2053
2054
2055
2056
2057
2058 const struct i915_perf_stream_ops *ops;
2059
2060
2061
2062
2063 struct i915_oa_config *oa_config;
2064};
2065
2066
2067
2068
2069struct i915_oa_ops {
2070
2071
2072
2073
2074 bool (*is_valid_b_counter_reg)(struct drm_i915_private *dev_priv,
2075 u32 addr);
2076
2077
2078
2079
2080
2081 bool (*is_valid_mux_reg)(struct drm_i915_private *dev_priv, u32 addr);
2082
2083
2084
2085
2086
2087 bool (*is_valid_flex_reg)(struct drm_i915_private *dev_priv, u32 addr);
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104 void (*init_oa_buffer)(struct drm_i915_private *dev_priv);
2105
2106
2107
2108
2109
2110
2111
2112 int (*enable_metric_set)(struct drm_i915_private *dev_priv,
2113 const struct i915_oa_config *oa_config);
2114
2115
2116
2117
2118
2119 void (*disable_metric_set)(struct drm_i915_private *dev_priv);
2120
2121
2122
2123
2124 void (*oa_enable)(struct drm_i915_private *dev_priv);
2125
2126
2127
2128
2129 void (*oa_disable)(struct drm_i915_private *dev_priv);
2130
2131
2132
2133
2134
2135 int (*read)(struct i915_perf_stream *stream,
2136 char __user *buf,
2137 size_t count,
2138 size_t *offset);
2139
2140
2141
2142
2143
2144
2145
2146
2147 u32 (*oa_hw_tail_read)(struct drm_i915_private *dev_priv);
2148};
2149
2150struct intel_cdclk_state {
2151 unsigned int cdclk, vco, ref;
2152};
2153
2154struct drm_i915_private {
2155 struct drm_device drm;
2156
2157 struct kmem_cache *objects;
2158 struct kmem_cache *vmas;
2159 struct kmem_cache *luts;
2160 struct kmem_cache *requests;
2161 struct kmem_cache *dependencies;
2162 struct kmem_cache *priorities;
2163
2164 const struct intel_device_info info;
2165
2166 void __iomem *regs;
2167
2168 struct intel_uncore uncore;
2169
2170 struct i915_virtual_gpu vgpu;
2171
2172 struct intel_gvt *gvt;
2173
2174 struct intel_huc huc;
2175 struct intel_guc guc;
2176
2177 struct intel_csr csr;
2178
2179 struct intel_gmbus gmbus[GMBUS_NUM_PINS];
2180
2181
2182
2183 struct mutex gmbus_mutex;
2184
2185
2186
2187
2188 uint32_t gpio_mmio_base;
2189
2190
2191 uint32_t mipi_mmio_base;
2192
2193 uint32_t psr_mmio_base;
2194
2195 uint32_t pps_mmio_base;
2196
2197 wait_queue_head_t gmbus_wait_queue;
2198
2199 struct pci_dev *bridge_dev;
2200 struct i915_gem_context *kernel_context;
2201 struct intel_engine_cs *engine[I915_NUM_ENGINES];
2202 struct i915_vma *semaphore;
2203
2204 struct drm_dma_handle *status_page_dmah;
2205 struct resource mch_res;
2206
2207
2208 spinlock_t irq_lock;
2209
2210 bool display_irqs_enabled;
2211
2212
2213 struct pm_qos_request pm_qos;
2214
2215
2216 struct mutex sb_lock;
2217
2218
2219 union {
2220 u32 irq_mask;
2221 u32 de_irq_mask[I915_MAX_PIPES];
2222 };
2223 u32 gt_irq_mask;
2224 u32 pm_imr;
2225 u32 pm_ier;
2226 u32 pm_rps_events;
2227 u32 pm_guc_events;
2228 u32 pipestat_irq_mask[I915_MAX_PIPES];
2229
2230 struct i915_hotplug hotplug;
2231 struct intel_fbc fbc;
2232 struct i915_drrs drrs;
2233 struct intel_opregion opregion;
2234 struct intel_vbt_data vbt;
2235
2236 bool preserve_bios_swizzle;
2237
2238
2239 struct intel_overlay *overlay;
2240
2241
2242 struct mutex backlight_lock;
2243
2244
2245 bool no_aux_handshake;
2246
2247
2248 struct mutex pps_mutex;
2249
2250 struct drm_i915_fence_reg fence_regs[I915_MAX_NUM_FENCES];
2251 int num_fence_regs;
2252
2253 unsigned int fsb_freq, mem_freq, is_ddr3;
2254 unsigned int skl_preferred_vco_freq;
2255 unsigned int max_cdclk_freq;
2256
2257 unsigned int max_dotclk_freq;
2258 unsigned int rawclk_freq;
2259 unsigned int hpll_freq;
2260 unsigned int czclk_freq;
2261
2262 struct {
2263
2264
2265
2266
2267
2268
2269
2270 struct intel_cdclk_state logical;
2271
2272
2273
2274
2275 struct intel_cdclk_state actual;
2276
2277 struct intel_cdclk_state hw;
2278 } cdclk;
2279
2280
2281
2282
2283
2284
2285
2286
2287 struct workqueue_struct *wq;
2288
2289
2290 struct drm_i915_display_funcs display;
2291
2292
2293 enum intel_pch pch_type;
2294 unsigned short pch_id;
2295
2296 unsigned long quirks;
2297
2298 enum modeset_restore modeset_restore;
2299 struct mutex modeset_restore_lock;
2300 struct drm_atomic_state *modeset_restore_state;
2301 struct drm_modeset_acquire_ctx reset_ctx;
2302
2303 struct list_head vm_list;
2304 struct i915_ggtt ggtt;
2305
2306 struct i915_gem_mm mm;
2307 DECLARE_HASHTABLE(mm_structs, 7);
2308 struct mutex mm_lock;
2309
2310
2311
2312 struct intel_crtc *plane_to_crtc_mapping[I915_MAX_PIPES];
2313 struct intel_crtc *pipe_to_crtc_mapping[I915_MAX_PIPES];
2314
2315#ifdef CONFIG_DEBUG_FS
2316 struct intel_pipe_crc pipe_crc[I915_MAX_PIPES];
2317#endif
2318
2319
2320 int num_shared_dpll;
2321 struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
2322 const struct intel_dpll_mgr *dpll_mgr;
2323
2324
2325
2326
2327
2328
2329 struct mutex dpll_lock;
2330
2331 unsigned int active_crtcs;
2332 unsigned int min_pixclk[I915_MAX_PIPES];
2333
2334 int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
2335
2336 struct i915_workarounds workarounds;
2337
2338 struct i915_frontbuffer_tracking fb_tracking;
2339
2340 struct intel_atomic_helper {
2341 struct llist_head free_list;
2342 struct work_struct free_work;
2343 } atomic_helper;
2344
2345 u16 orig_clock;
2346
2347 bool mchbar_need_disable;
2348
2349 struct intel_l3_parity l3_parity;
2350
2351
2352 u32 edram_cap;
2353
2354
2355 struct intel_gen6_power_mgmt rps;
2356
2357
2358
2359 struct intel_ilk_power_mgmt ips;
2360
2361 struct i915_power_domains power_domains;
2362
2363 struct i915_psr psr;
2364
2365 struct i915_gpu_error gpu_error;
2366
2367 struct drm_i915_gem_object *vlv_pctx;
2368
2369
2370 struct intel_fbdev *fbdev;
2371 struct work_struct fbdev_suspend_work;
2372
2373 struct drm_property *broadcast_rgb_property;
2374 struct drm_property *force_audio_property;
2375
2376
2377 struct i915_audio_component *audio_component;
2378 bool audio_component_registered;
2379
2380
2381
2382
2383 struct mutex av_mutex;
2384
2385 struct {
2386 struct list_head list;
2387 struct llist_head free_list;
2388 struct work_struct free_work;
2389
2390
2391
2392
2393
2394 struct ida hw_ida;
2395#define MAX_CONTEXT_HW_ID (1<<21)
2396 } contexts;
2397
2398 u32 fdi_rx_config;
2399
2400
2401 u32 chv_phy_control;
2402
2403
2404
2405
2406
2407 u32 chv_dpll_md[I915_MAX_PIPES];
2408 u32 bxt_phy_grc;
2409
2410 u32 suspend_count;
2411 bool suspended_to_idle;
2412 struct i915_suspend_saved_registers regfile;
2413 struct vlv_s0ix_state vlv_s0ix_state;
2414
2415 enum {
2416 I915_SAGV_UNKNOWN = 0,
2417 I915_SAGV_DISABLED,
2418 I915_SAGV_ENABLED,
2419 I915_SAGV_NOT_CONTROLLED
2420 } sagv_status;
2421
2422 struct {
2423
2424
2425
2426
2427
2428
2429 uint16_t pri_latency[5];
2430
2431 uint16_t spr_latency[5];
2432
2433 uint16_t cur_latency[5];
2434
2435
2436
2437
2438
2439 uint16_t skl_latency[8];
2440
2441
2442 union {
2443 struct ilk_wm_values hw;
2444 struct skl_wm_values skl_hw;
2445 struct vlv_wm_values vlv;
2446 struct g4x_wm_values g4x;
2447 };
2448
2449 uint8_t max_level;
2450
2451
2452
2453
2454
2455
2456 struct mutex wm_mutex;
2457
2458
2459
2460
2461
2462
2463 bool distrust_bios_wm;
2464 } wm;
2465
2466 struct i915_runtime_pm pm;
2467
2468 struct {
2469 bool initialized;
2470
2471 struct kobject *metrics_kobj;
2472 struct ctl_table_header *sysctl_header;
2473
2474
2475
2476
2477
2478 struct mutex metrics_lock;
2479
2480
2481
2482
2483
2484 struct idr metrics_idr;
2485
2486
2487
2488
2489
2490 struct mutex lock;
2491 struct list_head streams;
2492
2493 struct {
2494
2495
2496
2497
2498
2499
2500 struct i915_perf_stream *exclusive_stream;
2501
2502 u32 specific_ctx_id;
2503
2504 struct hrtimer poll_check_timer;
2505 wait_queue_head_t poll_wq;
2506 bool pollin;
2507
2508
2509
2510
2511
2512 struct ratelimit_state spurious_report_rs;
2513
2514 bool periodic;
2515 int period_exponent;
2516 int timestamp_frequency;
2517
2518 struct i915_oa_config test_config;
2519
2520 struct {
2521 struct i915_vma *vma;
2522 u8 *vaddr;
2523 u32 last_ctx_id;
2524 int format;
2525 int format_size;
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552 spinlock_t ptr_lock;
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563 struct {
2564 u32 offset;
2565 } tails[2];
2566
2567
2568
2569
2570
2571 unsigned int aged_tail_idx;
2572
2573
2574
2575
2576
2577
2578 u64 aging_timestamp;
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589 u32 head;
2590 } oa_buffer;
2591
2592 u32 gen7_latched_oastatus1;
2593 u32 ctx_oactxctrl_offset;
2594 u32 ctx_flexeu0_offset;
2595
2596
2597
2598
2599
2600
2601 u32 gen8_valid_ctx_bit;
2602
2603 struct i915_oa_ops ops;
2604 const struct i915_oa_format *oa_formats;
2605 } oa;
2606 } perf;
2607
2608
2609 struct {
2610 void (*resume)(struct drm_i915_private *);
2611 void (*cleanup_engine)(struct intel_engine_cs *engine);
2612
2613 struct list_head timelines;
2614 struct i915_gem_timeline global_timeline;
2615 u32 active_requests;
2616
2617
2618
2619
2620
2621
2622
2623
2624 bool awake;
2625
2626
2627
2628
2629
2630
2631
2632
2633 struct delayed_work retire_work;
2634
2635
2636
2637
2638
2639
2640
2641
2642 struct delayed_work idle_work;
2643
2644 ktime_t last_init_time;
2645 } gt;
2646
2647
2648 bool chv_phy_assert[2];
2649
2650 bool ipc_enabled;
2651
2652
2653 struct intel_encoder *av_enc_map[I915_MAX_PIPES];
2654
2655
2656 struct {
2657 struct platform_device *platdev;
2658 int irq;
2659 } lpe_audio;
2660
2661
2662
2663
2664
2665};
2666
2667static inline struct drm_i915_private *to_i915(const struct drm_device *dev)
2668{
2669 return container_of(dev, struct drm_i915_private, drm);
2670}
2671
2672static inline struct drm_i915_private *kdev_to_i915(struct device *kdev)
2673{
2674 return to_i915(dev_get_drvdata(kdev));
2675}
2676
2677static inline struct drm_i915_private *guc_to_i915(struct intel_guc *guc)
2678{
2679 return container_of(guc, struct drm_i915_private, guc);
2680}
2681
2682static inline struct drm_i915_private *huc_to_i915(struct intel_huc *huc)
2683{
2684 return container_of(huc, struct drm_i915_private, huc);
2685}
2686
2687
2688#define for_each_engine(engine__, dev_priv__, id__) \
2689 for ((id__) = 0; \
2690 (id__) < I915_NUM_ENGINES; \
2691 (id__)++) \
2692 for_each_if ((engine__) = (dev_priv__)->engine[(id__)])
2693
2694
2695#define for_each_engine_masked(engine__, dev_priv__, mask__, tmp__) \
2696 for (tmp__ = mask__ & INTEL_INFO(dev_priv__)->ring_mask; \
2697 tmp__ ? (engine__ = (dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : 0; )
2698
2699enum hdmi_force_audio {
2700 HDMI_AUDIO_OFF_DVI = -2,
2701 HDMI_AUDIO_OFF,
2702 HDMI_AUDIO_AUTO,
2703 HDMI_AUDIO_ON,
2704};
2705
2706#define I915_GTT_OFFSET_NONE ((u32)-1)
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716#define INTEL_MAX_SPRITE_BITS_PER_PIPE 5
2717#define INTEL_FRONTBUFFER_BITS_PER_PIPE 8
2718#define INTEL_FRONTBUFFER_PRIMARY(pipe) \
2719 (1 << (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)))
2720#define INTEL_FRONTBUFFER_CURSOR(pipe) \
2721 (1 << (1 + (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))))
2722#define INTEL_FRONTBUFFER_SPRITE(pipe, plane) \
2723 (1 << (2 + plane + (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))))
2724#define INTEL_FRONTBUFFER_OVERLAY(pipe) \
2725 (1 << (2 + INTEL_MAX_SPRITE_BITS_PER_PIPE + (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))))
2726#define INTEL_FRONTBUFFER_ALL_MASK(pipe) \
2727 (0xff << (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)))
2728
2729
2730
2731
2732static __always_inline struct sgt_iter {
2733 struct scatterlist *sgp;
2734 union {
2735 unsigned long pfn;
2736 dma_addr_t dma;
2737 };
2738 unsigned int curr;
2739 unsigned int max;
2740} __sgt_iter(struct scatterlist *sgl, bool dma) {
2741 struct sgt_iter s = { .sgp = sgl };
2742
2743 if (s.sgp) {
2744 s.max = s.curr = s.sgp->offset;
2745 s.max += s.sgp->length;
2746 if (dma)
2747 s.dma = sg_dma_address(s.sgp);
2748 else
2749 s.pfn = page_to_pfn(sg_page(s.sgp));
2750 }
2751
2752 return s;
2753}
2754
2755static inline struct scatterlist *____sg_next(struct scatterlist *sg)
2756{
2757 ++sg;
2758 if (unlikely(sg_is_chain(sg)))
2759 sg = sg_chain_ptr(sg);
2760 return sg;
2761}
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772static inline struct scatterlist *__sg_next(struct scatterlist *sg)
2773{
2774#ifdef CONFIG_DEBUG_SG
2775 BUG_ON(sg->sg_magic != SG_MAGIC);
2776#endif
2777 return sg_is_last(sg) ? NULL : ____sg_next(sg);
2778}
2779
2780
2781
2782
2783
2784
2785
2786#define for_each_sgt_dma(__dmap, __iter, __sgt) \
2787 for ((__iter) = __sgt_iter((__sgt)->sgl, true); \
2788 ((__dmap) = (__iter).dma + (__iter).curr); \
2789 (((__iter).curr += PAGE_SIZE) < (__iter).max) || \
2790 ((__iter) = __sgt_iter(__sg_next((__iter).sgp), true), 0))
2791
2792
2793
2794
2795
2796
2797
2798#define for_each_sgt_page(__pp, __iter, __sgt) \
2799 for ((__iter) = __sgt_iter((__sgt)->sgl, false); \
2800 ((__pp) = (__iter).pfn == 0 ? NULL : \
2801 pfn_to_page((__iter).pfn + ((__iter).curr >> PAGE_SHIFT))); \
2802 (((__iter).curr += PAGE_SIZE) < (__iter).max) || \
2803 ((__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0))
2804
2805static inline const struct intel_device_info *
2806intel_info(const struct drm_i915_private *dev_priv)
2807{
2808 return &dev_priv->info;
2809}
2810
2811#define INTEL_INFO(dev_priv) intel_info((dev_priv))
2812
2813#define INTEL_GEN(dev_priv) ((dev_priv)->info.gen)
2814#define INTEL_DEVID(dev_priv) ((dev_priv)->info.device_id)
2815
2816#define REVID_FOREVER 0xff
2817#define INTEL_REVID(dev_priv) ((dev_priv)->drm.pdev->revision)
2818
2819#define GEN_FOREVER (0)
2820
2821
2822
2823
2824
2825#define IS_GEN(dev_priv, s, e) ({ \
2826 unsigned int __s = (s), __e = (e); \
2827 BUILD_BUG_ON(!__builtin_constant_p(s)); \
2828 BUILD_BUG_ON(!__builtin_constant_p(e)); \
2829 if ((__s) != GEN_FOREVER) \
2830 __s = (s) - 1; \
2831 if ((__e) == GEN_FOREVER) \
2832 __e = BITS_PER_LONG - 1; \
2833 else \
2834 __e = (e) - 1; \
2835 !!((dev_priv)->info.gen_mask & GENMASK((__e), (__s))); \
2836})
2837
2838
2839
2840
2841
2842
2843#define IS_REVID(p, since, until) \
2844 (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until))
2845
2846#define IS_I830(dev_priv) ((dev_priv)->info.platform == INTEL_I830)
2847#define IS_I845G(dev_priv) ((dev_priv)->info.platform == INTEL_I845G)
2848#define IS_I85X(dev_priv) ((dev_priv)->info.platform == INTEL_I85X)
2849#define IS_I865G(dev_priv) ((dev_priv)->info.platform == INTEL_I865G)
2850#define IS_I915G(dev_priv) ((dev_priv)->info.platform == INTEL_I915G)
2851#define IS_I915GM(dev_priv) ((dev_priv)->info.platform == INTEL_I915GM)
2852#define IS_I945G(dev_priv) ((dev_priv)->info.platform == INTEL_I945G)
2853#define IS_I945GM(dev_priv) ((dev_priv)->info.platform == INTEL_I945GM)
2854#define IS_I965G(dev_priv) ((dev_priv)->info.platform == INTEL_I965G)
2855#define IS_I965GM(dev_priv) ((dev_priv)->info.platform == INTEL_I965GM)
2856#define IS_G45(dev_priv) ((dev_priv)->info.platform == INTEL_G45)
2857#define IS_GM45(dev_priv) ((dev_priv)->info.platform == INTEL_GM45)
2858#define IS_G4X(dev_priv) (IS_G45(dev_priv) || IS_GM45(dev_priv))
2859#define IS_PINEVIEW_G(dev_priv) (INTEL_DEVID(dev_priv) == 0xa001)
2860#define IS_PINEVIEW_M(dev_priv) (INTEL_DEVID(dev_priv) == 0xa011)
2861#define IS_PINEVIEW(dev_priv) ((dev_priv)->info.platform == INTEL_PINEVIEW)
2862#define IS_G33(dev_priv) ((dev_priv)->info.platform == INTEL_G33)
2863#define IS_IRONLAKE_M(dev_priv) (INTEL_DEVID(dev_priv) == 0x0046)
2864#define IS_IVYBRIDGE(dev_priv) ((dev_priv)->info.platform == INTEL_IVYBRIDGE)
2865#define IS_IVB_GT1(dev_priv) (INTEL_DEVID(dev_priv) == 0x0156 || \
2866 INTEL_DEVID(dev_priv) == 0x0152 || \
2867 INTEL_DEVID(dev_priv) == 0x015a)
2868#define IS_VALLEYVIEW(dev_priv) ((dev_priv)->info.platform == INTEL_VALLEYVIEW)
2869#define IS_CHERRYVIEW(dev_priv) ((dev_priv)->info.platform == INTEL_CHERRYVIEW)
2870#define IS_HASWELL(dev_priv) ((dev_priv)->info.platform == INTEL_HASWELL)
2871#define IS_BROADWELL(dev_priv) ((dev_priv)->info.platform == INTEL_BROADWELL)
2872#define IS_SKYLAKE(dev_priv) ((dev_priv)->info.platform == INTEL_SKYLAKE)
2873#define IS_BROXTON(dev_priv) ((dev_priv)->info.platform == INTEL_BROXTON)
2874#define IS_KABYLAKE(dev_priv) ((dev_priv)->info.platform == INTEL_KABYLAKE)
2875#define IS_GEMINILAKE(dev_priv) ((dev_priv)->info.platform == INTEL_GEMINILAKE)
2876#define IS_COFFEELAKE(dev_priv) ((dev_priv)->info.platform == INTEL_COFFEELAKE)
2877#define IS_CANNONLAKE(dev_priv) ((dev_priv)->info.platform == INTEL_CANNONLAKE)
2878#define IS_MOBILE(dev_priv) ((dev_priv)->info.is_mobile)
2879#define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
2880 (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
2881#define IS_BDW_ULT(dev_priv) (IS_BROADWELL(dev_priv) && \
2882 ((INTEL_DEVID(dev_priv) & 0xf) == 0x6 || \
2883 (INTEL_DEVID(dev_priv) & 0xf) == 0xb || \
2884 (INTEL_DEVID(dev_priv) & 0xf) == 0xe))
2885
2886#define IS_BDW_ULX(dev_priv) (IS_BROADWELL(dev_priv) && \
2887 (INTEL_DEVID(dev_priv) & 0xf) == 0xe)
2888#define IS_BDW_GT3(dev_priv) (IS_BROADWELL(dev_priv) && \
2889 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0020)
2890#define IS_HSW_ULT(dev_priv) (IS_HASWELL(dev_priv) && \
2891 (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0A00)
2892#define IS_HSW_GT3(dev_priv) (IS_HASWELL(dev_priv) && \
2893 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0020)
2894
2895#define IS_HSW_ULX(dev_priv) (INTEL_DEVID(dev_priv) == 0x0A0E || \
2896 INTEL_DEVID(dev_priv) == 0x0A1E)
2897#define IS_SKL_ULT(dev_priv) (INTEL_DEVID(dev_priv) == 0x1906 || \
2898 INTEL_DEVID(dev_priv) == 0x1913 || \
2899 INTEL_DEVID(dev_priv) == 0x1916 || \
2900 INTEL_DEVID(dev_priv) == 0x1921 || \
2901 INTEL_DEVID(dev_priv) == 0x1926)
2902#define IS_SKL_ULX(dev_priv) (INTEL_DEVID(dev_priv) == 0x190E || \
2903 INTEL_DEVID(dev_priv) == 0x1915 || \
2904 INTEL_DEVID(dev_priv) == 0x191E)
2905#define IS_KBL_ULT(dev_priv) (INTEL_DEVID(dev_priv) == 0x5906 || \
2906 INTEL_DEVID(dev_priv) == 0x5913 || \
2907 INTEL_DEVID(dev_priv) == 0x5916 || \
2908 INTEL_DEVID(dev_priv) == 0x5921 || \
2909 INTEL_DEVID(dev_priv) == 0x5926)
2910#define IS_KBL_ULX(dev_priv) (INTEL_DEVID(dev_priv) == 0x590E || \
2911 INTEL_DEVID(dev_priv) == 0x5915 || \
2912 INTEL_DEVID(dev_priv) == 0x591E)
2913#define IS_SKL_GT2(dev_priv) (IS_SKYLAKE(dev_priv) && \
2914 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0010)
2915#define IS_SKL_GT3(dev_priv) (IS_SKYLAKE(dev_priv) && \
2916 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0020)
2917#define IS_SKL_GT4(dev_priv) (IS_SKYLAKE(dev_priv) && \
2918 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0030)
2919#define IS_KBL_GT2(dev_priv) (IS_KABYLAKE(dev_priv) && \
2920 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0010)
2921#define IS_KBL_GT3(dev_priv) (IS_KABYLAKE(dev_priv) && \
2922 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x0020)
2923#define IS_CFL_ULT(dev_priv) (IS_COFFEELAKE(dev_priv) && \
2924 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x00A0)
2925
2926#define IS_ALPHA_SUPPORT(intel_info) ((intel_info)->is_alpha_support)
2927
2928#define SKL_REVID_A0 0x0
2929#define SKL_REVID_B0 0x1
2930#define SKL_REVID_C0 0x2
2931#define SKL_REVID_D0 0x3
2932#define SKL_REVID_E0 0x4
2933#define SKL_REVID_F0 0x5
2934#define SKL_REVID_G0 0x6
2935#define SKL_REVID_H0 0x7
2936
2937#define IS_SKL_REVID(p, since, until) (IS_SKYLAKE(p) && IS_REVID(p, since, until))
2938
2939#define BXT_REVID_A0 0x0
2940#define BXT_REVID_A1 0x1
2941#define BXT_REVID_B0 0x3
2942#define BXT_REVID_B_LAST 0x8
2943#define BXT_REVID_C0 0x9
2944
2945#define IS_BXT_REVID(dev_priv, since, until) \
2946 (IS_BROXTON(dev_priv) && IS_REVID(dev_priv, since, until))
2947
2948#define KBL_REVID_A0 0x0
2949#define KBL_REVID_B0 0x1
2950#define KBL_REVID_C0 0x2
2951#define KBL_REVID_D0 0x3
2952#define KBL_REVID_E0 0x4
2953
2954#define IS_KBL_REVID(dev_priv, since, until) \
2955 (IS_KABYLAKE(dev_priv) && IS_REVID(dev_priv, since, until))
2956
2957#define GLK_REVID_A0 0x0
2958#define GLK_REVID_A1 0x1
2959
2960#define IS_GLK_REVID(dev_priv, since, until) \
2961 (IS_GEMINILAKE(dev_priv) && IS_REVID(dev_priv, since, until))
2962
2963#define CNL_REVID_A0 0x0
2964#define CNL_REVID_B0 0x1
2965
2966#define IS_CNL_REVID(p, since, until) \
2967 (IS_CANNONLAKE(p) && IS_REVID(p, since, until))
2968
2969
2970
2971
2972
2973
2974
2975#define IS_GEN2(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(1)))
2976#define IS_GEN3(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(2)))
2977#define IS_GEN4(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(3)))
2978#define IS_GEN5(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(4)))
2979#define IS_GEN6(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(5)))
2980#define IS_GEN7(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(6)))
2981#define IS_GEN8(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(7)))
2982#define IS_GEN9(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(8)))
2983#define IS_GEN10(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(9)))
2984
2985#define IS_LP(dev_priv) (INTEL_INFO(dev_priv)->is_lp)
2986#define IS_GEN9_LP(dev_priv) (IS_GEN9(dev_priv) && IS_LP(dev_priv))
2987#define IS_GEN9_BC(dev_priv) (IS_GEN9(dev_priv) && !IS_LP(dev_priv))
2988
2989#define ENGINE_MASK(id) BIT(id)
2990#define RENDER_RING ENGINE_MASK(RCS)
2991#define BSD_RING ENGINE_MASK(VCS)
2992#define BLT_RING ENGINE_MASK(BCS)
2993#define VEBOX_RING ENGINE_MASK(VECS)
2994#define BSD2_RING ENGINE_MASK(VCS2)
2995#define ALL_ENGINES (~0)
2996
2997#define HAS_ENGINE(dev_priv, id) \
2998 (!!((dev_priv)->info.ring_mask & ENGINE_MASK(id)))
2999
3000#define HAS_BSD(dev_priv) HAS_ENGINE(dev_priv, VCS)
3001#define HAS_BSD2(dev_priv) HAS_ENGINE(dev_priv, VCS2)
3002#define HAS_BLT(dev_priv) HAS_ENGINE(dev_priv, BCS)
3003#define HAS_VEBOX(dev_priv) HAS_ENGINE(dev_priv, VECS)
3004
3005#define HAS_LLC(dev_priv) ((dev_priv)->info.has_llc)
3006#define HAS_SNOOP(dev_priv) ((dev_priv)->info.has_snoop)
3007#define HAS_EDRAM(dev_priv) (!!((dev_priv)->edram_cap & EDRAM_ENABLED))
3008#define HAS_WT(dev_priv) ((IS_HASWELL(dev_priv) || \
3009 IS_BROADWELL(dev_priv)) && HAS_EDRAM(dev_priv))
3010
3011#define HWS_NEEDS_PHYSICAL(dev_priv) ((dev_priv)->info.hws_needs_physical)
3012
3013#define HAS_LOGICAL_RING_CONTEXTS(dev_priv) \
3014 ((dev_priv)->info.has_logical_ring_contexts)
3015#define USES_PPGTT(dev_priv) (i915.enable_ppgtt)
3016#define USES_FULL_PPGTT(dev_priv) (i915.enable_ppgtt >= 2)
3017#define USES_FULL_48BIT_PPGTT(dev_priv) (i915.enable_ppgtt == 3)
3018
3019#define HAS_OVERLAY(dev_priv) ((dev_priv)->info.has_overlay)
3020#define OVERLAY_NEEDS_PHYSICAL(dev_priv) \
3021 ((dev_priv)->info.overlay_needs_physical)
3022
3023
3024#define HAS_BROKEN_CS_TLB(dev_priv) (IS_I830(dev_priv) || IS_I845G(dev_priv))
3025
3026
3027#define NEEDS_WaRsDisableCoarsePowerGating(dev_priv) \
3028 (IS_SKL_GT3(dev_priv) || IS_SKL_GT4(dev_priv))
3029
3030
3031
3032
3033
3034
3035
3036#define HAS_AUX_IRQ(dev_priv) ((dev_priv)->info.gen >= 5)
3037#define HAS_GMBUS_IRQ(dev_priv) ((dev_priv)->info.has_gmbus_irq)
3038
3039
3040
3041
3042#define HAS_128_BYTE_Y_TILING(dev_priv) (!IS_GEN2(dev_priv) && \
3043 !(IS_I915G(dev_priv) || \
3044 IS_I915GM(dev_priv)))
3045#define SUPPORTS_TV(dev_priv) ((dev_priv)->info.supports_tv)
3046#define I915_HAS_HOTPLUG(dev_priv) ((dev_priv)->info.has_hotplug)
3047
3048#define HAS_FW_BLC(dev_priv) (INTEL_GEN(dev_priv) > 2)
3049#define HAS_PIPE_CXSR(dev_priv) ((dev_priv)->info.has_pipe_cxsr)
3050#define HAS_FBC(dev_priv) ((dev_priv)->info.has_fbc)
3051#define HAS_CUR_FBC(dev_priv) (!HAS_GMCH_DISPLAY(dev_priv) && INTEL_INFO(dev_priv)->gen >= 7)
3052
3053#define HAS_IPS(dev_priv) (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv))
3054
3055#define HAS_DP_MST(dev_priv) ((dev_priv)->info.has_dp_mst)
3056
3057#define HAS_DDI(dev_priv) ((dev_priv)->info.has_ddi)
3058#define HAS_FPGA_DBG_UNCLAIMED(dev_priv) ((dev_priv)->info.has_fpga_dbg)
3059#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr)
3060#define HAS_RC6(dev_priv) ((dev_priv)->info.has_rc6)
3061#define HAS_RC6p(dev_priv) ((dev_priv)->info.has_rc6p)
3062
3063#define HAS_CSR(dev_priv) ((dev_priv)->info.has_csr)
3064
3065#define HAS_RUNTIME_PM(dev_priv) ((dev_priv)->info.has_runtime_pm)
3066#define HAS_64BIT_RELOC(dev_priv) ((dev_priv)->info.has_64bit_reloc)
3067
3068
3069
3070
3071
3072
3073#define HAS_GUC(dev_priv) ((dev_priv)->info.has_guc)
3074#define HAS_GUC_CT(dev_priv) ((dev_priv)->info.has_guc_ct)
3075#define HAS_GUC_UCODE(dev_priv) (HAS_GUC(dev_priv))
3076#define HAS_GUC_SCHED(dev_priv) (HAS_GUC(dev_priv))
3077#define HAS_HUC_UCODE(dev_priv) (HAS_GUC(dev_priv))
3078
3079#define HAS_RESOURCE_STREAMER(dev_priv) ((dev_priv)->info.has_resource_streamer)
3080
3081#define HAS_POOLED_EU(dev_priv) ((dev_priv)->info.has_pooled_eu)
3082
3083#define INTEL_PCH_DEVICE_ID_MASK 0xff80
3084#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
3085#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00
3086#define INTEL_PCH_PPT_DEVICE_ID_TYPE 0x1e00
3087#define INTEL_PCH_LPT_DEVICE_ID_TYPE 0x8c00
3088#define INTEL_PCH_LPT_LP_DEVICE_ID_TYPE 0x9c00
3089#define INTEL_PCH_WPT_DEVICE_ID_TYPE 0x8c80
3090#define INTEL_PCH_WPT_LP_DEVICE_ID_TYPE 0x9c80
3091#define INTEL_PCH_SPT_DEVICE_ID_TYPE 0xA100
3092#define INTEL_PCH_SPT_LP_DEVICE_ID_TYPE 0x9D00
3093#define INTEL_PCH_KBP_DEVICE_ID_TYPE 0xA280
3094#define INTEL_PCH_CNP_DEVICE_ID_TYPE 0xA300
3095#define INTEL_PCH_CNP_LP_DEVICE_ID_TYPE 0x9D80
3096#define INTEL_PCH_P2X_DEVICE_ID_TYPE 0x7100
3097#define INTEL_PCH_P3X_DEVICE_ID_TYPE 0x7000
3098#define INTEL_PCH_QEMU_DEVICE_ID_TYPE 0x2900
3099
3100#define INTEL_PCH_TYPE(dev_priv) ((dev_priv)->pch_type)
3101#define HAS_PCH_CNP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_CNP)
3102#define HAS_PCH_CNP_LP(dev_priv) \
3103 ((dev_priv)->pch_id == INTEL_PCH_CNP_LP_DEVICE_ID_TYPE)
3104#define HAS_PCH_KBP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_KBP)
3105#define HAS_PCH_SPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_SPT)
3106#define HAS_PCH_LPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_LPT)
3107#define HAS_PCH_LPT_LP(dev_priv) \
3108 ((dev_priv)->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE || \
3109 (dev_priv)->pch_id == INTEL_PCH_WPT_LP_DEVICE_ID_TYPE)
3110#define HAS_PCH_LPT_H(dev_priv) \
3111 ((dev_priv)->pch_id == INTEL_PCH_LPT_DEVICE_ID_TYPE || \
3112 (dev_priv)->pch_id == INTEL_PCH_WPT_DEVICE_ID_TYPE)
3113#define HAS_PCH_CPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_CPT)
3114#define HAS_PCH_IBX(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_IBX)
3115#define HAS_PCH_NOP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_NOP)
3116#define HAS_PCH_SPLIT(dev_priv) (INTEL_PCH_TYPE(dev_priv) != PCH_NONE)
3117
3118#define HAS_GMCH_DISPLAY(dev_priv) ((dev_priv)->info.has_gmch_display)
3119
3120#define HAS_LSPCON(dev_priv) (INTEL_GEN(dev_priv) >= 9)
3121
3122
3123#define HAS_L3_DPF(dev_priv) ((dev_priv)->info.has_l3_dpf)
3124#define NUM_L3_SLICES(dev_priv) (IS_HSW_GT3(dev_priv) ? \
3125 2 : HAS_L3_DPF(dev_priv))
3126
3127#define GT_FREQUENCY_MULTIPLIER 50
3128#define GEN9_FREQ_SCALER 3
3129
3130#include "i915_trace.h"
3131
3132static inline bool intel_vtd_active(void)
3133{
3134#ifdef CONFIG_INTEL_IOMMU
3135 if (intel_iommu_gfx_mapped)
3136 return true;
3137#endif
3138 return false;
3139}
3140
3141static inline bool intel_scanout_needs_vtd_wa(struct drm_i915_private *dev_priv)
3142{
3143 return INTEL_GEN(dev_priv) >= 6 && intel_vtd_active();
3144}
3145
3146static inline bool
3147intel_ggtt_update_needs_vtd_wa(struct drm_i915_private *dev_priv)
3148{
3149 return IS_BROXTON(dev_priv) && intel_vtd_active();
3150}
3151
3152int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv,
3153 int enable_ppgtt);
3154
3155bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value);
3156
3157
3158void __printf(3, 4)
3159__i915_printk(struct drm_i915_private *dev_priv, const char *level,
3160 const char *fmt, ...);
3161
3162#define i915_report_error(dev_priv, fmt, ...) \
3163 __i915_printk(dev_priv, KERN_ERR, fmt, ##__VA_ARGS__)
3164
3165#ifdef CONFIG_COMPAT
3166extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
3167 unsigned long arg);
3168#else
3169#define i915_compat_ioctl NULL
3170#endif
3171extern const struct dev_pm_ops i915_pm_ops;
3172
3173extern int i915_driver_load(struct pci_dev *pdev,
3174 const struct pci_device_id *ent);
3175extern void i915_driver_unload(struct drm_device *dev);
3176extern int intel_gpu_reset(struct drm_i915_private *dev_priv, u32 engine_mask);
3177extern bool intel_has_gpu_reset(struct drm_i915_private *dev_priv);
3178
3179#define I915_RESET_QUIET BIT(0)
3180extern void i915_reset(struct drm_i915_private *i915, unsigned int flags);
3181extern int i915_reset_engine(struct intel_engine_cs *engine,
3182 unsigned int flags);
3183
3184extern bool intel_has_reset_engine(struct drm_i915_private *dev_priv);
3185extern int intel_guc_reset(struct drm_i915_private *dev_priv);
3186extern void intel_engine_init_hangcheck(struct intel_engine_cs *engine);
3187extern void intel_hangcheck_init(struct drm_i915_private *dev_priv);
3188extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
3189extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
3190extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
3191extern void i915_update_gfx_val(struct drm_i915_private *dev_priv);
3192int vlv_force_gfx_clock(struct drm_i915_private *dev_priv, bool on);
3193
3194int intel_engines_init_mmio(struct drm_i915_private *dev_priv);
3195int intel_engines_init(struct drm_i915_private *dev_priv);
3196
3197
3198void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
3199 u32 pin_mask, u32 long_mask);
3200void intel_hpd_init(struct drm_i915_private *dev_priv);
3201void intel_hpd_init_work(struct drm_i915_private *dev_priv);
3202void intel_hpd_cancel_work(struct drm_i915_private *dev_priv);
3203enum port intel_hpd_pin_to_port(enum hpd_pin pin);
3204enum hpd_pin intel_hpd_pin(enum port port);
3205bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
3206void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
3207
3208
3209static inline void i915_queue_hangcheck(struct drm_i915_private *dev_priv)
3210{
3211 unsigned long delay;
3212
3213 if (unlikely(!i915.enable_hangcheck))
3214 return;
3215
3216
3217
3218
3219
3220
3221 delay = round_jiffies_up_relative(DRM_I915_HANGCHECK_JIFFIES);
3222 queue_delayed_work(system_long_wq,
3223 &dev_priv->gpu_error.hangcheck_work, delay);
3224}
3225
3226__printf(3, 4)
3227void i915_handle_error(struct drm_i915_private *dev_priv,
3228 u32 engine_mask,
3229 const char *fmt, ...);
3230
3231extern void intel_irq_init(struct drm_i915_private *dev_priv);
3232extern void intel_irq_fini(struct drm_i915_private *dev_priv);
3233int intel_irq_install(struct drm_i915_private *dev_priv);
3234void intel_irq_uninstall(struct drm_i915_private *dev_priv);
3235
3236static inline bool intel_gvt_active(struct drm_i915_private *dev_priv)
3237{
3238 return dev_priv->gvt;
3239}
3240
3241static inline bool intel_vgpu_active(struct drm_i915_private *dev_priv)
3242{
3243 return dev_priv->vgpu.active;
3244}
3245
3246void
3247i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
3248 u32 status_mask);
3249
3250void
3251i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
3252 u32 status_mask);
3253
3254void valleyview_enable_display_irqs(struct drm_i915_private *dev_priv);
3255void valleyview_disable_display_irqs(struct drm_i915_private *dev_priv);
3256void i915_hotplug_interrupt_update(struct drm_i915_private *dev_priv,
3257 uint32_t mask,
3258 uint32_t bits);
3259void ilk_update_display_irq(struct drm_i915_private *dev_priv,
3260 uint32_t interrupt_mask,
3261 uint32_t enabled_irq_mask);
3262static inline void
3263ilk_enable_display_irq(struct drm_i915_private *dev_priv, uint32_t bits)
3264{
3265 ilk_update_display_irq(dev_priv, bits, bits);
3266}
3267static inline void
3268ilk_disable_display_irq(struct drm_i915_private *dev_priv, uint32_t bits)
3269{
3270 ilk_update_display_irq(dev_priv, bits, 0);
3271}
3272void bdw_update_pipe_irq(struct drm_i915_private *dev_priv,
3273 enum pipe pipe,
3274 uint32_t interrupt_mask,
3275 uint32_t enabled_irq_mask);
3276static inline void bdw_enable_pipe_irq(struct drm_i915_private *dev_priv,
3277 enum pipe pipe, uint32_t bits)
3278{
3279 bdw_update_pipe_irq(dev_priv, pipe, bits, bits);
3280}
3281static inline void bdw_disable_pipe_irq(struct drm_i915_private *dev_priv,
3282 enum pipe pipe, uint32_t bits)
3283{
3284 bdw_update_pipe_irq(dev_priv, pipe, bits, 0);
3285}
3286void ibx_display_interrupt_update(struct drm_i915_private *dev_priv,
3287 uint32_t interrupt_mask,
3288 uint32_t enabled_irq_mask);
3289static inline void
3290ibx_enable_display_interrupt(struct drm_i915_private *dev_priv, uint32_t bits)
3291{
3292 ibx_display_interrupt_update(dev_priv, bits, bits);
3293}
3294static inline void
3295ibx_disable_display_interrupt(struct drm_i915_private *dev_priv, uint32_t bits)
3296{
3297 ibx_display_interrupt_update(dev_priv, bits, 0);
3298}
3299
3300
3301int i915_gem_create_ioctl(struct drm_device *dev, void *data,
3302 struct drm_file *file_priv);
3303int i915_gem_pread_ioctl(struct drm_device *dev, void *data,
3304 struct drm_file *file_priv);
3305int i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
3306 struct drm_file *file_priv);
3307int i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
3308 struct drm_file *file_priv);
3309int i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
3310 struct drm_file *file_priv);
3311int i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
3312 struct drm_file *file_priv);
3313int i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
3314 struct drm_file *file_priv);
3315int i915_gem_execbuffer(struct drm_device *dev, void *data,
3316 struct drm_file *file_priv);
3317int i915_gem_execbuffer2(struct drm_device *dev, void *data,
3318 struct drm_file *file_priv);
3319int i915_gem_busy_ioctl(struct drm_device *dev, void *data,
3320 struct drm_file *file_priv);
3321int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
3322 struct drm_file *file);
3323int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
3324 struct drm_file *file);
3325int i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
3326 struct drm_file *file_priv);
3327int i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
3328 struct drm_file *file_priv);
3329int i915_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
3330 struct drm_file *file_priv);
3331int i915_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
3332 struct drm_file *file_priv);
3333int i915_gem_init_userptr(struct drm_i915_private *dev_priv);
3334void i915_gem_cleanup_userptr(struct drm_i915_private *dev_priv);
3335int i915_gem_userptr_ioctl(struct drm_device *dev, void *data,
3336 struct drm_file *file);
3337int i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
3338 struct drm_file *file_priv);
3339int i915_gem_wait_ioctl(struct drm_device *dev, void *data,
3340 struct drm_file *file_priv);
3341void i915_gem_sanitize(struct drm_i915_private *i915);
3342int i915_gem_load_init(struct drm_i915_private *dev_priv);
3343void i915_gem_load_cleanup(struct drm_i915_private *dev_priv);
3344void i915_gem_load_init_fences(struct drm_i915_private *dev_priv);
3345int i915_gem_freeze(struct drm_i915_private *dev_priv);
3346int i915_gem_freeze_late(struct drm_i915_private *dev_priv);
3347
3348void *i915_gem_object_alloc(struct drm_i915_private *dev_priv);
3349void i915_gem_object_free(struct drm_i915_gem_object *obj);
3350void i915_gem_object_init(struct drm_i915_gem_object *obj,
3351 const struct drm_i915_gem_object_ops *ops);
3352struct drm_i915_gem_object *
3353i915_gem_object_create(struct drm_i915_private *dev_priv, u64 size);
3354struct drm_i915_gem_object *
3355i915_gem_object_create_from_data(struct drm_i915_private *dev_priv,
3356 const void *data, size_t size);
3357void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file);
3358void i915_gem_free_object(struct drm_gem_object *obj);
3359
3360static inline void i915_gem_drain_freed_objects(struct drm_i915_private *i915)
3361{
3362
3363
3364
3365
3366
3367
3368 do {
3369 rcu_barrier();
3370 } while (flush_work(&i915->mm.free_work));
3371}
3372
3373static inline void i915_gem_drain_workqueue(struct drm_i915_private *i915)
3374{
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386 int pass = 2;
3387 do {
3388 rcu_barrier();
3389 drain_workqueue(i915->wq);
3390 } while (--pass);
3391}
3392
3393struct i915_vma * __must_check
3394i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
3395 const struct i915_ggtt_view *view,
3396 u64 size,
3397 u64 alignment,
3398 u64 flags);
3399
3400int i915_gem_object_unbind(struct drm_i915_gem_object *obj);
3401void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
3402
3403void i915_gem_runtime_suspend(struct drm_i915_private *dev_priv);
3404
3405static inline int __sg_page_count(const struct scatterlist *sg)
3406{
3407 return sg->length >> PAGE_SHIFT;
3408}
3409
3410struct scatterlist *
3411i915_gem_object_get_sg(struct drm_i915_gem_object *obj,
3412 unsigned int n, unsigned int *offset);
3413
3414struct page *
3415i915_gem_object_get_page(struct drm_i915_gem_object *obj,
3416 unsigned int n);
3417
3418struct page *
3419i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj,
3420 unsigned int n);
3421
3422dma_addr_t
3423i915_gem_object_get_dma_address(struct drm_i915_gem_object *obj,
3424 unsigned long n);
3425
3426void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj,
3427 struct sg_table *pages);
3428int __i915_gem_object_get_pages(struct drm_i915_gem_object *obj);
3429
3430static inline int __must_check
3431i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
3432{
3433 might_lock(&obj->mm.lock);
3434
3435 if (atomic_inc_not_zero(&obj->mm.pages_pin_count))
3436 return 0;
3437
3438 return __i915_gem_object_get_pages(obj);
3439}
3440
3441static inline void
3442__i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
3443{
3444 GEM_BUG_ON(!obj->mm.pages);
3445
3446 atomic_inc(&obj->mm.pages_pin_count);
3447}
3448
3449static inline bool
3450i915_gem_object_has_pinned_pages(struct drm_i915_gem_object *obj)
3451{
3452 return atomic_read(&obj->mm.pages_pin_count);
3453}
3454
3455static inline void
3456__i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
3457{
3458 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj));
3459 GEM_BUG_ON(!obj->mm.pages);
3460
3461 atomic_dec(&obj->mm.pages_pin_count);
3462}
3463
3464static inline void
3465i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
3466{
3467 __i915_gem_object_unpin_pages(obj);
3468}
3469
3470enum i915_mm_subclass {
3471 I915_MM_NORMAL = 0,
3472 I915_MM_SHRINKER
3473};
3474
3475void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj,
3476 enum i915_mm_subclass subclass);
3477void __i915_gem_object_invalidate(struct drm_i915_gem_object *obj);
3478
3479enum i915_map_type {
3480 I915_MAP_WB = 0,
3481 I915_MAP_WC,
3482#define I915_MAP_OVERRIDE BIT(31)
3483 I915_MAP_FORCE_WB = I915_MAP_WB | I915_MAP_OVERRIDE,
3484 I915_MAP_FORCE_WC = I915_MAP_WC | I915_MAP_OVERRIDE,
3485};
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503void *__must_check i915_gem_object_pin_map(struct drm_i915_gem_object *obj,
3504 enum i915_map_type type);
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515static inline void i915_gem_object_unpin_map(struct drm_i915_gem_object *obj)
3516{
3517 i915_gem_object_unpin_pages(obj);
3518}
3519
3520int i915_gem_obj_prepare_shmem_read(struct drm_i915_gem_object *obj,
3521 unsigned int *needs_clflush);
3522int i915_gem_obj_prepare_shmem_write(struct drm_i915_gem_object *obj,
3523 unsigned int *needs_clflush);
3524#define CLFLUSH_BEFORE BIT(0)
3525#define CLFLUSH_AFTER BIT(1)
3526#define CLFLUSH_FLAGS (CLFLUSH_BEFORE | CLFLUSH_AFTER)
3527
3528static inline void
3529i915_gem_obj_finish_shmem_access(struct drm_i915_gem_object *obj)
3530{
3531 i915_gem_object_unpin_pages(obj);
3532}
3533
3534int __must_check i915_mutex_lock_interruptible(struct drm_device *dev);
3535void i915_vma_move_to_active(struct i915_vma *vma,
3536 struct drm_i915_gem_request *req,
3537 unsigned int flags);
3538int i915_gem_dumb_create(struct drm_file *file_priv,
3539 struct drm_device *dev,
3540 struct drm_mode_create_dumb *args);
3541int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
3542 uint32_t handle, uint64_t *offset);
3543int i915_gem_mmap_gtt_version(void);
3544
3545void i915_gem_track_fb(struct drm_i915_gem_object *old,
3546 struct drm_i915_gem_object *new,
3547 unsigned frontbuffer_bits);
3548
3549int __must_check i915_gem_set_global_seqno(struct drm_device *dev, u32 seqno);
3550
3551struct drm_i915_gem_request *
3552i915_gem_find_active_request(struct intel_engine_cs *engine);
3553
3554void i915_gem_retire_requests(struct drm_i915_private *dev_priv);
3555
3556static inline bool i915_reset_backoff(struct i915_gpu_error *error)
3557{
3558 return unlikely(test_bit(I915_RESET_BACKOFF, &error->flags));
3559}
3560
3561static inline bool i915_reset_handoff(struct i915_gpu_error *error)
3562{
3563 return unlikely(test_bit(I915_RESET_HANDOFF, &error->flags));
3564}
3565
3566static inline bool i915_terminally_wedged(struct i915_gpu_error *error)
3567{
3568 return unlikely(test_bit(I915_WEDGED, &error->flags));
3569}
3570
3571static inline bool i915_reset_backoff_or_wedged(struct i915_gpu_error *error)
3572{
3573 return i915_reset_backoff(error) | i915_terminally_wedged(error);
3574}
3575
3576static inline u32 i915_reset_count(struct i915_gpu_error *error)
3577{
3578 return READ_ONCE(error->reset_count);
3579}
3580
3581static inline u32 i915_reset_engine_count(struct i915_gpu_error *error,
3582 struct intel_engine_cs *engine)
3583{
3584 return READ_ONCE(error->reset_engine_count[engine->id]);
3585}
3586
3587struct drm_i915_gem_request *
3588i915_gem_reset_prepare_engine(struct intel_engine_cs *engine);
3589int i915_gem_reset_prepare(struct drm_i915_private *dev_priv);
3590void i915_gem_reset(struct drm_i915_private *dev_priv);
3591void i915_gem_reset_finish_engine(struct intel_engine_cs *engine);
3592void i915_gem_reset_finish(struct drm_i915_private *dev_priv);
3593void i915_gem_set_wedged(struct drm_i915_private *dev_priv);
3594bool i915_gem_unset_wedged(struct drm_i915_private *dev_priv);
3595void i915_gem_reset_engine(struct intel_engine_cs *engine,
3596 struct drm_i915_gem_request *request);
3597
3598void i915_gem_init_mmio(struct drm_i915_private *i915);
3599int __must_check i915_gem_init(struct drm_i915_private *dev_priv);
3600int __must_check i915_gem_init_hw(struct drm_i915_private *dev_priv);
3601void i915_gem_init_swizzling(struct drm_i915_private *dev_priv);
3602void i915_gem_cleanup_engines(struct drm_i915_private *dev_priv);
3603int i915_gem_wait_for_idle(struct drm_i915_private *dev_priv,
3604 unsigned int flags);
3605int __must_check i915_gem_suspend(struct drm_i915_private *dev_priv);
3606void i915_gem_resume(struct drm_i915_private *dev_priv);
3607int i915_gem_fault(struct vm_fault *vmf);
3608int i915_gem_object_wait(struct drm_i915_gem_object *obj,
3609 unsigned int flags,
3610 long timeout,
3611 struct intel_rps_client *rps);
3612int i915_gem_object_wait_priority(struct drm_i915_gem_object *obj,
3613 unsigned int flags,
3614 int priority);
3615#define I915_PRIORITY_DISPLAY I915_PRIORITY_MAX
3616
3617int __must_check
3618i915_gem_object_set_to_wc_domain(struct drm_i915_gem_object *obj, bool write);
3619int __must_check
3620i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write);
3621int __must_check
3622i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write);
3623struct i915_vma * __must_check
3624i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
3625 u32 alignment,
3626 const struct i915_ggtt_view *view);
3627void i915_gem_object_unpin_from_display_plane(struct i915_vma *vma);
3628int i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
3629 int align);
3630int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file);
3631void i915_gem_release(struct drm_device *dev, struct drm_file *file);
3632
3633int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
3634 enum i915_cache_level cache_level);
3635
3636struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
3637 struct dma_buf *dma_buf);
3638
3639struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
3640 struct drm_gem_object *gem_obj, int flags);
3641
3642static inline struct i915_hw_ppgtt *
3643i915_vm_to_ppgtt(struct i915_address_space *vm)
3644{
3645 return container_of(vm, struct i915_hw_ppgtt, base);
3646}
3647
3648
3649int __must_check i915_vma_get_fence(struct i915_vma *vma);
3650int __must_check i915_vma_put_fence(struct i915_vma *vma);
3651
3652void i915_gem_revoke_fences(struct drm_i915_private *dev_priv);
3653void i915_gem_restore_fences(struct drm_i915_private *dev_priv);
3654
3655void i915_gem_detect_bit_6_swizzle(struct drm_i915_private *dev_priv);
3656void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj,
3657 struct sg_table *pages);
3658void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj,
3659 struct sg_table *pages);
3660
3661static inline struct i915_gem_context *
3662__i915_gem_context_lookup_rcu(struct drm_i915_file_private *file_priv, u32 id)
3663{
3664 return idr_find(&file_priv->context_idr, id);
3665}
3666
3667static inline struct i915_gem_context *
3668i915_gem_context_lookup(struct drm_i915_file_private *file_priv, u32 id)
3669{
3670 struct i915_gem_context *ctx;
3671
3672 rcu_read_lock();
3673 ctx = __i915_gem_context_lookup_rcu(file_priv, id);
3674 if (ctx && !kref_get_unless_zero(&ctx->ref))
3675 ctx = NULL;
3676 rcu_read_unlock();
3677
3678 return ctx;
3679}
3680
3681static inline struct intel_timeline *
3682i915_gem_context_lookup_timeline(struct i915_gem_context *ctx,
3683 struct intel_engine_cs *engine)
3684{
3685 struct i915_address_space *vm;
3686
3687 vm = ctx->ppgtt ? &ctx->ppgtt->base : &ctx->i915->ggtt.base;
3688 return &vm->timeline.engine[engine->id];
3689}
3690
3691int i915_perf_open_ioctl(struct drm_device *dev, void *data,
3692 struct drm_file *file);
3693int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
3694 struct drm_file *file);
3695int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data,
3696 struct drm_file *file);
3697void i915_oa_init_reg_state(struct intel_engine_cs *engine,
3698 struct i915_gem_context *ctx,
3699 uint32_t *reg_state);
3700
3701
3702int __must_check i915_gem_evict_something(struct i915_address_space *vm,
3703 u64 min_size, u64 alignment,
3704 unsigned cache_level,
3705 u64 start, u64 end,
3706 unsigned flags);
3707int __must_check i915_gem_evict_for_node(struct i915_address_space *vm,
3708 struct drm_mm_node *node,
3709 unsigned int flags);
3710int i915_gem_evict_vm(struct i915_address_space *vm);
3711
3712
3713static inline void i915_gem_chipset_flush(struct drm_i915_private *dev_priv)
3714{
3715 wmb();
3716 if (INTEL_GEN(dev_priv) < 6)
3717 intel_gtt_chipset_flush();
3718}
3719
3720
3721int i915_gem_stolen_insert_node(struct drm_i915_private *dev_priv,
3722 struct drm_mm_node *node, u64 size,
3723 unsigned alignment);
3724int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *dev_priv,
3725 struct drm_mm_node *node, u64 size,
3726 unsigned alignment, u64 start,
3727 u64 end);
3728void i915_gem_stolen_remove_node(struct drm_i915_private *dev_priv,
3729 struct drm_mm_node *node);
3730int i915_gem_init_stolen(struct drm_i915_private *dev_priv);
3731void i915_gem_cleanup_stolen(struct drm_device *dev);
3732struct drm_i915_gem_object *
3733i915_gem_object_create_stolen(struct drm_i915_private *dev_priv, u32 size);
3734struct drm_i915_gem_object *
3735i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv,
3736 u32 stolen_offset,
3737 u32 gtt_offset,
3738 u32 size);
3739
3740
3741struct drm_i915_gem_object *
3742i915_gem_object_create_internal(struct drm_i915_private *dev_priv,
3743 phys_addr_t size);
3744
3745
3746unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
3747 unsigned long target,
3748 unsigned long *nr_scanned,
3749 unsigned flags);
3750#define I915_SHRINK_PURGEABLE 0x1
3751#define I915_SHRINK_UNBOUND 0x2
3752#define I915_SHRINK_BOUND 0x4
3753#define I915_SHRINK_ACTIVE 0x8
3754#define I915_SHRINK_VMAPS 0x10
3755unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv);
3756void i915_gem_shrinker_init(struct drm_i915_private *dev_priv);
3757void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv);
3758
3759
3760
3761static inline bool i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj)
3762{
3763 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
3764
3765 return dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 &&
3766 i915_gem_object_is_tiled(obj);
3767}
3768
3769u32 i915_gem_fence_size(struct drm_i915_private *dev_priv, u32 size,
3770 unsigned int tiling, unsigned int stride);
3771u32 i915_gem_fence_alignment(struct drm_i915_private *dev_priv, u32 size,
3772 unsigned int tiling, unsigned int stride);
3773
3774
3775#ifdef CONFIG_DEBUG_FS
3776int i915_debugfs_register(struct drm_i915_private *dev_priv);
3777int i915_debugfs_connector_add(struct drm_connector *connector);
3778void intel_display_crc_init(struct drm_i915_private *dev_priv);
3779#else
3780static inline int i915_debugfs_register(struct drm_i915_private *dev_priv) {return 0;}
3781static inline int i915_debugfs_connector_add(struct drm_connector *connector)
3782{ return 0; }
3783static inline void intel_display_crc_init(struct drm_i915_private *dev_priv) {}
3784#endif
3785
3786
3787#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
3788
3789__printf(2, 3)
3790void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...);
3791int i915_error_state_to_str(struct drm_i915_error_state_buf *estr,
3792 const struct i915_gpu_state *gpu);
3793int i915_error_state_buf_init(struct drm_i915_error_state_buf *eb,
3794 struct drm_i915_private *i915,
3795 size_t count, loff_t pos);
3796static inline void i915_error_state_buf_release(
3797 struct drm_i915_error_state_buf *eb)
3798{
3799 kfree(eb->buf);
3800}
3801
3802struct i915_gpu_state *i915_capture_gpu_state(struct drm_i915_private *i915);
3803void i915_capture_error_state(struct drm_i915_private *dev_priv,
3804 u32 engine_mask,
3805 const char *error_msg);
3806
3807static inline struct i915_gpu_state *
3808i915_gpu_state_get(struct i915_gpu_state *gpu)
3809{
3810 kref_get(&gpu->ref);
3811 return gpu;
3812}
3813
3814void __i915_gpu_state_free(struct kref *kref);
3815static inline void i915_gpu_state_put(struct i915_gpu_state *gpu)
3816{
3817 if (gpu)
3818 kref_put(&gpu->ref, __i915_gpu_state_free);
3819}
3820
3821struct i915_gpu_state *i915_first_error_state(struct drm_i915_private *i915);
3822void i915_reset_error_state(struct drm_i915_private *i915);
3823
3824#else
3825
3826static inline void i915_capture_error_state(struct drm_i915_private *dev_priv,
3827 u32 engine_mask,
3828 const char *error_msg)
3829{
3830}
3831
3832static inline struct i915_gpu_state *
3833i915_first_error_state(struct drm_i915_private *i915)
3834{
3835 return NULL;
3836}
3837
3838static inline void i915_reset_error_state(struct drm_i915_private *i915)
3839{
3840}
3841
3842#endif
3843
3844const char *i915_cache_level_str(struct drm_i915_private *i915, int type);
3845
3846
3847int i915_cmd_parser_get_version(struct drm_i915_private *dev_priv);
3848void intel_engine_init_cmd_parser(struct intel_engine_cs *engine);
3849void intel_engine_cleanup_cmd_parser(struct intel_engine_cs *engine);
3850int intel_engine_cmd_parser(struct intel_engine_cs *engine,
3851 struct drm_i915_gem_object *batch_obj,
3852 struct drm_i915_gem_object *shadow_batch_obj,
3853 u32 batch_start_offset,
3854 u32 batch_len,
3855 bool is_master);
3856
3857
3858extern void i915_perf_init(struct drm_i915_private *dev_priv);
3859extern void i915_perf_fini(struct drm_i915_private *dev_priv);
3860extern void i915_perf_register(struct drm_i915_private *dev_priv);
3861extern void i915_perf_unregister(struct drm_i915_private *dev_priv);
3862
3863
3864extern int i915_save_state(struct drm_i915_private *dev_priv);
3865extern int i915_restore_state(struct drm_i915_private *dev_priv);
3866
3867
3868void i915_setup_sysfs(struct drm_i915_private *dev_priv);
3869void i915_teardown_sysfs(struct drm_i915_private *dev_priv);
3870
3871
3872int intel_lpe_audio_init(struct drm_i915_private *dev_priv);
3873void intel_lpe_audio_teardown(struct drm_i915_private *dev_priv);
3874void intel_lpe_audio_irq_handler(struct drm_i915_private *dev_priv);
3875void intel_lpe_audio_notify(struct drm_i915_private *dev_priv,
3876 enum pipe pipe, enum port port,
3877 const void *eld, int ls_clock, bool dp_output);
3878
3879
3880extern int intel_setup_gmbus(struct drm_i915_private *dev_priv);
3881extern void intel_teardown_gmbus(struct drm_i915_private *dev_priv);
3882extern bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
3883 unsigned int pin);
3884
3885extern struct i2c_adapter *
3886intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, unsigned int pin);
3887extern void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed);
3888extern void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit);
3889static inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter)
3890{
3891 return container_of(adapter, struct intel_gmbus, adapter)->force_bit;
3892}
3893extern void intel_i2c_reset(struct drm_i915_private *dev_priv);
3894
3895
3896void intel_bios_init(struct drm_i915_private *dev_priv);
3897bool intel_bios_is_valid_vbt(const void *buf, size_t size);
3898bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
3899bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
3900bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port);
3901bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
3902bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv, enum port port);
3903bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
3904bool intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv,
3905 enum port port);
3906bool intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv,
3907 enum port port);
3908
3909
3910
3911#ifdef CONFIG_ACPI
3912extern int intel_opregion_setup(struct drm_i915_private *dev_priv);
3913extern void intel_opregion_register(struct drm_i915_private *dev_priv);
3914extern void intel_opregion_unregister(struct drm_i915_private *dev_priv);
3915extern void intel_opregion_asle_intr(struct drm_i915_private *dev_priv);
3916extern int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
3917 bool enable);
3918extern int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
3919 pci_power_t state);
3920extern int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv);
3921#else
3922static inline int intel_opregion_setup(struct drm_i915_private *dev) { return 0; }
3923static inline void intel_opregion_register(struct drm_i915_private *dev_priv) { }
3924static inline void intel_opregion_unregister(struct drm_i915_private *dev_priv) { }
3925static inline void intel_opregion_asle_intr(struct drm_i915_private *dev_priv)
3926{
3927}
3928static inline int
3929intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, bool enable)
3930{
3931 return 0;
3932}
3933static inline int
3934intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state)
3935{
3936 return 0;
3937}
3938static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev)
3939{
3940 return -ENODEV;
3941}
3942#endif
3943
3944
3945#ifdef CONFIG_ACPI
3946extern void intel_register_dsm_handler(void);
3947extern void intel_unregister_dsm_handler(void);
3948#else
3949static inline void intel_register_dsm_handler(void) { return; }
3950static inline void intel_unregister_dsm_handler(void) { return; }
3951#endif
3952
3953
3954static inline struct intel_device_info *
3955mkwrite_device_info(struct drm_i915_private *dev_priv)
3956{
3957 return (struct intel_device_info *)&dev_priv->info;
3958}
3959
3960const char *intel_platform_name(enum intel_platform platform);
3961void intel_device_info_runtime_init(struct drm_i915_private *dev_priv);
3962void intel_device_info_dump(struct drm_i915_private *dev_priv);
3963
3964
3965extern void intel_modeset_init_hw(struct drm_device *dev);
3966extern int intel_modeset_init(struct drm_device *dev);
3967extern void intel_modeset_gem_init(struct drm_device *dev);
3968extern void intel_modeset_cleanup(struct drm_device *dev);
3969extern int intel_connector_register(struct drm_connector *);
3970extern void intel_connector_unregister(struct drm_connector *);
3971extern int intel_modeset_vga_set_state(struct drm_i915_private *dev_priv,
3972 bool state);
3973extern void intel_display_resume(struct drm_device *dev);
3974extern void i915_redisable_vga(struct drm_i915_private *dev_priv);
3975extern void i915_redisable_vga_power_on(struct drm_i915_private *dev_priv);
3976extern bool ironlake_set_drps(struct drm_i915_private *dev_priv, u8 val);
3977extern void intel_init_pch_refclk(struct drm_i915_private *dev_priv);
3978extern int intel_set_rps(struct drm_i915_private *dev_priv, u8 val);
3979extern bool intel_set_memory_cxsr(struct drm_i915_private *dev_priv,
3980 bool enable);
3981
3982int i915_reg_read_ioctl(struct drm_device *dev, void *data,
3983 struct drm_file *file);
3984
3985
3986extern struct intel_overlay_error_state *
3987intel_overlay_capture_error_state(struct drm_i915_private *dev_priv);
3988extern void intel_overlay_print_error_state(struct drm_i915_error_state_buf *e,
3989 struct intel_overlay_error_state *error);
3990
3991extern struct intel_display_error_state *
3992intel_display_capture_error_state(struct drm_i915_private *dev_priv);
3993extern void intel_display_print_error_state(struct drm_i915_error_state_buf *e,
3994 struct intel_display_error_state *error);
3995
3996int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u32 mbox, u32 *val);
3997int sandybridge_pcode_write(struct drm_i915_private *dev_priv, u32 mbox, u32 val);
3998int skl_pcode_request(struct drm_i915_private *dev_priv, u32 mbox, u32 request,
3999 u32 reply_mask, u32 reply, int timeout_base_ms);
4000
4001
4002u32 vlv_punit_read(struct drm_i915_private *dev_priv, u32 addr);
4003int vlv_punit_write(struct drm_i915_private *dev_priv, u32 addr, u32 val);
4004u32 vlv_nc_read(struct drm_i915_private *dev_priv, u8 addr);
4005u32 vlv_iosf_sb_read(struct drm_i915_private *dev_priv, u8 port, u32 reg);
4006void vlv_iosf_sb_write(struct drm_i915_private *dev_priv, u8 port, u32 reg, u32 val);
4007u32 vlv_cck_read(struct drm_i915_private *dev_priv, u32 reg);
4008void vlv_cck_write(struct drm_i915_private *dev_priv, u32 reg, u32 val);
4009u32 vlv_ccu_read(struct drm_i915_private *dev_priv, u32 reg);
4010void vlv_ccu_write(struct drm_i915_private *dev_priv, u32 reg, u32 val);
4011u32 vlv_bunit_read(struct drm_i915_private *dev_priv, u32 reg);
4012void vlv_bunit_write(struct drm_i915_private *dev_priv, u32 reg, u32 val);
4013u32 vlv_dpio_read(struct drm_i915_private *dev_priv, enum pipe pipe, int reg);
4014void vlv_dpio_write(struct drm_i915_private *dev_priv, enum pipe pipe, int reg, u32 val);
4015u32 intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg,
4016 enum intel_sbi_destination destination);
4017void intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value,
4018 enum intel_sbi_destination destination);
4019u32 vlv_flisdsi_read(struct drm_i915_private *dev_priv, u32 reg);
4020void vlv_flisdsi_write(struct drm_i915_private *dev_priv, u32 reg, u32 val);
4021
4022
4023void bxt_port_to_phy_channel(struct drm_i915_private *dev_priv, enum port port,
4024 enum dpio_phy *phy, enum dpio_channel *ch);
4025void bxt_ddi_phy_set_signal_level(struct drm_i915_private *dev_priv,
4026 enum port port, u32 margin, u32 scale,
4027 u32 enable, u32 deemphasis);
4028void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy);
4029void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy);
4030bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
4031 enum dpio_phy phy);
4032bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
4033 enum dpio_phy phy);
4034uint8_t bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder,
4035 uint8_t lane_count);
4036void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
4037 uint8_t lane_lat_optim_mask);
4038uint8_t bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder);
4039
4040void chv_set_phy_signal_level(struct intel_encoder *encoder,
4041 u32 deemph_reg_value, u32 margin_reg_value,
4042 bool uniq_trans_scale);
4043void chv_data_lane_soft_reset(struct intel_encoder *encoder,
4044 bool reset);
4045void chv_phy_pre_pll_enable(struct intel_encoder *encoder);
4046void chv_phy_pre_encoder_enable(struct intel_encoder *encoder);
4047void chv_phy_release_cl2_override(struct intel_encoder *encoder);
4048void chv_phy_post_pll_disable(struct intel_encoder *encoder);
4049
4050void vlv_set_phy_signal_level(struct intel_encoder *encoder,
4051 u32 demph_reg_value, u32 preemph_reg_value,
4052 u32 uniqtranscale_reg_value, u32 tx3_demph);
4053void vlv_phy_pre_pll_enable(struct intel_encoder *encoder);
4054void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder);
4055void vlv_phy_reset_lanes(struct intel_encoder *encoder);
4056
4057int intel_gpu_freq(struct drm_i915_private *dev_priv, int val);
4058int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
4059u64 intel_rc6_residency_us(struct drm_i915_private *dev_priv,
4060 const i915_reg_t reg);
4061
4062#define I915_READ8(reg) dev_priv->uncore.funcs.mmio_readb(dev_priv, (reg), true)
4063#define I915_WRITE8(reg, val) dev_priv->uncore.funcs.mmio_writeb(dev_priv, (reg), (val), true)
4064
4065#define I915_READ16(reg) dev_priv->uncore.funcs.mmio_readw(dev_priv, (reg), true)
4066#define I915_WRITE16(reg, val) dev_priv->uncore.funcs.mmio_writew(dev_priv, (reg), (val), true)
4067#define I915_READ16_NOTRACE(reg) dev_priv->uncore.funcs.mmio_readw(dev_priv, (reg), false)
4068#define I915_WRITE16_NOTRACE(reg, val) dev_priv->uncore.funcs.mmio_writew(dev_priv, (reg), (val), false)
4069
4070#define I915_READ(reg) dev_priv->uncore.funcs.mmio_readl(dev_priv, (reg), true)
4071#define I915_WRITE(reg, val) dev_priv->uncore.funcs.mmio_writel(dev_priv, (reg), (val), true)
4072#define I915_READ_NOTRACE(reg) dev_priv->uncore.funcs.mmio_readl(dev_priv, (reg), false)
4073#define I915_WRITE_NOTRACE(reg, val) dev_priv->uncore.funcs.mmio_writel(dev_priv, (reg), (val), false)
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089#define I915_READ64(reg) dev_priv->uncore.funcs.mmio_readq(dev_priv, (reg), true)
4090
4091#define I915_READ64_2x32(lower_reg, upper_reg) ({ \
4092 u32 upper, lower, old_upper, loop = 0; \
4093 upper = I915_READ(upper_reg); \
4094 do { \
4095 old_upper = upper; \
4096 lower = I915_READ(lower_reg); \
4097 upper = I915_READ(upper_reg); \
4098 } while (upper != old_upper && loop++ < 2); \
4099 (u64)upper << 32 | lower; })
4100
4101#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
4102#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
4103
4104#define __raw_read(x, s) \
4105static inline uint##x##_t __raw_i915_read##x(const struct drm_i915_private *dev_priv, \
4106 i915_reg_t reg) \
4107{ \
4108 return read##s(dev_priv->regs + i915_mmio_reg_offset(reg)); \
4109}
4110
4111#define __raw_write(x, s) \
4112static inline void __raw_i915_write##x(const struct drm_i915_private *dev_priv, \
4113 i915_reg_t reg, uint##x##_t val) \
4114{ \
4115 write##s(val, dev_priv->regs + i915_mmio_reg_offset(reg)); \
4116}
4117__raw_read(8, b)
4118__raw_read(16, w)
4119__raw_read(32, l)
4120__raw_read(64, q)
4121
4122__raw_write(8, b)
4123__raw_write(16, w)
4124__raw_write(32, l)
4125__raw_write(64, q)
4126
4127#undef __raw_read
4128#undef __raw_write
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156#define I915_READ_FW(reg__) __raw_i915_read32(dev_priv, (reg__))
4157#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(dev_priv, (reg__), (val__))
4158#define I915_WRITE64_FW(reg__, val__) __raw_i915_write64(dev_priv, (reg__), (val__))
4159#define POSTING_READ_FW(reg__) (void)I915_READ_FW(reg__)
4160
4161
4162#define INTEL_BROADCAST_RGB_AUTO 0
4163#define INTEL_BROADCAST_RGB_FULL 1
4164#define INTEL_BROADCAST_RGB_LIMITED 2
4165
4166static inline i915_reg_t i915_vgacntrl_reg(struct drm_i915_private *dev_priv)
4167{
4168 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
4169 return VLV_VGACNTRL;
4170 else if (INTEL_GEN(dev_priv) >= 5)
4171 return CPU_VGACNTRL;
4172 else
4173 return VGACNTRL;
4174}
4175
4176static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
4177{
4178 unsigned long j = msecs_to_jiffies(m);
4179
4180 return min_t(unsigned long, MAX_JIFFY_OFFSET, j + 1);
4181}
4182
4183static inline unsigned long nsecs_to_jiffies_timeout(const u64 n)
4184{
4185
4186 if (NSEC_PER_SEC % HZ &&
4187 div_u64(n, NSEC_PER_SEC) >= MAX_JIFFY_OFFSET / HZ)
4188 return MAX_JIFFY_OFFSET;
4189
4190 return min_t(u64, MAX_JIFFY_OFFSET, nsecs_to_jiffies64(n) + 1);
4191}
4192
4193static inline unsigned long
4194timespec_to_jiffies_timeout(const struct timespec *value)
4195{
4196 unsigned long j = timespec_to_jiffies(value);
4197
4198 return min_t(unsigned long, MAX_JIFFY_OFFSET, j + 1);
4199}
4200
4201
4202
4203
4204
4205
4206
4207static inline void
4208wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms)
4209{
4210 unsigned long target_jiffies, tmp_jiffies, remaining_jiffies;
4211
4212
4213
4214
4215
4216 tmp_jiffies = jiffies;
4217 target_jiffies = timestamp_jiffies +
4218 msecs_to_jiffies_timeout(to_wait_ms);
4219
4220 if (time_after(target_jiffies, tmp_jiffies)) {
4221 remaining_jiffies = target_jiffies - tmp_jiffies;
4222 while (remaining_jiffies)
4223 remaining_jiffies =
4224 schedule_timeout_uninterruptible(remaining_jiffies);
4225 }
4226}
4227
4228static inline bool
4229__i915_request_irq_complete(const struct drm_i915_gem_request *req)
4230{
4231 struct intel_engine_cs *engine = req->engine;
4232 u32 seqno;
4233
4234
4235
4236
4237
4238
4239
4240 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &req->fence.flags))
4241 return true;
4242
4243
4244
4245
4246
4247
4248
4249 seqno = i915_gem_request_global_seqno(req);
4250 if (!seqno)
4251 return false;
4252
4253
4254
4255
4256 if (__i915_gem_request_completed(req, seqno))
4257 return true;
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270 if (engine->irq_seqno_barrier &&
4271 test_and_clear_bit(ENGINE_IRQ_BREADCRUMB, &engine->irq_posted)) {
4272 struct intel_breadcrumbs *b = &engine->breadcrumbs;
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286 engine->irq_seqno_barrier(engine);
4287
4288
4289
4290
4291
4292
4293
4294 spin_lock_irq(&b->irq_lock);
4295 if (b->irq_wait && b->irq_wait->tsk != current)
4296
4297
4298
4299
4300
4301
4302 wake_up_process(b->irq_wait->tsk);
4303 spin_unlock_irq(&b->irq_lock);
4304
4305 if (__i915_gem_request_completed(req, seqno))
4306 return true;
4307 }
4308
4309 return false;
4310}
4311
4312void i915_memcpy_init_early(struct drm_i915_private *dev_priv);
4313bool i915_memcpy_from_wc(void *dst, const void *src, unsigned long len);
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325#define i915_can_memcpy_from_wc(dst, src, len) \
4326 i915_memcpy_from_wc((void *)((unsigned long)(dst) | (unsigned long)(src) | (len)), NULL, 0)
4327
4328#define i915_has_memcpy_from_wc() \
4329 i915_memcpy_from_wc(NULL, NULL, 0)
4330
4331
4332int remap_io_mapping(struct vm_area_struct *vma,
4333 unsigned long addr, unsigned long pfn, unsigned long size,
4334 struct io_mapping *iomap);
4335
4336static inline bool
4337intel_engine_can_store_dword(struct intel_engine_cs *engine)
4338{
4339 return __intel_engine_can_store_dword(INTEL_GEN(engine->i915),
4340 engine->class);
4341}
4342
4343#endif
4344