Merge drm/drm-next into drm-intel-next
[platform/kernel/linux-starfive.git] / drivers / gpu / drm / i915 / i915_drv.h
1 /* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-
2  */
3 /*
4  *
5  * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
6  * All Rights Reserved.
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sub license, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice (including the
17  * next paragraph) shall be included in all copies or substantial portions
18  * of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
23  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
24  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 <asm/hypervisor.h>
37
38 #include <linux/io-mapping.h>
39 #include <linux/i2c.h>
40 #include <linux/i2c-algo-bit.h>
41 #include <linux/backlight.h>
42 #include <linux/hash.h>
43 #include <linux/intel-iommu.h>
44 #include <linux/kref.h>
45 #include <linux/mm_types.h>
46 #include <linux/perf_event.h>
47 #include <linux/pm_qos.h>
48 #include <linux/dma-resv.h>
49 #include <linux/shmem_fs.h>
50 #include <linux/stackdepot.h>
51 #include <linux/xarray.h>
52
53 #include <drm/drm_gem.h>
54 #include <drm/drm_auth.h>
55 #include <drm/drm_cache.h>
56 #include <drm/drm_util.h>
57 #include <drm/drm_dsc.h>
58 #include <drm/drm_atomic.h>
59 #include <drm/drm_connector.h>
60 #include <drm/i915_mei_hdcp_interface.h>
61 #include <drm/ttm/ttm_device.h>
62
63 #include "i915_params.h"
64 #include "i915_reg.h"
65 #include "i915_utils.h"
66
67 #include "display/intel_bios.h"
68 #include "display/intel_cdclk.h"
69 #include "display/intel_display.h"
70 #include "display/intel_display_power.h"
71 #include "display/intel_dmc.h"
72 #include "display/intel_dpll_mgr.h"
73 #include "display/intel_dsb.h"
74 #include "display/intel_fbc.h"
75 #include "display/intel_frontbuffer.h"
76 #include "display/intel_global_state.h"
77 #include "display/intel_gmbus.h"
78 #include "display/intel_opregion.h"
79
80 #include "gem/i915_gem_context_types.h"
81 #include "gem/i915_gem_shrinker.h"
82 #include "gem/i915_gem_stolen.h"
83 #include "gem/i915_gem_lmem.h"
84
85 #include "gt/intel_engine.h"
86 #include "gt/intel_gt_types.h"
87 #include "gt/intel_region_lmem.h"
88 #include "gt/intel_workarounds.h"
89 #include "gt/uc/intel_uc.h"
90
91 #include "intel_device_info.h"
92 #include "intel_memory_region.h"
93 #include "intel_pch.h"
94 #include "intel_pm_types.h"
95 #include "intel_runtime_pm.h"
96 #include "intel_step.h"
97 #include "intel_uncore.h"
98 #include "intel_wakeref.h"
99 #include "intel_wopcm.h"
100
101 #include "i915_gem.h"
102 #include "i915_gem_gtt.h"
103 #include "i915_gpu_error.h"
104 #include "i915_perf_types.h"
105 #include "i915_request.h"
106 #include "i915_scheduler.h"
107 #include "gt/intel_timeline.h"
108 #include "i915_vma.h"
109
110
111 /* General customization:
112  */
113
114 #define DRIVER_NAME             "i915"
115 #define DRIVER_DESC             "Intel Graphics"
116 #define DRIVER_DATE             "20201103"
117 #define DRIVER_TIMESTAMP        1604406085
118
119 struct drm_i915_gem_object;
120
121 /* Threshold == 5 for long IRQs, 50 for short */
122 #define HPD_STORM_DEFAULT_THRESHOLD 50
123
124 struct i915_hotplug {
125         struct delayed_work hotplug_work;
126
127         const u32 *hpd, *pch_hpd;
128
129         struct {
130                 unsigned long last_jiffies;
131                 int count;
132                 enum {
133                         HPD_ENABLED = 0,
134                         HPD_DISABLED = 1,
135                         HPD_MARK_DISABLED = 2
136                 } state;
137         } stats[HPD_NUM_PINS];
138         u32 event_bits;
139         u32 retry_bits;
140         struct delayed_work reenable_work;
141
142         u32 long_port_mask;
143         u32 short_port_mask;
144         struct work_struct dig_port_work;
145
146         struct work_struct poll_init_work;
147         bool poll_enabled;
148
149         unsigned int hpd_storm_threshold;
150         /* Whether or not to count short HPD IRQs in HPD storms */
151         u8 hpd_short_storm_enabled;
152
153         /*
154          * if we get a HPD irq from DP and a HPD irq from non-DP
155          * the non-DP HPD could block the workqueue on a mode config
156          * mutex getting, that userspace may have taken. However
157          * userspace is waiting on the DP workqueue to run which is
158          * blocked behind the non-DP one.
159          */
160         struct workqueue_struct *dp_wq;
161 };
162
163 #define I915_GEM_GPU_DOMAINS \
164         (I915_GEM_DOMAIN_RENDER | \
165          I915_GEM_DOMAIN_SAMPLER | \
166          I915_GEM_DOMAIN_COMMAND | \
167          I915_GEM_DOMAIN_INSTRUCTION | \
168          I915_GEM_DOMAIN_VERTEX)
169
170 struct drm_i915_private;
171
172 struct drm_i915_file_private {
173         struct drm_i915_private *dev_priv;
174
175         union {
176                 struct drm_file *file;
177                 struct rcu_head rcu;
178         };
179
180         /** @proto_context_lock: Guards all struct i915_gem_proto_context
181          * operations
182          *
183          * This not only guards @proto_context_xa, but is always held
184          * whenever we manipulate any struct i915_gem_proto_context,
185          * including finalizing it on first actual use of the GEM context.
186          *
187          * See i915_gem_proto_context.
188          */
189         struct mutex proto_context_lock;
190
191         /** @proto_context_xa: xarray of struct i915_gem_proto_context
192          *
193          * Historically, the context uAPI allowed for two methods of
194          * setting context parameters: SET_CONTEXT_PARAM and
195          * CONTEXT_CREATE_EXT_SETPARAM.  The former is allowed to be called
196          * at any time while the later happens as part of
197          * GEM_CONTEXT_CREATE.  Everything settable via one was settable
198          * via the other.  While some params are fairly simple and setting
199          * them on a live context is harmless such as the context priority,
200          * others are far trickier such as the VM or the set of engines.
201          * In order to swap out the VM, for instance, we have to delay
202          * until all current in-flight work is complete, swap in the new
203          * VM, and then continue.  This leads to a plethora of potential
204          * race conditions we'd really rather avoid.
205          *
206          * We have since disallowed setting these more complex parameters
207          * on active contexts.  This works by delaying the creation of the
208          * actual context until after the client is done configuring it
209          * with SET_CONTEXT_PARAM.  From the perspective of the client, it
210          * has the same u32 context ID the whole time.  From the
211          * perspective of i915, however, it's a struct i915_gem_proto_context
212          * right up until the point where we attempt to do something which
213          * the proto-context can't handle.  Then the struct i915_gem_context
214          * gets created.
215          *
216          * This is accomplished via a little xarray dance.  When
217          * GEM_CONTEXT_CREATE is called, we create a struct
218          * i915_gem_proto_context, reserve a slot in @context_xa but leave
219          * it NULL, and place the proto-context in the corresponding slot
220          * in @proto_context_xa.  Then, in i915_gem_context_lookup(), we
221          * first check @context_xa.  If it's there, we return the struct
222          * i915_gem_context and we're done.  If it's not, we look in
223          * @proto_context_xa and, if we find it there, we create the actual
224          * context and kill the proto-context.
225          *
226          * In order for this dance to work properly, everything which ever
227          * touches a struct i915_gem_proto_context is guarded by
228          * @proto_context_lock, including context creation.  Yes, this
229          * means context creation now takes a giant global lock but it
230          * can't really be helped and that should never be on any driver's
231          * fast-path anyway.
232          */
233         struct xarray proto_context_xa;
234
235         /** @context_xa: xarray of fully created i915_gem_context
236          *
237          * Write access to this xarray is guarded by @proto_context_lock.
238          * Otherwise, writers may race with finalize_create_context_locked().
239          *
240          * See @proto_context_xa.
241          */
242         struct xarray context_xa;
243         struct xarray vm_xa;
244
245         unsigned int bsd_engine;
246
247 /*
248  * Every context ban increments per client ban score. Also
249  * hangs in short succession increments ban score. If ban threshold
250  * is reached, client is considered banned and submitting more work
251  * will fail. This is a stop gap measure to limit the badly behaving
252  * clients access to gpu. Note that unbannable contexts never increment
253  * the client ban score.
254  */
255 #define I915_CLIENT_SCORE_HANG_FAST     1
256 #define   I915_CLIENT_FAST_HANG_JIFFIES (60 * HZ)
257 #define I915_CLIENT_SCORE_CONTEXT_BAN   3
258 #define I915_CLIENT_SCORE_BANNED        9
259         /** ban_score: Accumulated score of all ctx bans and fast hangs. */
260         atomic_t ban_score;
261         unsigned long hang_timestamp;
262 };
263
264 /* Interface history:
265  *
266  * 1.1: Original.
267  * 1.2: Add Power Management
268  * 1.3: Add vblank support
269  * 1.4: Fix cmdbuffer path, add heap destroy
270  * 1.5: Add vblank pipe configuration
271  * 1.6: - New ioctl for scheduling buffer swaps on vertical blank
272  *      - Support vertical blank on secondary display pipe
273  */
274 #define DRIVER_MAJOR            1
275 #define DRIVER_MINOR            6
276 #define DRIVER_PATCHLEVEL       0
277
278 struct intel_overlay;
279 struct intel_overlay_error_state;
280
281 struct sdvo_device_mapping {
282         u8 initialized;
283         u8 dvo_port;
284         u8 slave_addr;
285         u8 dvo_wiring;
286         u8 i2c_pin;
287         u8 ddc_pin;
288 };
289
290 struct intel_connector;
291 struct intel_encoder;
292 struct intel_atomic_state;
293 struct intel_cdclk_config;
294 struct intel_cdclk_funcs;
295 struct intel_cdclk_state;
296 struct intel_cdclk_vals;
297 struct intel_initial_plane_config;
298 struct intel_crtc;
299 struct intel_limit;
300 struct dpll;
301
302 /* functions used internal in intel_pm.c */
303 struct drm_i915_clock_gating_funcs {
304         void (*init_clock_gating)(struct drm_i915_private *dev_priv);
305 };
306
307 /* functions used for watermark calcs for display. */
308 struct drm_i915_wm_disp_funcs {
309         /* update_wm is for legacy wm management */
310         void (*update_wm)(struct drm_i915_private *dev_priv);
311         int (*compute_pipe_wm)(struct intel_atomic_state *state,
312                                struct intel_crtc *crtc);
313         int (*compute_intermediate_wm)(struct intel_atomic_state *state,
314                                        struct intel_crtc *crtc);
315         void (*initial_watermarks)(struct intel_atomic_state *state,
316                                    struct intel_crtc *crtc);
317         void (*atomic_update_watermarks)(struct intel_atomic_state *state,
318                                          struct intel_crtc *crtc);
319         void (*optimize_watermarks)(struct intel_atomic_state *state,
320                                     struct intel_crtc *crtc);
321         int (*compute_global_watermarks)(struct intel_atomic_state *state);
322 };
323
324 struct intel_color_funcs {
325         int (*color_check)(struct intel_crtc_state *crtc_state);
326         /*
327          * Program double buffered color management registers during
328          * vblank evasion. The registers should then latch during the
329          * next vblank start, alongside any other double buffered registers
330          * involved with the same commit.
331          */
332         void (*color_commit)(const struct intel_crtc_state *crtc_state);
333         /*
334          * Load LUTs (and other single buffered color management
335          * registers). Will (hopefully) be called during the vblank
336          * following the latching of any double buffered registers
337          * involved with the same commit.
338          */
339         void (*load_luts)(const struct intel_crtc_state *crtc_state);
340         void (*read_luts)(struct intel_crtc_state *crtc_state);
341 };
342
343 struct intel_hotplug_funcs {
344         void (*hpd_irq_setup)(struct drm_i915_private *dev_priv);
345 };
346
347 struct intel_fdi_funcs {
348         void (*fdi_link_train)(struct intel_crtc *crtc,
349                                const struct intel_crtc_state *crtc_state);
350 };
351
352 struct intel_dpll_funcs {
353         int (*crtc_compute_clock)(struct intel_crtc_state *crtc_state);
354 };
355
356 struct drm_i915_display_funcs {
357         /* Returns the active state of the crtc, and if the crtc is active,
358          * fills out the pipe-config with the hw state. */
359         bool (*get_pipe_config)(struct intel_crtc *,
360                                 struct intel_crtc_state *);
361         void (*get_initial_plane_config)(struct intel_crtc *,
362                                          struct intel_initial_plane_config *);
363         void (*crtc_enable)(struct intel_atomic_state *state,
364                             struct intel_crtc *crtc);
365         void (*crtc_disable)(struct intel_atomic_state *state,
366                              struct intel_crtc *crtc);
367         void (*commit_modeset_enables)(struct intel_atomic_state *state);
368 };
369
370 #define I915_COLOR_UNEVICTABLE (-1) /* a non-vma sharing the address space */
371
372 /*
373  * HIGH_RR is the highest eDP panel refresh rate read from EDID
374  * LOW_RR is the lowest eDP panel refresh rate found from EDID
375  * parsing for same resolution.
376  */
377 enum drrs_refresh_rate_type {
378         DRRS_HIGH_RR,
379         DRRS_LOW_RR,
380         DRRS_MAX_RR, /* RR count */
381 };
382
383 enum drrs_support_type {
384         DRRS_NOT_SUPPORTED = 0,
385         STATIC_DRRS_SUPPORT = 1,
386         SEAMLESS_DRRS_SUPPORT = 2
387 };
388
389 struct intel_dp;
390 struct i915_drrs {
391         struct mutex mutex;
392         struct delayed_work work;
393         struct intel_dp *dp;
394         unsigned busy_frontbuffer_bits;
395         enum drrs_refresh_rate_type refresh_rate_type;
396         enum drrs_support_type type;
397 };
398
399 #define QUIRK_LVDS_SSC_DISABLE (1<<1)
400 #define QUIRK_INVERT_BRIGHTNESS (1<<2)
401 #define QUIRK_BACKLIGHT_PRESENT (1<<3)
402 #define QUIRK_PIN_SWIZZLED_PAGES (1<<5)
403 #define QUIRK_INCREASE_T12_DELAY (1<<6)
404 #define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7)
405 #define QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK (1<<8)
406
407 struct intel_fbdev;
408
409 struct intel_gmbus {
410         struct i2c_adapter adapter;
411 #define GMBUS_FORCE_BIT_RETRY (1U << 31)
412         u32 force_bit;
413         u32 reg0;
414         i915_reg_t gpio_reg;
415         struct i2c_algo_bit_data bit_algo;
416         struct drm_i915_private *dev_priv;
417 };
418
419 struct i915_suspend_saved_registers {
420         u32 saveDSPARB;
421         u32 saveSWF0[16];
422         u32 saveSWF1[16];
423         u32 saveSWF3[3];
424         u16 saveGCDGMBUS;
425 };
426
427 struct vlv_s0ix_state;
428
429 #define MAX_L3_SLICES 2
430 struct intel_l3_parity {
431         u32 *remap_info[MAX_L3_SLICES];
432         struct work_struct error_work;
433         int which_slice;
434 };
435
436 struct i915_gem_mm {
437         /*
438          * Shortcut for the stolen region. This points to either
439          * INTEL_REGION_STOLEN_SMEM for integrated platforms, or
440          * INTEL_REGION_STOLEN_LMEM for discrete, or NULL if the device doesn't
441          * support stolen.
442          */
443         struct intel_memory_region *stolen_region;
444         /** Memory allocator for GTT stolen memory */
445         struct drm_mm stolen;
446         /** Protects the usage of the GTT stolen memory allocator. This is
447          * always the inner lock when overlapping with struct_mutex. */
448         struct mutex stolen_lock;
449
450         /* Protects bound_list/unbound_list and #drm_i915_gem_object.mm.link */
451         spinlock_t obj_lock;
452
453         /**
454          * List of objects which are purgeable.
455          */
456         struct list_head purge_list;
457
458         /**
459          * List of objects which have allocated pages and are shrinkable.
460          */
461         struct list_head shrink_list;
462
463         /**
464          * List of objects which are pending destruction.
465          */
466         struct llist_head free_list;
467         struct delayed_work free_work;
468         /**
469          * Count of objects pending destructions. Used to skip needlessly
470          * waiting on an RCU barrier if no objects are waiting to be freed.
471          */
472         atomic_t free_count;
473
474         /**
475          * tmpfs instance used for shmem backed objects
476          */
477         struct vfsmount *gemfs;
478
479         struct intel_memory_region *regions[INTEL_REGION_UNKNOWN];
480
481         struct notifier_block oom_notifier;
482         struct notifier_block vmap_notifier;
483         struct shrinker shrinker;
484
485 #ifdef CONFIG_MMU_NOTIFIER
486         /**
487          * notifier_lock for mmu notifiers, memory may not be allocated
488          * while holding this lock.
489          */
490         rwlock_t notifier_lock;
491 #endif
492
493         /* shrinker accounting, also useful for userland debugging */
494         u64 shrink_memory;
495         u32 shrink_count;
496 };
497
498 #define I915_IDLE_ENGINES_TIMEOUT (200) /* in ms */
499
500 unsigned long i915_fence_context_timeout(const struct drm_i915_private *i915,
501                                          u64 context);
502
503 static inline unsigned long
504 i915_fence_timeout(const struct drm_i915_private *i915)
505 {
506         return i915_fence_context_timeout(i915, U64_MAX);
507 }
508
509 /* Amount of SAGV/QGV points, BSpec precisely defines this */
510 #define I915_NUM_QGV_POINTS 8
511
512 #define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915))
513
514 /* Amount of PSF GV points, BSpec precisely defines this */
515 #define I915_NUM_PSF_GV_POINTS 3
516
517 struct intel_vbt_data {
518         /* bdb version */
519         u16 version;
520
521         struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
522         struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
523
524         /* Feature bits */
525         unsigned int int_tv_support:1;
526         unsigned int lvds_dither:1;
527         unsigned int int_crt_support:1;
528         unsigned int lvds_use_ssc:1;
529         unsigned int int_lvds_support:1;
530         unsigned int display_clock_mode:1;
531         unsigned int fdi_rx_polarity_inverted:1;
532         unsigned int panel_type:4;
533         int lvds_ssc_freq;
534         unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
535         enum drm_panel_orientation orientation;
536
537         enum drrs_support_type drrs_type;
538
539         struct {
540                 int rate;
541                 int lanes;
542                 int preemphasis;
543                 int vswing;
544                 bool low_vswing;
545                 bool initialized;
546                 int bpp;
547                 struct edp_power_seq pps;
548                 bool hobl;
549         } edp;
550
551         struct {
552                 bool enable;
553                 bool full_link;
554                 bool require_aux_wakeup;
555                 int idle_frames;
556                 int tp1_wakeup_time_us;
557                 int tp2_tp3_wakeup_time_us;
558                 int psr2_tp2_tp3_wakeup_time_us;
559         } psr;
560
561         struct {
562                 u16 pwm_freq_hz;
563                 u16 brightness_precision_bits;
564                 bool present;
565                 bool active_low_pwm;
566                 u8 min_brightness;      /* min_brightness/255 of max */
567                 u8 controller;          /* brightness controller number */
568                 enum intel_backlight_type type;
569         } backlight;
570
571         /* MIPI DSI */
572         struct {
573                 u16 panel_id;
574                 struct mipi_config *config;
575                 struct mipi_pps_data *pps;
576                 u16 bl_ports;
577                 u16 cabc_ports;
578                 u8 seq_version;
579                 u32 size;
580                 u8 *data;
581                 const u8 *sequence[MIPI_SEQ_MAX];
582                 u8 *deassert_seq; /* Used by fixup_mipi_sequences() */
583                 enum drm_panel_orientation orientation;
584         } dsi;
585
586         int crt_ddc_pin;
587
588         struct list_head display_devices;
589
590         struct intel_bios_encoder_data *ports[I915_MAX_PORTS]; /* Non-NULL if port present. */
591         struct sdvo_device_mapping sdvo_mappings[2];
592 };
593
594 struct i915_frontbuffer_tracking {
595         spinlock_t lock;
596
597         /*
598          * Tracking bits for delayed frontbuffer flushing du to gpu activity or
599          * scheduled flips.
600          */
601         unsigned busy_bits;
602         unsigned flip_bits;
603 };
604
605 struct i915_virtual_gpu {
606         struct mutex lock; /* serialises sending of g2v_notify command pkts */
607         bool active;
608         u32 caps;
609 };
610
611 struct i915_selftest_stash {
612         atomic_t counter;
613         struct ida mock_region_instances;
614 };
615
616 /* intel_audio.c private */
617 struct intel_audio_funcs;
618 struct intel_audio_private {
619         /* Display internal audio functions */
620         const struct intel_audio_funcs *funcs;
621
622         /* hda/i915 audio component */
623         struct i915_audio_component *component;
624         bool component_registered;
625         /* mutex for audio/video sync */
626         struct mutex mutex;
627         int power_refcount;
628         u32 freq_cntrl;
629
630         /* Used to save the pipe-to-encoder mapping for audio */
631         struct intel_encoder *encoder_map[I915_MAX_PIPES];
632
633         /* necessary resource sharing with HDMI LPE audio driver. */
634         struct {
635                 struct platform_device *platdev;
636                 int irq;
637         } lpe;
638 };
639
640 struct drm_i915_private {
641         struct drm_device drm;
642
643         /* FIXME: Device release actions should all be moved to drmm_ */
644         bool do_release;
645
646         /* i915 device parameters */
647         struct i915_params params;
648
649         const struct intel_device_info __info; /* Use INTEL_INFO() to access. */
650         struct intel_runtime_info __runtime; /* Use RUNTIME_INFO() to access. */
651         struct intel_driver_caps caps;
652
653         /**
654          * Data Stolen Memory - aka "i915 stolen memory" gives us the start and
655          * end of stolen which we can optionally use to create GEM objects
656          * backed by stolen memory. Note that stolen_usable_size tells us
657          * exactly how much of this we are actually allowed to use, given that
658          * some portion of it is in fact reserved for use by hardware functions.
659          */
660         struct resource dsm;
661         /**
662          * Reseved portion of Data Stolen Memory
663          */
664         struct resource dsm_reserved;
665
666         /*
667          * Stolen memory is segmented in hardware with different portions
668          * offlimits to certain functions.
669          *
670          * The drm_mm is initialised to the total accessible range, as found
671          * from the PCI config. On Broadwell+, this is further restricted to
672          * avoid the first page! The upper end of stolen memory is reserved for
673          * hardware functions and similarly removed from the accessible range.
674          */
675         resource_size_t stolen_usable_size;     /* Total size minus reserved ranges */
676
677         struct intel_uncore uncore;
678         struct intel_uncore_mmio_debug mmio_debug;
679
680         struct i915_virtual_gpu vgpu;
681
682         struct intel_gvt *gvt;
683
684         struct intel_wopcm wopcm;
685
686         struct intel_dmc dmc;
687
688         struct intel_gmbus gmbus[GMBUS_NUM_PINS];
689
690         /** gmbus_mutex protects against concurrent usage of the single hw gmbus
691          * controller on different i2c buses. */
692         struct mutex gmbus_mutex;
693
694         /**
695          * Base address of where the gmbus and gpio blocks are located (either
696          * on PCH or on SoC for platforms without PCH).
697          */
698         u32 gpio_mmio_base;
699
700         /* MMIO base address for MIPI regs */
701         u32 mipi_mmio_base;
702
703         u32 pps_mmio_base;
704
705         wait_queue_head_t gmbus_wait_queue;
706
707         struct pci_dev *bridge_dev;
708
709         struct rb_root uabi_engines;
710
711         struct resource mch_res;
712
713         /* protects the irq masks */
714         spinlock_t irq_lock;
715
716         bool display_irqs_enabled;
717
718         /* Sideband mailbox protection */
719         struct mutex sb_lock;
720         struct pm_qos_request sb_qos;
721
722         /** Cached value of IMR to avoid reads in updating the bitfield */
723         union {
724                 u32 irq_mask;
725                 u32 de_irq_mask[I915_MAX_PIPES];
726         };
727         u32 pipestat_irq_mask[I915_MAX_PIPES];
728
729         struct i915_hotplug hotplug;
730         struct intel_fbc *fbc[I915_MAX_FBCS];
731         struct i915_drrs drrs;
732         struct intel_opregion opregion;
733         struct intel_vbt_data vbt;
734
735         bool preserve_bios_swizzle;
736
737         /* overlay */
738         struct intel_overlay *overlay;
739
740         /* backlight registers and fields in struct intel_panel */
741         struct mutex backlight_lock;
742
743         /* protects panel power sequencer state */
744         struct mutex pps_mutex;
745
746         unsigned int fsb_freq, mem_freq, is_ddr3;
747         unsigned int skl_preferred_vco_freq;
748         unsigned int max_cdclk_freq;
749
750         unsigned int max_dotclk_freq;
751         unsigned int hpll_freq;
752         unsigned int fdi_pll_freq;
753         unsigned int czclk_freq;
754
755         struct {
756                 /* The current hardware cdclk configuration */
757                 struct intel_cdclk_config hw;
758
759                 /* cdclk, divider, and ratio table from bspec */
760                 const struct intel_cdclk_vals *table;
761
762                 struct intel_global_obj obj;
763         } cdclk;
764
765         struct {
766                 /* The current hardware dbuf configuration */
767                 u8 enabled_slices;
768
769                 struct intel_global_obj obj;
770         } dbuf;
771
772         /**
773          * wq - Driver workqueue for GEM.
774          *
775          * NOTE: Work items scheduled here are not allowed to grab any modeset
776          * locks, for otherwise the flushing done in the pageflip code will
777          * result in deadlocks.
778          */
779         struct workqueue_struct *wq;
780
781         /* ordered wq for modesets */
782         struct workqueue_struct *modeset_wq;
783         /* unbound hipri wq for page flips/plane updates */
784         struct workqueue_struct *flip_wq;
785
786         /* pm private clock gating functions */
787         const struct drm_i915_clock_gating_funcs *clock_gating_funcs;
788
789         /* pm display functions */
790         const struct drm_i915_wm_disp_funcs *wm_disp;
791
792         /* irq display functions */
793         const struct intel_hotplug_funcs *hotplug_funcs;
794
795         /* fdi display functions */
796         const struct intel_fdi_funcs *fdi_funcs;
797
798         /* display pll funcs */
799         const struct intel_dpll_funcs *dpll_funcs;
800
801         /* Display functions */
802         const struct drm_i915_display_funcs *display;
803
804         /* Display internal color functions */
805         const struct intel_color_funcs *color_funcs;
806
807         /* Display CDCLK functions */
808         const struct intel_cdclk_funcs *cdclk_funcs;
809
810         /* PCH chipset type */
811         enum intel_pch pch_type;
812         unsigned short pch_id;
813
814         unsigned long quirks;
815
816         struct drm_atomic_state *modeset_restore_state;
817         struct drm_modeset_acquire_ctx reset_ctx;
818
819         struct i915_ggtt ggtt; /* VM representing the global address space */
820
821         struct i915_gem_mm mm;
822
823         /* Kernel Modesetting */
824
825         /**
826          * dpll and cdclk state is protected by connection_mutex
827          * dpll.lock serializes intel_{prepare,enable,disable}_shared_dpll.
828          * Must be global rather than per dpll, because on some platforms plls
829          * share registers.
830          */
831         struct {
832                 struct mutex lock;
833
834                 int num_shared_dpll;
835                 struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
836                 const struct intel_dpll_mgr *mgr;
837
838                 struct {
839                         int nssc;
840                         int ssc;
841                 } ref_clks;
842         } dpll;
843
844         struct list_head global_obj_list;
845
846         /*
847          * For reading active_pipes holding any crtc lock is
848          * sufficient, for writing must hold all of them.
849          */
850         u8 active_pipes;
851
852         struct i915_frontbuffer_tracking fb_tracking;
853
854         struct intel_atomic_helper {
855                 struct llist_head free_list;
856                 struct work_struct free_work;
857         } atomic_helper;
858
859         bool mchbar_need_disable;
860
861         struct intel_l3_parity l3_parity;
862
863         /*
864          * HTI (aka HDPORT) state read during initial hw readout.  Most
865          * platforms don't have HTI, so this will just stay 0.  Those that do
866          * will use this later to figure out which PLLs and PHYs are unavailable
867          * for driver usage.
868          */
869         u32 hti_state;
870
871         /*
872          * edram size in MB.
873          * Cannot be determined by PCIID. You must always read a register.
874          */
875         u32 edram_size_mb;
876
877         struct i915_power_domains power_domains;
878
879         struct i915_gpu_error gpu_error;
880
881         struct drm_i915_gem_object *vlv_pctx;
882
883         /* list of fbdev register on this device */
884         struct intel_fbdev *fbdev;
885         struct work_struct fbdev_suspend_work;
886
887         struct drm_property *broadcast_rgb_property;
888         struct drm_property *force_audio_property;
889
890         u32 fdi_rx_config;
891
892         /* Shadow for DISPLAY_PHY_CONTROL which can't be safely read */
893         u32 chv_phy_control;
894         /*
895          * Shadows for CHV DPLL_MD regs to keep the state
896          * checker somewhat working in the presence hardware
897          * crappiness (can't read out DPLL_MD for pipes B & C).
898          */
899         u32 chv_dpll_md[I915_MAX_PIPES];
900         u32 bxt_phy_grc;
901
902         u32 suspend_count;
903         bool power_domains_suspended;
904         struct i915_suspend_saved_registers regfile;
905         struct vlv_s0ix_state *vlv_s0ix_state;
906
907         enum {
908                 I915_SAGV_UNKNOWN = 0,
909                 I915_SAGV_DISABLED,
910                 I915_SAGV_ENABLED,
911                 I915_SAGV_NOT_CONTROLLED
912         } sagv_status;
913
914         u32 sagv_block_time_us;
915
916         struct {
917                 /*
918                  * Raw watermark latency values:
919                  * in 0.1us units for WM0,
920                  * in 0.5us units for WM1+.
921                  */
922                 /* primary */
923                 u16 pri_latency[5];
924                 /* sprite */
925                 u16 spr_latency[5];
926                 /* cursor */
927                 u16 cur_latency[5];
928                 /*
929                  * Raw watermark memory latency values
930                  * for SKL for all 8 levels
931                  * in 1us units.
932                  */
933                 u16 skl_latency[8];
934
935                 /* current hardware state */
936                 union {
937                         struct ilk_wm_values hw;
938                         struct vlv_wm_values vlv;
939                         struct g4x_wm_values g4x;
940                 };
941
942                 u8 max_level;
943
944                 /*
945                  * Should be held around atomic WM register writing; also
946                  * protects * intel_crtc->wm.active and
947                  * crtc_state->wm.need_postvbl_update.
948                  */
949                 struct mutex wm_mutex;
950         } wm;
951
952         struct dram_info {
953                 bool wm_lv_0_adjust_needed;
954                 u8 num_channels;
955                 bool symmetric_memory;
956                 enum intel_dram_type {
957                         INTEL_DRAM_UNKNOWN,
958                         INTEL_DRAM_DDR3,
959                         INTEL_DRAM_DDR4,
960                         INTEL_DRAM_LPDDR3,
961                         INTEL_DRAM_LPDDR4,
962                         INTEL_DRAM_DDR5,
963                         INTEL_DRAM_LPDDR5,
964                 } type;
965                 u8 num_qgv_points;
966                 u8 num_psf_gv_points;
967         } dram_info;
968
969         struct intel_bw_info {
970                 /* for each QGV point */
971                 unsigned int deratedbw[I915_NUM_QGV_POINTS];
972                 /* for each PSF GV point */
973                 unsigned int psf_bw[I915_NUM_PSF_GV_POINTS];
974                 u8 num_qgv_points;
975                 u8 num_psf_gv_points;
976                 u8 num_planes;
977         } max_bw[6];
978
979         struct intel_global_obj bw_obj;
980
981         struct intel_runtime_pm runtime_pm;
982
983         struct i915_perf perf;
984
985         /* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
986         struct intel_gt gt0;
987
988         struct {
989                 struct i915_gem_contexts {
990                         spinlock_t lock; /* locks list */
991                         struct list_head list;
992                 } contexts;
993
994                 /*
995                  * We replace the local file with a global mappings as the
996                  * backing storage for the mmap is on the device and not
997                  * on the struct file, and we do not want to prolong the
998                  * lifetime of the local fd. To minimise the number of
999                  * anonymous inodes we create, we use a global singleton to
1000                  * share the global mapping.
1001                  */
1002                 struct file *mmap_singleton;
1003         } gem;
1004
1005         u8 framestart_delay;
1006
1007         /* Window2 specifies time required to program DSB (Window2) in number of scan lines */
1008         u8 window2_delay;
1009
1010         u8 pch_ssc_use;
1011
1012         /* For i915gm/i945gm vblank irq workaround */
1013         u8 vblank_enabled;
1014
1015         bool irq_enabled;
1016
1017         /* perform PHY state sanity checks? */
1018         bool chv_phy_assert[2];
1019
1020         bool ipc_enabled;
1021
1022         struct intel_audio_private audio;
1023
1024         struct i915_pmu pmu;
1025
1026         struct i915_hdcp_comp_master *hdcp_master;
1027         bool hdcp_comp_added;
1028
1029         /* Mutex to protect the above hdcp component related values. */
1030         struct mutex hdcp_comp_mutex;
1031
1032         /* The TTM device structure. */
1033         struct ttm_device bdev;
1034
1035         I915_SELFTEST_DECLARE(struct i915_selftest_stash selftest;)
1036
1037         /*
1038          * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
1039          * will be rejected. Instead look for a better place.
1040          */
1041 };
1042
1043 static inline struct drm_i915_private *to_i915(const struct drm_device *dev)
1044 {
1045         return container_of(dev, struct drm_i915_private, drm);
1046 }
1047
1048 static inline struct drm_i915_private *kdev_to_i915(struct device *kdev)
1049 {
1050         return dev_get_drvdata(kdev);
1051 }
1052
1053 static inline struct drm_i915_private *pdev_to_i915(struct pci_dev *pdev)
1054 {
1055         return pci_get_drvdata(pdev);
1056 }
1057
1058 static inline struct intel_gt *to_gt(struct drm_i915_private *i915)
1059 {
1060         return &i915->gt0;
1061 }
1062
1063 /* Simple iterator over all initialised engines */
1064 #define for_each_engine(engine__, dev_priv__, id__) \
1065         for ((id__) = 0; \
1066              (id__) < I915_NUM_ENGINES; \
1067              (id__)++) \
1068                 for_each_if ((engine__) = (dev_priv__)->engine[(id__)])
1069
1070 /* Iterator over subset of engines selected by mask */
1071 #define for_each_engine_masked(engine__, gt__, mask__, tmp__) \
1072         for ((tmp__) = (mask__) & (gt__)->info.engine_mask; \
1073              (tmp__) ? \
1074              ((engine__) = (gt__)->engine[__mask_next_bit(tmp__)]), 1 : \
1075              0;)
1076
1077 #define rb_to_uabi_engine(rb) \
1078         rb_entry_safe(rb, struct intel_engine_cs, uabi_node)
1079
1080 #define for_each_uabi_engine(engine__, i915__) \
1081         for ((engine__) = rb_to_uabi_engine(rb_first(&(i915__)->uabi_engines));\
1082              (engine__); \
1083              (engine__) = rb_to_uabi_engine(rb_next(&(engine__)->uabi_node)))
1084
1085 #define for_each_uabi_class_engine(engine__, class__, i915__) \
1086         for ((engine__) = intel_engine_lookup_user((i915__), (class__), 0); \
1087              (engine__) && (engine__)->uabi_class == (class__); \
1088              (engine__) = rb_to_uabi_engine(rb_next(&(engine__)->uabi_node)))
1089
1090 #define I915_GTT_OFFSET_NONE ((u32)-1)
1091
1092 /*
1093  * Frontbuffer tracking bits. Set in obj->frontbuffer_bits while a gem bo is
1094  * considered to be the frontbuffer for the given plane interface-wise. This
1095  * doesn't mean that the hw necessarily already scans it out, but that any
1096  * rendering (by the cpu or gpu) will land in the frontbuffer eventually.
1097  *
1098  * We have one bit per pipe and per scanout plane type.
1099  */
1100 #define INTEL_FRONTBUFFER_BITS_PER_PIPE 8
1101 #define INTEL_FRONTBUFFER(pipe, plane_id) ({ \
1102         BUILD_BUG_ON(INTEL_FRONTBUFFER_BITS_PER_PIPE * I915_MAX_PIPES > 32); \
1103         BUILD_BUG_ON(I915_MAX_PLANES > INTEL_FRONTBUFFER_BITS_PER_PIPE); \
1104         BIT((plane_id) + INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)); \
1105 })
1106 #define INTEL_FRONTBUFFER_OVERLAY(pipe) \
1107         BIT(INTEL_FRONTBUFFER_BITS_PER_PIPE - 1 + INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))
1108 #define INTEL_FRONTBUFFER_ALL_MASK(pipe) \
1109         GENMASK(INTEL_FRONTBUFFER_BITS_PER_PIPE * ((pipe) + 1) - 1, \
1110                 INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))
1111
1112 #define INTEL_INFO(dev_priv)    (&(dev_priv)->__info)
1113 #define RUNTIME_INFO(dev_priv)  (&(dev_priv)->__runtime)
1114 #define DRIVER_CAPS(dev_priv)   (&(dev_priv)->caps)
1115
1116 #define INTEL_DEVID(dev_priv)   (RUNTIME_INFO(dev_priv)->device_id)
1117
1118 #define IP_VER(ver, rel)                ((ver) << 8 | (rel))
1119
1120 #define GRAPHICS_VER(i915)              (INTEL_INFO(i915)->graphics.ver)
1121 #define GRAPHICS_VER_FULL(i915)         IP_VER(INTEL_INFO(i915)->graphics.ver, \
1122                                                INTEL_INFO(i915)->graphics.rel)
1123 #define IS_GRAPHICS_VER(i915, from, until) \
1124         (GRAPHICS_VER(i915) >= (from) && GRAPHICS_VER(i915) <= (until))
1125
1126 #define MEDIA_VER(i915)                 (INTEL_INFO(i915)->media.ver)
1127 #define MEDIA_VER_FULL(i915)            IP_VER(INTEL_INFO(i915)->media.arch, \
1128                                                INTEL_INFO(i915)->media.rel)
1129 #define IS_MEDIA_VER(i915, from, until) \
1130         (MEDIA_VER(i915) >= (from) && MEDIA_VER(i915) <= (until))
1131
1132 #define DISPLAY_VER(i915)       (INTEL_INFO(i915)->display.ver)
1133 #define IS_DISPLAY_VER(i915, from, until) \
1134         (DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until))
1135
1136 #define INTEL_REVID(dev_priv)   (to_pci_dev((dev_priv)->drm.dev)->revision)
1137
1138 #define HAS_DSB(dev_priv)       (INTEL_INFO(dev_priv)->display.has_dsb)
1139
1140 #define INTEL_DISPLAY_STEP(__i915) (RUNTIME_INFO(__i915)->step.display_step)
1141 #define INTEL_GRAPHICS_STEP(__i915) (RUNTIME_INFO(__i915)->step.graphics_step)
1142 #define INTEL_MEDIA_STEP(__i915) (RUNTIME_INFO(__i915)->step.media_step)
1143
1144 #define IS_DISPLAY_STEP(__i915, since, until) \
1145         (drm_WARN_ON(&(__i915)->drm, INTEL_DISPLAY_STEP(__i915) == STEP_NONE), \
1146          INTEL_DISPLAY_STEP(__i915) >= (since) && INTEL_DISPLAY_STEP(__i915) < (until))
1147
1148 #define IS_GRAPHICS_STEP(__i915, since, until) \
1149         (drm_WARN_ON(&(__i915)->drm, INTEL_GRAPHICS_STEP(__i915) == STEP_NONE), \
1150          INTEL_GRAPHICS_STEP(__i915) >= (since) && INTEL_GRAPHICS_STEP(__i915) < (until))
1151
1152 #define IS_MEDIA_STEP(__i915, since, until) \
1153         (drm_WARN_ON(&(__i915)->drm, INTEL_MEDIA_STEP(__i915) == STEP_NONE), \
1154          INTEL_MEDIA_STEP(__i915) >= (since) && INTEL_MEDIA_STEP(__i915) < (until))
1155
1156 static __always_inline unsigned int
1157 __platform_mask_index(const struct intel_runtime_info *info,
1158                       enum intel_platform p)
1159 {
1160         const unsigned int pbits =
1161                 BITS_PER_TYPE(info->platform_mask[0]) - INTEL_SUBPLATFORM_BITS;
1162
1163         /* Expand the platform_mask array if this fails. */
1164         BUILD_BUG_ON(INTEL_MAX_PLATFORMS >
1165                      pbits * ARRAY_SIZE(info->platform_mask));
1166
1167         return p / pbits;
1168 }
1169
1170 static __always_inline unsigned int
1171 __platform_mask_bit(const struct intel_runtime_info *info,
1172                     enum intel_platform p)
1173 {
1174         const unsigned int pbits =
1175                 BITS_PER_TYPE(info->platform_mask[0]) - INTEL_SUBPLATFORM_BITS;
1176
1177         return p % pbits + INTEL_SUBPLATFORM_BITS;
1178 }
1179
1180 static inline u32
1181 intel_subplatform(const struct intel_runtime_info *info, enum intel_platform p)
1182 {
1183         const unsigned int pi = __platform_mask_index(info, p);
1184
1185         return info->platform_mask[pi] & INTEL_SUBPLATFORM_MASK;
1186 }
1187
1188 static __always_inline bool
1189 IS_PLATFORM(const struct drm_i915_private *i915, enum intel_platform p)
1190 {
1191         const struct intel_runtime_info *info = RUNTIME_INFO(i915);
1192         const unsigned int pi = __platform_mask_index(info, p);
1193         const unsigned int pb = __platform_mask_bit(info, p);
1194
1195         BUILD_BUG_ON(!__builtin_constant_p(p));
1196
1197         return info->platform_mask[pi] & BIT(pb);
1198 }
1199
1200 static __always_inline bool
1201 IS_SUBPLATFORM(const struct drm_i915_private *i915,
1202                enum intel_platform p, unsigned int s)
1203 {
1204         const struct intel_runtime_info *info = RUNTIME_INFO(i915);
1205         const unsigned int pi = __platform_mask_index(info, p);
1206         const unsigned int pb = __platform_mask_bit(info, p);
1207         const unsigned int msb = BITS_PER_TYPE(info->platform_mask[0]) - 1;
1208         const u32 mask = info->platform_mask[pi];
1209
1210         BUILD_BUG_ON(!__builtin_constant_p(p));
1211         BUILD_BUG_ON(!__builtin_constant_p(s));
1212         BUILD_BUG_ON((s) >= INTEL_SUBPLATFORM_BITS);
1213
1214         /* Shift and test on the MSB position so sign flag can be used. */
1215         return ((mask << (msb - pb)) & (mask << (msb - s))) & BIT(msb);
1216 }
1217
1218 #define IS_MOBILE(dev_priv)     (INTEL_INFO(dev_priv)->is_mobile)
1219 #define IS_DGFX(dev_priv)   (INTEL_INFO(dev_priv)->is_dgfx)
1220
1221 #define IS_I830(dev_priv)       IS_PLATFORM(dev_priv, INTEL_I830)
1222 #define IS_I845G(dev_priv)      IS_PLATFORM(dev_priv, INTEL_I845G)
1223 #define IS_I85X(dev_priv)       IS_PLATFORM(dev_priv, INTEL_I85X)
1224 #define IS_I865G(dev_priv)      IS_PLATFORM(dev_priv, INTEL_I865G)
1225 #define IS_I915G(dev_priv)      IS_PLATFORM(dev_priv, INTEL_I915G)
1226 #define IS_I915GM(dev_priv)     IS_PLATFORM(dev_priv, INTEL_I915GM)
1227 #define IS_I945G(dev_priv)      IS_PLATFORM(dev_priv, INTEL_I945G)
1228 #define IS_I945GM(dev_priv)     IS_PLATFORM(dev_priv, INTEL_I945GM)
1229 #define IS_I965G(dev_priv)      IS_PLATFORM(dev_priv, INTEL_I965G)
1230 #define IS_I965GM(dev_priv)     IS_PLATFORM(dev_priv, INTEL_I965GM)
1231 #define IS_G45(dev_priv)        IS_PLATFORM(dev_priv, INTEL_G45)
1232 #define IS_GM45(dev_priv)       IS_PLATFORM(dev_priv, INTEL_GM45)
1233 #define IS_G4X(dev_priv)        (IS_G45(dev_priv) || IS_GM45(dev_priv))
1234 #define IS_PINEVIEW(dev_priv)   IS_PLATFORM(dev_priv, INTEL_PINEVIEW)
1235 #define IS_G33(dev_priv)        IS_PLATFORM(dev_priv, INTEL_G33)
1236 #define IS_IRONLAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_IRONLAKE)
1237 #define IS_IRONLAKE_M(dev_priv) \
1238         (IS_PLATFORM(dev_priv, INTEL_IRONLAKE) && IS_MOBILE(dev_priv))
1239 #define IS_SANDYBRIDGE(dev_priv) IS_PLATFORM(dev_priv, INTEL_SANDYBRIDGE)
1240 #define IS_IVYBRIDGE(dev_priv)  IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)
1241 #define IS_IVB_GT1(dev_priv)    (IS_IVYBRIDGE(dev_priv) && \
1242                                  INTEL_INFO(dev_priv)->gt == 1)
1243 #define IS_VALLEYVIEW(dev_priv) IS_PLATFORM(dev_priv, INTEL_VALLEYVIEW)
1244 #define IS_CHERRYVIEW(dev_priv) IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW)
1245 #define IS_HASWELL(dev_priv)    IS_PLATFORM(dev_priv, INTEL_HASWELL)
1246 #define IS_BROADWELL(dev_priv)  IS_PLATFORM(dev_priv, INTEL_BROADWELL)
1247 #define IS_SKYLAKE(dev_priv)    IS_PLATFORM(dev_priv, INTEL_SKYLAKE)
1248 #define IS_BROXTON(dev_priv)    IS_PLATFORM(dev_priv, INTEL_BROXTON)
1249 #define IS_KABYLAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_KABYLAKE)
1250 #define IS_GEMINILAKE(dev_priv) IS_PLATFORM(dev_priv, INTEL_GEMINILAKE)
1251 #define IS_COFFEELAKE(dev_priv) IS_PLATFORM(dev_priv, INTEL_COFFEELAKE)
1252 #define IS_COMETLAKE(dev_priv)  IS_PLATFORM(dev_priv, INTEL_COMETLAKE)
1253 #define IS_ICELAKE(dev_priv)    IS_PLATFORM(dev_priv, INTEL_ICELAKE)
1254 #define IS_JSL_EHL(dev_priv)    (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE) || \
1255                                 IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
1256 #define IS_TIGERLAKE(dev_priv)  IS_PLATFORM(dev_priv, INTEL_TIGERLAKE)
1257 #define IS_ROCKETLAKE(dev_priv) IS_PLATFORM(dev_priv, INTEL_ROCKETLAKE)
1258 #define IS_DG1(dev_priv)        IS_PLATFORM(dev_priv, INTEL_DG1)
1259 #define IS_ALDERLAKE_S(dev_priv) IS_PLATFORM(dev_priv, INTEL_ALDERLAKE_S)
1260 #define IS_ALDERLAKE_P(dev_priv) IS_PLATFORM(dev_priv, INTEL_ALDERLAKE_P)
1261 #define IS_XEHPSDV(dev_priv) IS_PLATFORM(dev_priv, INTEL_XEHPSDV)
1262 #define IS_DG2(dev_priv)        IS_PLATFORM(dev_priv, INTEL_DG2)
1263 #define IS_DG2_G10(dev_priv) \
1264         IS_SUBPLATFORM(dev_priv, INTEL_DG2, INTEL_SUBPLATFORM_G10)
1265 #define IS_DG2_G11(dev_priv) \
1266         IS_SUBPLATFORM(dev_priv, INTEL_DG2, INTEL_SUBPLATFORM_G11)
1267 #define IS_ADLS_RPLS(dev_priv) \
1268         IS_SUBPLATFORM(dev_priv, INTEL_ALDERLAKE_S, INTEL_SUBPLATFORM_RPL_S)
1269 #define IS_ADLP_N(dev_priv) \
1270         IS_SUBPLATFORM(dev_priv, INTEL_ALDERLAKE_P, INTEL_SUBPLATFORM_N)
1271 #define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
1272                                     (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
1273 #define IS_BDW_ULT(dev_priv) \
1274         IS_SUBPLATFORM(dev_priv, INTEL_BROADWELL, INTEL_SUBPLATFORM_ULT)
1275 #define IS_BDW_ULX(dev_priv) \
1276         IS_SUBPLATFORM(dev_priv, INTEL_BROADWELL, INTEL_SUBPLATFORM_ULX)
1277 #define IS_BDW_GT3(dev_priv)    (IS_BROADWELL(dev_priv) && \
1278                                  INTEL_INFO(dev_priv)->gt == 3)
1279 #define IS_HSW_ULT(dev_priv) \
1280         IS_SUBPLATFORM(dev_priv, INTEL_HASWELL, INTEL_SUBPLATFORM_ULT)
1281 #define IS_HSW_GT3(dev_priv)    (IS_HASWELL(dev_priv) && \
1282                                  INTEL_INFO(dev_priv)->gt == 3)
1283 #define IS_HSW_GT1(dev_priv)    (IS_HASWELL(dev_priv) && \
1284                                  INTEL_INFO(dev_priv)->gt == 1)
1285 /* ULX machines are also considered ULT. */
1286 #define IS_HSW_ULX(dev_priv) \
1287         IS_SUBPLATFORM(dev_priv, INTEL_HASWELL, INTEL_SUBPLATFORM_ULX)
1288 #define IS_SKL_ULT(dev_priv) \
1289         IS_SUBPLATFORM(dev_priv, INTEL_SKYLAKE, INTEL_SUBPLATFORM_ULT)
1290 #define IS_SKL_ULX(dev_priv) \
1291         IS_SUBPLATFORM(dev_priv, INTEL_SKYLAKE, INTEL_SUBPLATFORM_ULX)
1292 #define IS_KBL_ULT(dev_priv) \
1293         IS_SUBPLATFORM(dev_priv, INTEL_KABYLAKE, INTEL_SUBPLATFORM_ULT)
1294 #define IS_KBL_ULX(dev_priv) \
1295         IS_SUBPLATFORM(dev_priv, INTEL_KABYLAKE, INTEL_SUBPLATFORM_ULX)
1296 #define IS_SKL_GT2(dev_priv)    (IS_SKYLAKE(dev_priv) && \
1297                                  INTEL_INFO(dev_priv)->gt == 2)
1298 #define IS_SKL_GT3(dev_priv)    (IS_SKYLAKE(dev_priv) && \
1299                                  INTEL_INFO(dev_priv)->gt == 3)
1300 #define IS_SKL_GT4(dev_priv)    (IS_SKYLAKE(dev_priv) && \
1301                                  INTEL_INFO(dev_priv)->gt == 4)
1302 #define IS_KBL_GT2(dev_priv)    (IS_KABYLAKE(dev_priv) && \
1303                                  INTEL_INFO(dev_priv)->gt == 2)
1304 #define IS_KBL_GT3(dev_priv)    (IS_KABYLAKE(dev_priv) && \
1305                                  INTEL_INFO(dev_priv)->gt == 3)
1306 #define IS_CFL_ULT(dev_priv) \
1307         IS_SUBPLATFORM(dev_priv, INTEL_COFFEELAKE, INTEL_SUBPLATFORM_ULT)
1308 #define IS_CFL_ULX(dev_priv) \
1309         IS_SUBPLATFORM(dev_priv, INTEL_COFFEELAKE, INTEL_SUBPLATFORM_ULX)
1310 #define IS_CFL_GT2(dev_priv)    (IS_COFFEELAKE(dev_priv) && \
1311                                  INTEL_INFO(dev_priv)->gt == 2)
1312 #define IS_CFL_GT3(dev_priv)    (IS_COFFEELAKE(dev_priv) && \
1313                                  INTEL_INFO(dev_priv)->gt == 3)
1314
1315 #define IS_CML_ULT(dev_priv) \
1316         IS_SUBPLATFORM(dev_priv, INTEL_COMETLAKE, INTEL_SUBPLATFORM_ULT)
1317 #define IS_CML_ULX(dev_priv) \
1318         IS_SUBPLATFORM(dev_priv, INTEL_COMETLAKE, INTEL_SUBPLATFORM_ULX)
1319 #define IS_CML_GT2(dev_priv)    (IS_COMETLAKE(dev_priv) && \
1320                                  INTEL_INFO(dev_priv)->gt == 2)
1321
1322 #define IS_ICL_WITH_PORT_F(dev_priv) \
1323         IS_SUBPLATFORM(dev_priv, INTEL_ICELAKE, INTEL_SUBPLATFORM_PORTF)
1324
1325 #define IS_TGL_U(dev_priv) \
1326         IS_SUBPLATFORM(dev_priv, INTEL_TIGERLAKE, INTEL_SUBPLATFORM_ULT)
1327
1328 #define IS_TGL_Y(dev_priv) \
1329         IS_SUBPLATFORM(dev_priv, INTEL_TIGERLAKE, INTEL_SUBPLATFORM_ULX)
1330
1331 #define IS_SKL_GRAPHICS_STEP(p, since, until) (IS_SKYLAKE(p) && IS_GRAPHICS_STEP(p, since, until))
1332
1333 #define IS_KBL_GRAPHICS_STEP(dev_priv, since, until) \
1334         (IS_KABYLAKE(dev_priv) && IS_GRAPHICS_STEP(dev_priv, since, until))
1335 #define IS_KBL_DISPLAY_STEP(dev_priv, since, until) \
1336         (IS_KABYLAKE(dev_priv) && IS_DISPLAY_STEP(dev_priv, since, until))
1337
1338 #define IS_JSL_EHL_GRAPHICS_STEP(p, since, until) \
1339         (IS_JSL_EHL(p) && IS_GRAPHICS_STEP(p, since, until))
1340 #define IS_JSL_EHL_DISPLAY_STEP(p, since, until) \
1341         (IS_JSL_EHL(p) && IS_DISPLAY_STEP(p, since, until))
1342
1343 #define IS_TGL_DISPLAY_STEP(__i915, since, until) \
1344         (IS_TIGERLAKE(__i915) && \
1345          IS_DISPLAY_STEP(__i915, since, until))
1346
1347 #define IS_TGL_UY_GRAPHICS_STEP(__i915, since, until) \
1348         ((IS_TGL_U(__i915) || IS_TGL_Y(__i915)) && \
1349          IS_GRAPHICS_STEP(__i915, since, until))
1350
1351 #define IS_TGL_GRAPHICS_STEP(__i915, since, until) \
1352         (IS_TIGERLAKE(__i915) && !(IS_TGL_U(__i915) || IS_TGL_Y(__i915)) && \
1353          IS_GRAPHICS_STEP(__i915, since, until))
1354
1355 #define IS_RKL_DISPLAY_STEP(p, since, until) \
1356         (IS_ROCKETLAKE(p) && IS_DISPLAY_STEP(p, since, until))
1357
1358 #define IS_DG1_GRAPHICS_STEP(p, since, until) \
1359         (IS_DG1(p) && IS_GRAPHICS_STEP(p, since, until))
1360 #define IS_DG1_DISPLAY_STEP(p, since, until) \
1361         (IS_DG1(p) && IS_DISPLAY_STEP(p, since, until))
1362
1363 #define IS_ADLS_DISPLAY_STEP(__i915, since, until) \
1364         (IS_ALDERLAKE_S(__i915) && \
1365          IS_DISPLAY_STEP(__i915, since, until))
1366
1367 #define IS_ADLS_GRAPHICS_STEP(__i915, since, until) \
1368         (IS_ALDERLAKE_S(__i915) && \
1369          IS_GRAPHICS_STEP(__i915, since, until))
1370
1371 #define IS_ADLP_DISPLAY_STEP(__i915, since, until) \
1372         (IS_ALDERLAKE_P(__i915) && \
1373          IS_DISPLAY_STEP(__i915, since, until))
1374
1375 #define IS_ADLP_GRAPHICS_STEP(__i915, since, until) \
1376         (IS_ALDERLAKE_P(__i915) && \
1377          IS_GRAPHICS_STEP(__i915, since, until))
1378
1379 #define IS_XEHPSDV_GRAPHICS_STEP(__i915, since, until) \
1380         (IS_XEHPSDV(__i915) && IS_GRAPHICS_STEP(__i915, since, until))
1381
1382 /*
1383  * DG2 hardware steppings are a bit unusual.  The hardware design was forked
1384  * to create two variants (G10 and G11) which have distinct workaround sets.
1385  * The G11 fork of the DG2 design resets the GT stepping back to "A0" for its
1386  * first iteration, even though it's more similar to a G10 B0 stepping in terms
1387  * of functionality and workarounds.  However the display stepping does not
1388  * reset in the same manner --- a specific stepping like "B0" has a consistent
1389  * meaning regardless of whether it belongs to a G10 or G11 DG2.
1390  *
1391  * TLDR:  All GT workarounds and stepping-specific logic must be applied in
1392  * relation to a specific subplatform (G10 or G11), whereas display workarounds
1393  * and stepping-specific logic will be applied with a general DG2-wide stepping
1394  * number.
1395  */
1396 #define IS_DG2_GRAPHICS_STEP(__i915, variant, since, until) \
1397         (IS_SUBPLATFORM(__i915, INTEL_DG2, INTEL_SUBPLATFORM_##variant) && \
1398          IS_GRAPHICS_STEP(__i915, since, until))
1399
1400 #define IS_DG2_DISPLAY_STEP(__i915, since, until) \
1401         (IS_DG2(__i915) && \
1402          IS_DISPLAY_STEP(__i915, since, until))
1403
1404 #define IS_LP(dev_priv)         (INTEL_INFO(dev_priv)->is_lp)
1405 #define IS_GEN9_LP(dev_priv)    (GRAPHICS_VER(dev_priv) == 9 && IS_LP(dev_priv))
1406 #define IS_GEN9_BC(dev_priv)    (GRAPHICS_VER(dev_priv) == 9 && !IS_LP(dev_priv))
1407
1408 #define __HAS_ENGINE(engine_mask, id) ((engine_mask) & BIT(id))
1409 #define HAS_ENGINE(gt, id) __HAS_ENGINE((gt)->info.engine_mask, id)
1410
1411 #define ENGINE_INSTANCES_MASK(gt, first, count) ({              \
1412         unsigned int first__ = (first);                                 \
1413         unsigned int count__ = (count);                                 \
1414         ((gt)->info.engine_mask &                                               \
1415          GENMASK(first__ + count__ - 1, first__)) >> first__;           \
1416 })
1417 #define VDBOX_MASK(gt) \
1418         ENGINE_INSTANCES_MASK(gt, VCS0, I915_MAX_VCS)
1419 #define VEBOX_MASK(gt) \
1420         ENGINE_INSTANCES_MASK(gt, VECS0, I915_MAX_VECS)
1421
1422 /*
1423  * The Gen7 cmdparser copies the scanned buffer to the ggtt for execution
1424  * All later gens can run the final buffer from the ppgtt
1425  */
1426 #define CMDPARSER_USES_GGTT(dev_priv) (GRAPHICS_VER(dev_priv) == 7)
1427
1428 #define HAS_LLC(dev_priv)       (INTEL_INFO(dev_priv)->has_llc)
1429 #define HAS_SNOOP(dev_priv)     (INTEL_INFO(dev_priv)->has_snoop)
1430 #define HAS_EDRAM(dev_priv)     ((dev_priv)->edram_size_mb)
1431 #define HAS_SECURE_BATCHES(dev_priv) (GRAPHICS_VER(dev_priv) < 6)
1432 #define HAS_WT(dev_priv)        HAS_EDRAM(dev_priv)
1433
1434 #define HWS_NEEDS_PHYSICAL(dev_priv)    (INTEL_INFO(dev_priv)->hws_needs_physical)
1435
1436 #define HAS_LOGICAL_RING_CONTEXTS(dev_priv) \
1437                 (INTEL_INFO(dev_priv)->has_logical_ring_contexts)
1438 #define HAS_LOGICAL_RING_ELSQ(dev_priv) \
1439                 (INTEL_INFO(dev_priv)->has_logical_ring_elsq)
1440
1441 #define HAS_EXECLISTS(dev_priv) HAS_LOGICAL_RING_CONTEXTS(dev_priv)
1442
1443 #define INTEL_PPGTT(dev_priv) (INTEL_INFO(dev_priv)->ppgtt_type)
1444 #define HAS_PPGTT(dev_priv) \
1445         (INTEL_PPGTT(dev_priv) != INTEL_PPGTT_NONE)
1446 #define HAS_FULL_PPGTT(dev_priv) \
1447         (INTEL_PPGTT(dev_priv) >= INTEL_PPGTT_FULL)
1448
1449 #define HAS_PAGE_SIZES(dev_priv, sizes) ({ \
1450         GEM_BUG_ON((sizes) == 0); \
1451         ((sizes) & ~INTEL_INFO(dev_priv)->page_sizes) == 0; \
1452 })
1453
1454 #define HAS_OVERLAY(dev_priv)            (INTEL_INFO(dev_priv)->display.has_overlay)
1455 #define OVERLAY_NEEDS_PHYSICAL(dev_priv) \
1456                 (INTEL_INFO(dev_priv)->display.overlay_needs_physical)
1457
1458 /* Early gen2 have a totally busted CS tlb and require pinned batches. */
1459 #define HAS_BROKEN_CS_TLB(dev_priv)     (IS_I830(dev_priv) || IS_I845G(dev_priv))
1460
1461 #define NEEDS_RC6_CTX_CORRUPTION_WA(dev_priv)   \
1462         (IS_BROADWELL(dev_priv) || GRAPHICS_VER(dev_priv) == 9)
1463
1464 /* WaRsDisableCoarsePowerGating:skl,cnl */
1465 #define NEEDS_WaRsDisableCoarsePowerGating(dev_priv)                    \
1466         (IS_SKL_GT3(dev_priv) || IS_SKL_GT4(dev_priv))
1467
1468 #define HAS_GMBUS_IRQ(dev_priv) (GRAPHICS_VER(dev_priv) >= 4)
1469 #define HAS_GMBUS_BURST_READ(dev_priv) (GRAPHICS_VER(dev_priv) >= 11 || \
1470                                         IS_GEMINILAKE(dev_priv) || \
1471                                         IS_KABYLAKE(dev_priv))
1472
1473 /* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
1474  * rows, which changed the alignment requirements and fence programming.
1475  */
1476 #define HAS_128_BYTE_Y_TILING(dev_priv) (GRAPHICS_VER(dev_priv) != 2 && \
1477                                          !(IS_I915G(dev_priv) || IS_I915GM(dev_priv)))
1478 #define SUPPORTS_TV(dev_priv)           (INTEL_INFO(dev_priv)->display.supports_tv)
1479 #define I915_HAS_HOTPLUG(dev_priv)      (INTEL_INFO(dev_priv)->display.has_hotplug)
1480
1481 #define HAS_FW_BLC(dev_priv)    (GRAPHICS_VER(dev_priv) > 2)
1482 #define HAS_FBC(dev_priv)       (INTEL_INFO(dev_priv)->display.fbc_mask != 0)
1483 #define HAS_CUR_FBC(dev_priv)   (!HAS_GMCH(dev_priv) && GRAPHICS_VER(dev_priv) >= 7)
1484
1485 #define HAS_IPS(dev_priv)       (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv))
1486
1487 #define HAS_DP_MST(dev_priv)    (INTEL_INFO(dev_priv)->display.has_dp_mst)
1488 #define HAS_DP20(dev_priv)      (IS_DG2(dev_priv))
1489
1490 #define HAS_CDCLK_CRAWL(dev_priv)        (INTEL_INFO(dev_priv)->display.has_cdclk_crawl)
1491 #define HAS_DDI(dev_priv)                (INTEL_INFO(dev_priv)->display.has_ddi)
1492 #define HAS_FPGA_DBG_UNCLAIMED(dev_priv) (INTEL_INFO(dev_priv)->display.has_fpga_dbg)
1493 #define HAS_PSR(dev_priv)                (INTEL_INFO(dev_priv)->display.has_psr)
1494 #define HAS_PSR_HW_TRACKING(dev_priv) \
1495         (INTEL_INFO(dev_priv)->display.has_psr_hw_tracking)
1496 #define HAS_PSR2_SEL_FETCH(dev_priv)     (GRAPHICS_VER(dev_priv) >= 12)
1497 #define HAS_TRANSCODER(dev_priv, trans)  ((INTEL_INFO(dev_priv)->display.cpu_transcoder_mask & BIT(trans)) != 0)
1498
1499 #define HAS_RC6(dev_priv)                (INTEL_INFO(dev_priv)->has_rc6)
1500 #define HAS_RC6p(dev_priv)               (INTEL_INFO(dev_priv)->has_rc6p)
1501 #define HAS_RC6pp(dev_priv)              (false) /* HW was never validated */
1502
1503 #define HAS_RPS(dev_priv)       (INTEL_INFO(dev_priv)->has_rps)
1504
1505 #define HAS_DMC(dev_priv)       (INTEL_INFO(dev_priv)->display.has_dmc)
1506
1507 #define HAS_MSO(i915)           (GRAPHICS_VER(i915) >= 12)
1508
1509 #define HAS_RUNTIME_PM(dev_priv) (INTEL_INFO(dev_priv)->has_runtime_pm)
1510 #define HAS_64BIT_RELOC(dev_priv) (INTEL_INFO(dev_priv)->has_64bit_reloc)
1511
1512 #define HAS_MSLICES(dev_priv) \
1513         (INTEL_INFO(dev_priv)->has_mslices)
1514
1515 /*
1516  * Set this flag, when platform requires 64K GTT page sizes or larger for
1517  * device local memory access. Also this flag implies that we require or
1518  * at least support the compact PT layout for the ppGTT when using the 64K
1519  * GTT pages.
1520  */
1521 #define HAS_64K_PAGES(dev_priv) (INTEL_INFO(dev_priv)->has_64k_pages)
1522
1523 #define HAS_IPC(dev_priv)                (INTEL_INFO(dev_priv)->display.has_ipc)
1524
1525 #define HAS_REGION(i915, i) (INTEL_INFO(i915)->memory_regions & (i))
1526 #define HAS_LMEM(i915) HAS_REGION(i915, REGION_LMEM)
1527
1528 #define HAS_GT_UC(dev_priv)     (INTEL_INFO(dev_priv)->has_gt_uc)
1529
1530 #define HAS_POOLED_EU(dev_priv) (INTEL_INFO(dev_priv)->has_pooled_eu)
1531
1532 #define HAS_GLOBAL_MOCS_REGISTERS(dev_priv)     (INTEL_INFO(dev_priv)->has_global_mocs)
1533
1534 #define HAS_PXP(dev_priv)  ((IS_ENABLED(CONFIG_DRM_I915_PXP) && \
1535                             INTEL_INFO(dev_priv)->has_pxp) && \
1536                             VDBOX_MASK(to_gt(dev_priv)))
1537
1538 #define HAS_GMCH(dev_priv) (INTEL_INFO(dev_priv)->display.has_gmch)
1539
1540 #define HAS_LSPCON(dev_priv) (IS_GRAPHICS_VER(dev_priv, 9, 10))
1541
1542 /* DPF == dynamic parity feature */
1543 #define HAS_L3_DPF(dev_priv) (INTEL_INFO(dev_priv)->has_l3_dpf)
1544 #define NUM_L3_SLICES(dev_priv) (IS_HSW_GT3(dev_priv) ? \
1545                                  2 : HAS_L3_DPF(dev_priv))
1546
1547 #define GT_FREQUENCY_MULTIPLIER 50
1548 #define GEN9_FREQ_SCALER 3
1549
1550 #define INTEL_NUM_PIPES(dev_priv) (hweight8(INTEL_INFO(dev_priv)->display.pipe_mask))
1551
1552 #define HAS_DISPLAY(dev_priv) (INTEL_INFO(dev_priv)->display.pipe_mask != 0)
1553
1554 #define HAS_VRR(i915)   (GRAPHICS_VER(i915) >= 11)
1555
1556 #define HAS_ASYNC_FLIPS(i915)           (DISPLAY_VER(i915) >= 5)
1557
1558 /* Only valid when HAS_DISPLAY() is true */
1559 #define INTEL_DISPLAY_ENABLED(dev_priv) \
1560         (drm_WARN_ON(&(dev_priv)->drm, !HAS_DISPLAY(dev_priv)), !(dev_priv)->params.disable_display)
1561
1562 static inline bool run_as_guest(void)
1563 {
1564         return !hypervisor_is_type(X86_HYPER_NATIVE);
1565 }
1566
1567 #define HAS_D12_PLANE_MINIMIZATION(dev_priv) (IS_ROCKETLAKE(dev_priv) || \
1568                                               IS_ALDERLAKE_S(dev_priv))
1569
1570 static inline bool intel_vtd_active(struct drm_i915_private *i915)
1571 {
1572         if (device_iommu_mapped(i915->drm.dev))
1573                 return true;
1574
1575         /* Running as a guest, we assume the host is enforcing VT'd */
1576         return run_as_guest();
1577 }
1578
1579 void
1580 i915_print_iommu_status(struct drm_i915_private *i915, struct drm_printer *p);
1581
1582 static inline bool intel_scanout_needs_vtd_wa(struct drm_i915_private *dev_priv)
1583 {
1584         return GRAPHICS_VER(dev_priv) >= 6 && intel_vtd_active(dev_priv);
1585 }
1586
1587 static inline bool
1588 intel_ggtt_update_needs_vtd_wa(struct drm_i915_private *i915)
1589 {
1590         return IS_BROXTON(i915) && intel_vtd_active(i915);
1591 }
1592
1593 static inline bool
1594 intel_vm_no_concurrent_access_wa(struct drm_i915_private *i915)
1595 {
1596         return IS_CHERRYVIEW(i915) || intel_ggtt_update_needs_vtd_wa(i915);
1597 }
1598
1599 /* i915_gem.c */
1600 void i915_gem_init_early(struct drm_i915_private *dev_priv);
1601 void i915_gem_cleanup_early(struct drm_i915_private *dev_priv);
1602
1603 static inline void i915_gem_drain_freed_objects(struct drm_i915_private *i915)
1604 {
1605         /*
1606          * A single pass should suffice to release all the freed objects (along
1607          * most call paths) , but be a little more paranoid in that freeing
1608          * the objects does take a little amount of time, during which the rcu
1609          * callbacks could have added new objects into the freed list, and
1610          * armed the work again.
1611          */
1612         while (atomic_read(&i915->mm.free_count)) {
1613                 flush_delayed_work(&i915->mm.free_work);
1614                 flush_delayed_work(&i915->bdev.wq);
1615                 rcu_barrier();
1616         }
1617 }
1618
1619 static inline void i915_gem_drain_workqueue(struct drm_i915_private *i915)
1620 {
1621         /*
1622          * Similar to objects above (see i915_gem_drain_freed-objects), in
1623          * general we have workers that are armed by RCU and then rearm
1624          * themselves in their callbacks. To be paranoid, we need to
1625          * drain the workqueue a second time after waiting for the RCU
1626          * grace period so that we catch work queued via RCU from the first
1627          * pass. As neither drain_workqueue() nor flush_workqueue() report
1628          * a result, we make an assumption that we only don't require more
1629          * than 3 passes to catch all _recursive_ RCU delayed work.
1630          *
1631          */
1632         int pass = 3;
1633         do {
1634                 flush_workqueue(i915->wq);
1635                 rcu_barrier();
1636                 i915_gem_drain_freed_objects(i915);
1637         } while (--pass);
1638         drain_workqueue(i915->wq);
1639 }
1640
1641 struct i915_vma * __must_check
1642 i915_gem_object_ggtt_pin_ww(struct drm_i915_gem_object *obj,
1643                             struct i915_gem_ww_ctx *ww,
1644                             const struct i915_ggtt_view *view,
1645                             u64 size, u64 alignment, u64 flags);
1646
1647 struct i915_vma * __must_check
1648 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
1649                          const struct i915_ggtt_view *view,
1650                          u64 size, u64 alignment, u64 flags);
1651
1652 int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
1653                            unsigned long flags);
1654 #define I915_GEM_OBJECT_UNBIND_ACTIVE BIT(0)
1655 #define I915_GEM_OBJECT_UNBIND_BARRIER BIT(1)
1656 #define I915_GEM_OBJECT_UNBIND_TEST BIT(2)
1657 #define I915_GEM_OBJECT_UNBIND_VM_TRYLOCK BIT(3)
1658
1659 void i915_gem_runtime_suspend(struct drm_i915_private *dev_priv);
1660
1661 int i915_gem_dumb_create(struct drm_file *file_priv,
1662                          struct drm_device *dev,
1663                          struct drm_mode_create_dumb *args);
1664
1665 int __must_check i915_gem_set_global_seqno(struct drm_device *dev, u32 seqno);
1666
1667 static inline u32 i915_reset_count(struct i915_gpu_error *error)
1668 {
1669         return atomic_read(&error->reset_count);
1670 }
1671
1672 static inline u32 i915_reset_engine_count(struct i915_gpu_error *error,
1673                                           const struct intel_engine_cs *engine)
1674 {
1675         return atomic_read(&error->reset_engine_count[engine->uabi_class]);
1676 }
1677
1678 int __must_check i915_gem_init(struct drm_i915_private *dev_priv);
1679 void i915_gem_driver_register(struct drm_i915_private *i915);
1680 void i915_gem_driver_unregister(struct drm_i915_private *i915);
1681 void i915_gem_driver_remove(struct drm_i915_private *dev_priv);
1682 void i915_gem_driver_release(struct drm_i915_private *dev_priv);
1683 void i915_gem_suspend(struct drm_i915_private *dev_priv);
1684 void i915_gem_suspend_late(struct drm_i915_private *dev_priv);
1685 void i915_gem_resume(struct drm_i915_private *dev_priv);
1686
1687 int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file);
1688
1689 int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
1690                                     enum i915_cache_level cache_level);
1691
1692 struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
1693                                 struct dma_buf *dma_buf);
1694
1695 struct dma_buf *i915_gem_prime_export(struct drm_gem_object *gem_obj, int flags);
1696
1697 static inline struct i915_address_space *
1698 i915_gem_vm_lookup(struct drm_i915_file_private *file_priv, u32 id)
1699 {
1700         struct i915_address_space *vm;
1701
1702         xa_lock(&file_priv->vm_xa);
1703         vm = xa_load(&file_priv->vm_xa, id);
1704         if (vm)
1705                 kref_get(&vm->ref);
1706         xa_unlock(&file_priv->vm_xa);
1707
1708         return vm;
1709 }
1710
1711 /* i915_gem_internal.c */
1712 struct drm_i915_gem_object *
1713 i915_gem_object_create_internal(struct drm_i915_private *dev_priv,
1714                                 phys_addr_t size);
1715 struct drm_i915_gem_object *
1716 __i915_gem_object_create_internal(struct drm_i915_private *dev_priv,
1717                                   const struct drm_i915_gem_object_ops *ops,
1718                                   phys_addr_t size);
1719
1720 /* i915_gem_tiling.c */
1721 static inline bool i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj)
1722 {
1723         struct drm_i915_private *i915 = to_i915(obj->base.dev);
1724
1725         return i915->ggtt.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 &&
1726                 i915_gem_object_is_tiled(obj);
1727 }
1728
1729 const char *i915_cache_level_str(struct drm_i915_private *i915, int type);
1730
1731 /* intel_device_info.c */
1732 static inline struct intel_device_info *
1733 mkwrite_device_info(struct drm_i915_private *dev_priv)
1734 {
1735         return (struct intel_device_info *)INTEL_INFO(dev_priv);
1736 }
1737
1738 static inline int intel_hws_csb_write_index(struct drm_i915_private *i915)
1739 {
1740         if (GRAPHICS_VER(i915) >= 11)
1741                 return ICL_HWS_CSB_WRITE_INDEX;
1742         else
1743                 return I915_HWS_CSB_WRITE_INDEX;
1744 }
1745
1746 static inline enum i915_map_type
1747 i915_coherent_map_type(struct drm_i915_private *i915,
1748                        struct drm_i915_gem_object *obj, bool always_coherent)
1749 {
1750         if (i915_gem_object_is_lmem(obj))
1751                 return I915_MAP_WC;
1752         if (HAS_LLC(i915) || always_coherent)
1753                 return I915_MAP_WB;
1754         else
1755                 return I915_MAP_WC;
1756 }
1757
1758 #endif