]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/gpu/drm/i915/intel_ringbuffer.h
drm: Add drm/drm_util.h header file
[linux.git] / drivers / gpu / drm / i915 / intel_ringbuffer.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _INTEL_RINGBUFFER_H_
3 #define _INTEL_RINGBUFFER_H_
4
5 #include <drm/drm_util.h>
6
7 #include <linux/hashtable.h>
8 #include <linux/seqlock.h>
9
10 #include "i915_gem_batch_pool.h"
11
12 #include "i915_reg.h"
13 #include "i915_pmu.h"
14 #include "i915_request.h"
15 #include "i915_selftest.h"
16 #include "i915_timeline.h"
17 #include "intel_gpu_commands.h"
18
19 struct drm_printer;
20 struct i915_sched_attr;
21
22 #define I915_CMD_HASH_ORDER 9
23
24 /* Early gen2 devices have a cacheline of just 32 bytes, using 64 is overkill,
25  * but keeps the logic simple. Indeed, the whole purpose of this macro is just
26  * to give some inclination as to some of the magic values used in the various
27  * workarounds!
28  */
29 #define CACHELINE_BYTES 64
30 #define CACHELINE_DWORDS (CACHELINE_BYTES / sizeof(uint32_t))
31
32 struct intel_hw_status_page {
33         struct i915_vma *vma;
34         u32 *page_addr;
35         u32 ggtt_offset;
36 };
37
38 #define I915_READ_TAIL(engine) I915_READ(RING_TAIL((engine)->mmio_base))
39 #define I915_WRITE_TAIL(engine, val) I915_WRITE(RING_TAIL((engine)->mmio_base), val)
40
41 #define I915_READ_START(engine) I915_READ(RING_START((engine)->mmio_base))
42 #define I915_WRITE_START(engine, val) I915_WRITE(RING_START((engine)->mmio_base), val)
43
44 #define I915_READ_HEAD(engine)  I915_READ(RING_HEAD((engine)->mmio_base))
45 #define I915_WRITE_HEAD(engine, val) I915_WRITE(RING_HEAD((engine)->mmio_base), val)
46
47 #define I915_READ_CTL(engine) I915_READ(RING_CTL((engine)->mmio_base))
48 #define I915_WRITE_CTL(engine, val) I915_WRITE(RING_CTL((engine)->mmio_base), val)
49
50 #define I915_READ_IMR(engine) I915_READ(RING_IMR((engine)->mmio_base))
51 #define I915_WRITE_IMR(engine, val) I915_WRITE(RING_IMR((engine)->mmio_base), val)
52
53 #define I915_READ_MODE(engine) I915_READ(RING_MI_MODE((engine)->mmio_base))
54 #define I915_WRITE_MODE(engine, val) I915_WRITE(RING_MI_MODE((engine)->mmio_base), val)
55
56 /* seqno size is actually only a uint32, but since we plan to use MI_FLUSH_DW to
57  * do the writes, and that must have qw aligned offsets, simply pretend it's 8b.
58  */
59 enum intel_engine_hangcheck_action {
60         ENGINE_IDLE = 0,
61         ENGINE_WAIT,
62         ENGINE_ACTIVE_SEQNO,
63         ENGINE_ACTIVE_HEAD,
64         ENGINE_ACTIVE_SUBUNITS,
65         ENGINE_WAIT_KICK,
66         ENGINE_DEAD,
67 };
68
69 static inline const char *
70 hangcheck_action_to_str(const enum intel_engine_hangcheck_action a)
71 {
72         switch (a) {
73         case ENGINE_IDLE:
74                 return "idle";
75         case ENGINE_WAIT:
76                 return "wait";
77         case ENGINE_ACTIVE_SEQNO:
78                 return "active seqno";
79         case ENGINE_ACTIVE_HEAD:
80                 return "active head";
81         case ENGINE_ACTIVE_SUBUNITS:
82                 return "active subunits";
83         case ENGINE_WAIT_KICK:
84                 return "wait kick";
85         case ENGINE_DEAD:
86                 return "dead";
87         }
88
89         return "unknown";
90 }
91
92 #define I915_MAX_SLICES 3
93 #define I915_MAX_SUBSLICES 8
94
95 #define instdone_slice_mask(dev_priv__) \
96         (INTEL_GEN(dev_priv__) == 7 ? \
97          1 : INTEL_INFO(dev_priv__)->sseu.slice_mask)
98
99 #define instdone_subslice_mask(dev_priv__) \
100         (INTEL_GEN(dev_priv__) == 7 ? \
101          1 : INTEL_INFO(dev_priv__)->sseu.subslice_mask[0])
102
103 #define for_each_instdone_slice_subslice(dev_priv__, slice__, subslice__) \
104         for ((slice__) = 0, (subslice__) = 0; \
105              (slice__) < I915_MAX_SLICES; \
106              (subslice__) = ((subslice__) + 1) < I915_MAX_SUBSLICES ? (subslice__) + 1 : 0, \
107                (slice__) += ((subslice__) == 0)) \
108                 for_each_if((BIT(slice__) & instdone_slice_mask(dev_priv__)) && \
109                             (BIT(subslice__) & instdone_subslice_mask(dev_priv__)))
110
111 struct intel_instdone {
112         u32 instdone;
113         /* The following exist only in the RCS engine */
114         u32 slice_common;
115         u32 sampler[I915_MAX_SLICES][I915_MAX_SUBSLICES];
116         u32 row[I915_MAX_SLICES][I915_MAX_SUBSLICES];
117 };
118
119 struct intel_engine_hangcheck {
120         u64 acthd;
121         u32 seqno;
122         enum intel_engine_hangcheck_action action;
123         unsigned long action_timestamp;
124         int deadlock;
125         struct intel_instdone instdone;
126         struct i915_request *active_request;
127         bool stalled:1;
128         bool wedged:1;
129 };
130
131 struct intel_ring {
132         struct i915_vma *vma;
133         void *vaddr;
134
135         struct i915_timeline *timeline;
136         struct list_head request_list;
137         struct list_head active_link;
138
139         u32 head;
140         u32 tail;
141         u32 emit;
142
143         u32 space;
144         u32 size;
145         u32 effective_size;
146 };
147
148 struct i915_gem_context;
149 struct drm_i915_reg_table;
150
151 /*
152  * we use a single page to load ctx workarounds so all of these
153  * values are referred in terms of dwords
154  *
155  * struct i915_wa_ctx_bb:
156  *  offset: specifies batch starting position, also helpful in case
157  *    if we want to have multiple batches at different offsets based on
158  *    some criteria. It is not a requirement at the moment but provides
159  *    an option for future use.
160  *  size: size of the batch in DWORDS
161  */
162 struct i915_ctx_workarounds {
163         struct i915_wa_ctx_bb {
164                 u32 offset;
165                 u32 size;
166         } indirect_ctx, per_ctx;
167         struct i915_vma *vma;
168 };
169
170 struct i915_request;
171
172 #define I915_MAX_VCS    4
173 #define I915_MAX_VECS   2
174
175 /*
176  * Engine IDs definitions.
177  * Keep instances of the same type engine together.
178  */
179 enum intel_engine_id {
180         RCS = 0,
181         BCS,
182         VCS,
183         VCS2,
184         VCS3,
185         VCS4,
186 #define _VCS(n) (VCS + (n))
187         VECS,
188         VECS2
189 #define _VECS(n) (VECS + (n))
190 };
191
192 struct i915_priolist {
193         struct rb_node node;
194         struct list_head requests;
195         int priority;
196 };
197
198 struct st_preempt_hang {
199         struct completion completion;
200         bool inject_hang;
201 };
202
203 /**
204  * struct intel_engine_execlists - execlist submission queue and port state
205  *
206  * The struct intel_engine_execlists represents the combined logical state of
207  * driver and the hardware state for execlist mode of submission.
208  */
209 struct intel_engine_execlists {
210         /**
211          * @tasklet: softirq tasklet for bottom handler
212          */
213         struct tasklet_struct tasklet;
214
215         /**
216          * @default_priolist: priority list for I915_PRIORITY_NORMAL
217          */
218         struct i915_priolist default_priolist;
219
220         /**
221          * @no_priolist: priority lists disabled
222          */
223         bool no_priolist;
224
225         /**
226          * @submit_reg: gen-specific execlist submission register
227          * set to the ExecList Submission Port (elsp) register pre-Gen11 and to
228          * the ExecList Submission Queue Contents register array for Gen11+
229          */
230         u32 __iomem *submit_reg;
231
232         /**
233          * @ctrl_reg: the enhanced execlists control register, used to load the
234          * submit queue on the HW and to request preemptions to idle
235          */
236         u32 __iomem *ctrl_reg;
237
238         /**
239          * @port: execlist port states
240          *
241          * For each hardware ELSP (ExecList Submission Port) we keep
242          * track of the last request and the number of times we submitted
243          * that port to hw. We then count the number of times the hw reports
244          * a context completion or preemption. As only one context can
245          * be active on hw, we limit resubmission of context to port[0]. This
246          * is called Lite Restore, of the context.
247          */
248         struct execlist_port {
249                 /**
250                  * @request_count: combined request and submission count
251                  */
252                 struct i915_request *request_count;
253 #define EXECLIST_COUNT_BITS 2
254 #define port_request(p) ptr_mask_bits((p)->request_count, EXECLIST_COUNT_BITS)
255 #define port_count(p) ptr_unmask_bits((p)->request_count, EXECLIST_COUNT_BITS)
256 #define port_pack(rq, count) ptr_pack_bits(rq, count, EXECLIST_COUNT_BITS)
257 #define port_unpack(p, count) ptr_unpack_bits((p)->request_count, count, EXECLIST_COUNT_BITS)
258 #define port_set(p, packed) ((p)->request_count = (packed))
259 #define port_isset(p) ((p)->request_count)
260 #define port_index(p, execlists) ((p) - (execlists)->port)
261
262                 /**
263                  * @context_id: context ID for port
264                  */
265                 GEM_DEBUG_DECL(u32 context_id);
266
267 #define EXECLIST_MAX_PORTS 2
268         } port[EXECLIST_MAX_PORTS];
269
270         /**
271          * @active: is the HW active? We consider the HW as active after
272          * submitting any context for execution and until we have seen the
273          * last context completion event. After that, we do not expect any
274          * more events until we submit, and so can park the HW.
275          *
276          * As we have a small number of different sources from which we feed
277          * the HW, we track the state of each inside a single bitfield.
278          */
279         unsigned int active;
280 #define EXECLISTS_ACTIVE_USER 0
281 #define EXECLISTS_ACTIVE_PREEMPT 1
282 #define EXECLISTS_ACTIVE_HWACK 2
283
284         /**
285          * @port_mask: number of execlist ports - 1
286          */
287         unsigned int port_mask;
288
289         /**
290          * @queue_priority: Highest pending priority.
291          *
292          * When we add requests into the queue, or adjust the priority of
293          * executing requests, we compute the maximum priority of those
294          * pending requests. We can then use this value to determine if
295          * we need to preempt the executing requests to service the queue.
296          */
297         int queue_priority;
298
299         /**
300          * @queue: queue of requests, in priority lists
301          */
302         struct rb_root_cached queue;
303
304         /**
305          * @csb_read: control register for Context Switch buffer
306          *
307          * Note this register is always in mmio.
308          */
309         u32 __iomem *csb_read;
310
311         /**
312          * @csb_write: control register for Context Switch buffer
313          *
314          * Note this register may be either mmio or HWSP shadow.
315          */
316         u32 *csb_write;
317
318         /**
319          * @csb_status: status array for Context Switch buffer
320          *
321          * Note these register may be either mmio or HWSP shadow.
322          */
323         u32 *csb_status;
324
325         /**
326          * @preempt_complete_status: expected CSB upon completing preemption
327          */
328         u32 preempt_complete_status;
329
330         /**
331          * @csb_write_reset: reset value for CSB write pointer
332          *
333          * As the CSB write pointer maybe either in HWSP or as a field
334          * inside an mmio register, we want to reprogram it slightly
335          * differently to avoid later confusion.
336          */
337         u32 csb_write_reset;
338
339         /**
340          * @csb_head: context status buffer head
341          */
342         u8 csb_head;
343
344         I915_SELFTEST_DECLARE(struct st_preempt_hang preempt_hang;)
345 };
346
347 #define INTEL_ENGINE_CS_MAX_NAME 8
348
349 struct intel_engine_cs {
350         struct drm_i915_private *i915;
351         char name[INTEL_ENGINE_CS_MAX_NAME];
352
353         enum intel_engine_id id;
354         unsigned int hw_id;
355         unsigned int guc_id;
356
357         u8 uabi_id;
358         u8 uabi_class;
359
360         u8 class;
361         u8 instance;
362         u32 context_size;
363         u32 mmio_base;
364
365         struct intel_ring *buffer;
366
367         struct i915_timeline timeline;
368
369         struct drm_i915_gem_object *default_state;
370         void *pinned_default_state;
371
372         unsigned long irq_posted;
373 #define ENGINE_IRQ_BREADCRUMB 0
374
375         /* Rather than have every client wait upon all user interrupts,
376          * with the herd waking after every interrupt and each doing the
377          * heavyweight seqno dance, we delegate the task (of being the
378          * bottom-half of the user interrupt) to the first client. After
379          * every interrupt, we wake up one client, who does the heavyweight
380          * coherent seqno read and either goes back to sleep (if incomplete),
381          * or wakes up all the completed clients in parallel, before then
382          * transferring the bottom-half status to the next client in the queue.
383          *
384          * Compared to walking the entire list of waiters in a single dedicated
385          * bottom-half, we reduce the latency of the first waiter by avoiding
386          * a context switch, but incur additional coherent seqno reads when
387          * following the chain of request breadcrumbs. Since it is most likely
388          * that we have a single client waiting on each seqno, then reducing
389          * the overhead of waking that client is much preferred.
390          */
391         struct intel_breadcrumbs {
392                 spinlock_t irq_lock; /* protects irq_*; irqsafe */
393                 struct intel_wait *irq_wait; /* oldest waiter by retirement */
394
395                 spinlock_t rb_lock; /* protects the rb and wraps irq_lock */
396                 struct rb_root waiters; /* sorted by retirement, priority */
397                 struct list_head signals; /* sorted by retirement */
398                 struct task_struct *signaler; /* used for fence signalling */
399
400                 struct timer_list fake_irq; /* used after a missed interrupt */
401                 struct timer_list hangcheck; /* detect missed interrupts */
402
403                 unsigned int hangcheck_interrupts;
404                 unsigned int irq_enabled;
405                 unsigned int irq_count;
406
407                 bool irq_armed : 1;
408                 I915_SELFTEST_DECLARE(bool mock : 1);
409         } breadcrumbs;
410
411         struct {
412                 /**
413                  * @enable: Bitmask of enable sample events on this engine.
414                  *
415                  * Bits correspond to sample event types, for instance
416                  * I915_SAMPLE_QUEUED is bit 0 etc.
417                  */
418                 u32 enable;
419                 /**
420                  * @enable_count: Reference count for the enabled samplers.
421                  *
422                  * Index number corresponds to the bit number from @enable.
423                  */
424                 unsigned int enable_count[I915_PMU_SAMPLE_BITS];
425                 /**
426                  * @sample: Counter values for sampling events.
427                  *
428                  * Our internal timer stores the current counters in this field.
429                  */
430 #define I915_ENGINE_SAMPLE_MAX (I915_SAMPLE_SEMA + 1)
431                 struct i915_pmu_sample sample[I915_ENGINE_SAMPLE_MAX];
432         } pmu;
433
434         /*
435          * A pool of objects to use as shadow copies of client batch buffers
436          * when the command parser is enabled. Prevents the client from
437          * modifying the batch contents after software parsing.
438          */
439         struct i915_gem_batch_pool batch_pool;
440
441         struct intel_hw_status_page status_page;
442         struct i915_ctx_workarounds wa_ctx;
443         struct i915_vma *scratch;
444
445         u32             irq_keep_mask; /* always keep these interrupts */
446         u32             irq_enable_mask; /* bitmask to enable ring interrupt */
447         void            (*irq_enable)(struct intel_engine_cs *engine);
448         void            (*irq_disable)(struct intel_engine_cs *engine);
449
450         int             (*init_hw)(struct intel_engine_cs *engine);
451
452         struct {
453                 struct i915_request *(*prepare)(struct intel_engine_cs *engine);
454                 void (*reset)(struct intel_engine_cs *engine,
455                               struct i915_request *rq);
456                 void (*finish)(struct intel_engine_cs *engine);
457         } reset;
458
459         void            (*park)(struct intel_engine_cs *engine);
460         void            (*unpark)(struct intel_engine_cs *engine);
461
462         void            (*set_default_submission)(struct intel_engine_cs *engine);
463
464         struct intel_context *(*context_pin)(struct intel_engine_cs *engine,
465                                              struct i915_gem_context *ctx);
466
467         int             (*request_alloc)(struct i915_request *rq);
468         int             (*init_context)(struct i915_request *rq);
469
470         int             (*emit_flush)(struct i915_request *request, u32 mode);
471 #define EMIT_INVALIDATE BIT(0)
472 #define EMIT_FLUSH      BIT(1)
473 #define EMIT_BARRIER    (EMIT_INVALIDATE | EMIT_FLUSH)
474         int             (*emit_bb_start)(struct i915_request *rq,
475                                          u64 offset, u32 length,
476                                          unsigned int dispatch_flags);
477 #define I915_DISPATCH_SECURE BIT(0)
478 #define I915_DISPATCH_PINNED BIT(1)
479 #define I915_DISPATCH_RS     BIT(2)
480         void            (*emit_breadcrumb)(struct i915_request *rq, u32 *cs);
481         int             emit_breadcrumb_sz;
482
483         /* Pass the request to the hardware queue (e.g. directly into
484          * the legacy ringbuffer or to the end of an execlist).
485          *
486          * This is called from an atomic context with irqs disabled; must
487          * be irq safe.
488          */
489         void            (*submit_request)(struct i915_request *rq);
490
491         /* Call when the priority on a request has changed and it and its
492          * dependencies may need rescheduling. Note the request itself may
493          * not be ready to run!
494          *
495          * Called under the struct_mutex.
496          */
497         void            (*schedule)(struct i915_request *request,
498                                     const struct i915_sched_attr *attr);
499
500         /*
501          * Cancel all requests on the hardware, or queued for execution.
502          * This should only cancel the ready requests that have been
503          * submitted to the engine (via the engine->submit_request callback).
504          * This is called when marking the device as wedged.
505          */
506         void            (*cancel_requests)(struct intel_engine_cs *engine);
507
508         /* Some chipsets are not quite as coherent as advertised and need
509          * an expensive kick to force a true read of the up-to-date seqno.
510          * However, the up-to-date seqno is not always required and the last
511          * seen value is good enough. Note that the seqno will always be
512          * monotonic, even if not coherent.
513          */
514         void            (*irq_seqno_barrier)(struct intel_engine_cs *engine);
515         void            (*cleanup)(struct intel_engine_cs *engine);
516
517         /* GEN8 signal/wait table - never trust comments!
518          *        signal to     signal to    signal to   signal to      signal to
519          *          RCS            VCS          BCS        VECS          VCS2
520          *      --------------------------------------------------------------------
521          *  RCS | NOP (0x00) | VCS (0x08) | BCS (0x10) | VECS (0x18) | VCS2 (0x20) |
522          *      |-------------------------------------------------------------------
523          *  VCS | RCS (0x28) | NOP (0x30) | BCS (0x38) | VECS (0x40) | VCS2 (0x48) |
524          *      |-------------------------------------------------------------------
525          *  BCS | RCS (0x50) | VCS (0x58) | NOP (0x60) | VECS (0x68) | VCS2 (0x70) |
526          *      |-------------------------------------------------------------------
527          * VECS | RCS (0x78) | VCS (0x80) | BCS (0x88) |  NOP (0x90) | VCS2 (0x98) |
528          *      |-------------------------------------------------------------------
529          * VCS2 | RCS (0xa0) | VCS (0xa8) | BCS (0xb0) | VECS (0xb8) | NOP  (0xc0) |
530          *      |-------------------------------------------------------------------
531          *
532          * Generalization:
533          *  f(x, y) := (x->id * NUM_RINGS * seqno_size) + (seqno_size * y->id)
534          *  ie. transpose of g(x, y)
535          *
536          *       sync from      sync from    sync from    sync from     sync from
537          *          RCS            VCS          BCS        VECS          VCS2
538          *      --------------------------------------------------------------------
539          *  RCS | NOP (0x00) | VCS (0x28) | BCS (0x50) | VECS (0x78) | VCS2 (0xa0) |
540          *      |-------------------------------------------------------------------
541          *  VCS | RCS (0x08) | NOP (0x30) | BCS (0x58) | VECS (0x80) | VCS2 (0xa8) |
542          *      |-------------------------------------------------------------------
543          *  BCS | RCS (0x10) | VCS (0x38) | NOP (0x60) | VECS (0x88) | VCS2 (0xb0) |
544          *      |-------------------------------------------------------------------
545          * VECS | RCS (0x18) | VCS (0x40) | BCS (0x68) |  NOP (0x90) | VCS2 (0xb8) |
546          *      |-------------------------------------------------------------------
547          * VCS2 | RCS (0x20) | VCS (0x48) | BCS (0x70) | VECS (0x98) |  NOP (0xc0) |
548          *      |-------------------------------------------------------------------
549          *
550          * Generalization:
551          *  g(x, y) := (y->id * NUM_RINGS * seqno_size) + (seqno_size * x->id)
552          *  ie. transpose of f(x, y)
553          */
554         struct {
555 #define GEN6_SEMAPHORE_LAST     VECS_HW
556 #define GEN6_NUM_SEMAPHORES     (GEN6_SEMAPHORE_LAST + 1)
557 #define GEN6_SEMAPHORES_MASK    GENMASK(GEN6_SEMAPHORE_LAST, 0)
558                 struct {
559                         /* our mbox written by others */
560                         u32             wait[GEN6_NUM_SEMAPHORES];
561                         /* mboxes this ring signals to */
562                         i915_reg_t      signal[GEN6_NUM_SEMAPHORES];
563                 } mbox;
564
565                 /* AKA wait() */
566                 int     (*sync_to)(struct i915_request *rq,
567                                    struct i915_request *signal);
568                 u32     *(*signal)(struct i915_request *rq, u32 *cs);
569         } semaphore;
570
571         struct intel_engine_execlists execlists;
572
573         /* Contexts are pinned whilst they are active on the GPU. The last
574          * context executed remains active whilst the GPU is idle - the
575          * switch away and write to the context object only occurs on the
576          * next execution.  Contexts are only unpinned on retirement of the
577          * following request ensuring that we can always write to the object
578          * on the context switch even after idling. Across suspend, we switch
579          * to the kernel context and trash it as the save may not happen
580          * before the hardware is powered down.
581          */
582         struct intel_context *last_retired_context;
583
584         /* status_notifier: list of callbacks for context-switch changes */
585         struct atomic_notifier_head context_status_notifier;
586
587         struct intel_engine_hangcheck hangcheck;
588
589 #define I915_ENGINE_NEEDS_CMD_PARSER BIT(0)
590 #define I915_ENGINE_SUPPORTS_STATS   BIT(1)
591 #define I915_ENGINE_HAS_PREEMPTION   BIT(2)
592         unsigned int flags;
593
594         /*
595          * Table of commands the command parser needs to know about
596          * for this engine.
597          */
598         DECLARE_HASHTABLE(cmd_hash, I915_CMD_HASH_ORDER);
599
600         /*
601          * Table of registers allowed in commands that read/write registers.
602          */
603         const struct drm_i915_reg_table *reg_tables;
604         int reg_table_count;
605
606         /*
607          * Returns the bitmask for the length field of the specified command.
608          * Return 0 for an unrecognized/invalid command.
609          *
610          * If the command parser finds an entry for a command in the engine's
611          * cmd_tables, it gets the command's length based on the table entry.
612          * If not, it calls this function to determine the per-engine length
613          * field encoding for the command (i.e. different opcode ranges use
614          * certain bits to encode the command length in the header).
615          */
616         u32 (*get_cmd_length_mask)(u32 cmd_header);
617
618         struct {
619                 /**
620                  * @lock: Lock protecting the below fields.
621                  */
622                 seqlock_t lock;
623                 /**
624                  * @enabled: Reference count indicating number of listeners.
625                  */
626                 unsigned int enabled;
627                 /**
628                  * @active: Number of contexts currently scheduled in.
629                  */
630                 unsigned int active;
631                 /**
632                  * @enabled_at: Timestamp when busy stats were enabled.
633                  */
634                 ktime_t enabled_at;
635                 /**
636                  * @start: Timestamp of the last idle to active transition.
637                  *
638                  * Idle is defined as active == 0, active is active > 0.
639                  */
640                 ktime_t start;
641                 /**
642                  * @total: Total time this engine was busy.
643                  *
644                  * Accumulated time not counting the most recent block in cases
645                  * where engine is currently busy (active > 0).
646                  */
647                 ktime_t total;
648         } stats;
649 };
650
651 static inline bool
652 intel_engine_needs_cmd_parser(const struct intel_engine_cs *engine)
653 {
654         return engine->flags & I915_ENGINE_NEEDS_CMD_PARSER;
655 }
656
657 static inline bool
658 intel_engine_supports_stats(const struct intel_engine_cs *engine)
659 {
660         return engine->flags & I915_ENGINE_SUPPORTS_STATS;
661 }
662
663 static inline bool
664 intel_engine_has_preemption(const struct intel_engine_cs *engine)
665 {
666         return engine->flags & I915_ENGINE_HAS_PREEMPTION;
667 }
668
669 static inline bool __execlists_need_preempt(int prio, int last)
670 {
671         return prio > max(0, last);
672 }
673
674 static inline void
675 execlists_set_active(struct intel_engine_execlists *execlists,
676                      unsigned int bit)
677 {
678         __set_bit(bit, (unsigned long *)&execlists->active);
679 }
680
681 static inline bool
682 execlists_set_active_once(struct intel_engine_execlists *execlists,
683                           unsigned int bit)
684 {
685         return !__test_and_set_bit(bit, (unsigned long *)&execlists->active);
686 }
687
688 static inline void
689 execlists_clear_active(struct intel_engine_execlists *execlists,
690                        unsigned int bit)
691 {
692         __clear_bit(bit, (unsigned long *)&execlists->active);
693 }
694
695 static inline void
696 execlists_clear_all_active(struct intel_engine_execlists *execlists)
697 {
698         execlists->active = 0;
699 }
700
701 static inline bool
702 execlists_is_active(const struct intel_engine_execlists *execlists,
703                     unsigned int bit)
704 {
705         return test_bit(bit, (unsigned long *)&execlists->active);
706 }
707
708 void execlists_user_begin(struct intel_engine_execlists *execlists,
709                           const struct execlist_port *port);
710 void execlists_user_end(struct intel_engine_execlists *execlists);
711
712 void
713 execlists_cancel_port_requests(struct intel_engine_execlists * const execlists);
714
715 void
716 execlists_unwind_incomplete_requests(struct intel_engine_execlists *execlists);
717
718 static inline unsigned int
719 execlists_num_ports(const struct intel_engine_execlists * const execlists)
720 {
721         return execlists->port_mask + 1;
722 }
723
724 static inline struct execlist_port *
725 execlists_port_complete(struct intel_engine_execlists * const execlists,
726                         struct execlist_port * const port)
727 {
728         const unsigned int m = execlists->port_mask;
729
730         GEM_BUG_ON(port_index(port, execlists) != 0);
731         GEM_BUG_ON(!execlists_is_active(execlists, EXECLISTS_ACTIVE_USER));
732
733         memmove(port, port + 1, m * sizeof(struct execlist_port));
734         memset(port + m, 0, sizeof(struct execlist_port));
735
736         return port;
737 }
738
739 static inline unsigned int
740 intel_engine_flag(const struct intel_engine_cs *engine)
741 {
742         return BIT(engine->id);
743 }
744
745 static inline u32
746 intel_read_status_page(const struct intel_engine_cs *engine, int reg)
747 {
748         /* Ensure that the compiler doesn't optimize away the load. */
749         return READ_ONCE(engine->status_page.page_addr[reg]);
750 }
751
752 static inline void
753 intel_write_status_page(struct intel_engine_cs *engine, int reg, u32 value)
754 {
755         /* Writing into the status page should be done sparingly. Since
756          * we do when we are uncertain of the device state, we take a bit
757          * of extra paranoia to try and ensure that the HWS takes the value
758          * we give and that it doesn't end up trapped inside the CPU!
759          */
760         if (static_cpu_has(X86_FEATURE_CLFLUSH)) {
761                 mb();
762                 clflush(&engine->status_page.page_addr[reg]);
763                 engine->status_page.page_addr[reg] = value;
764                 clflush(&engine->status_page.page_addr[reg]);
765                 mb();
766         } else {
767                 WRITE_ONCE(engine->status_page.page_addr[reg], value);
768         }
769 }
770
771 /*
772  * Reads a dword out of the status page, which is written to from the command
773  * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
774  * MI_STORE_DATA_IMM.
775  *
776  * The following dwords have a reserved meaning:
777  * 0x00: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
778  * 0x04: ring 0 head pointer
779  * 0x05: ring 1 head pointer (915-class)
780  * 0x06: ring 2 head pointer (915-class)
781  * 0x10-0x1b: Context status DWords (GM45)
782  * 0x1f: Last written status offset. (GM45)
783  * 0x20-0x2f: Reserved (Gen6+)
784  *
785  * The area from dword 0x30 to 0x3ff is available for driver usage.
786  */
787 #define I915_GEM_HWS_INDEX              0x30
788 #define I915_GEM_HWS_INDEX_ADDR (I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
789 #define I915_GEM_HWS_PREEMPT_INDEX      0x32
790 #define I915_GEM_HWS_PREEMPT_ADDR (I915_GEM_HWS_PREEMPT_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
791 #define I915_GEM_HWS_SCRATCH_INDEX      0x40
792 #define I915_GEM_HWS_SCRATCH_ADDR (I915_GEM_HWS_SCRATCH_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
793
794 #define I915_HWS_CSB_BUF0_INDEX         0x10
795 #define I915_HWS_CSB_WRITE_INDEX        0x1f
796 #define CNL_HWS_CSB_WRITE_INDEX         0x2f
797
798 struct intel_ring *
799 intel_engine_create_ring(struct intel_engine_cs *engine,
800                          struct i915_timeline *timeline,
801                          int size);
802 int intel_ring_pin(struct intel_ring *ring,
803                    struct drm_i915_private *i915,
804                    unsigned int offset_bias);
805 void intel_ring_reset(struct intel_ring *ring, u32 tail);
806 unsigned int intel_ring_update_space(struct intel_ring *ring);
807 void intel_ring_unpin(struct intel_ring *ring);
808 void intel_ring_free(struct intel_ring *ring);
809
810 void intel_engine_stop(struct intel_engine_cs *engine);
811 void intel_engine_cleanup(struct intel_engine_cs *engine);
812
813 void intel_legacy_submission_resume(struct drm_i915_private *dev_priv);
814
815 int __must_check intel_ring_cacheline_align(struct i915_request *rq);
816
817 int intel_ring_wait_for_space(struct intel_ring *ring, unsigned int bytes);
818 u32 __must_check *intel_ring_begin(struct i915_request *rq, unsigned int n);
819
820 static inline void intel_ring_advance(struct i915_request *rq, u32 *cs)
821 {
822         /* Dummy function.
823          *
824          * This serves as a placeholder in the code so that the reader
825          * can compare against the preceding intel_ring_begin() and
826          * check that the number of dwords emitted matches the space
827          * reserved for the command packet (i.e. the value passed to
828          * intel_ring_begin()).
829          */
830         GEM_BUG_ON((rq->ring->vaddr + rq->ring->emit) != cs);
831 }
832
833 static inline u32 intel_ring_wrap(const struct intel_ring *ring, u32 pos)
834 {
835         return pos & (ring->size - 1);
836 }
837
838 static inline bool
839 intel_ring_offset_valid(const struct intel_ring *ring,
840                         unsigned int pos)
841 {
842         if (pos & -ring->size) /* must be strictly within the ring */
843                 return false;
844
845         if (!IS_ALIGNED(pos, 8)) /* must be qword aligned */
846                 return false;
847
848         return true;
849 }
850
851 static inline u32 intel_ring_offset(const struct i915_request *rq, void *addr)
852 {
853         /* Don't write ring->size (equivalent to 0) as that hangs some GPUs. */
854         u32 offset = addr - rq->ring->vaddr;
855         GEM_BUG_ON(offset > rq->ring->size);
856         return intel_ring_wrap(rq->ring, offset);
857 }
858
859 static inline void
860 assert_ring_tail_valid(const struct intel_ring *ring, unsigned int tail)
861 {
862         GEM_BUG_ON(!intel_ring_offset_valid(ring, tail));
863
864         /*
865          * "Ring Buffer Use"
866          *      Gen2 BSpec "1. Programming Environment" / 1.4.4.6
867          *      Gen3 BSpec "1c Memory Interface Functions" / 2.3.4.5
868          *      Gen4+ BSpec "1c Memory Interface and Command Stream" / 5.3.4.5
869          * "If the Ring Buffer Head Pointer and the Tail Pointer are on the
870          * same cacheline, the Head Pointer must not be greater than the Tail
871          * Pointer."
872          *
873          * We use ring->head as the last known location of the actual RING_HEAD,
874          * it may have advanced but in the worst case it is equally the same
875          * as ring->head and so we should never program RING_TAIL to advance
876          * into the same cacheline as ring->head.
877          */
878 #define cacheline(a) round_down(a, CACHELINE_BYTES)
879         GEM_BUG_ON(cacheline(tail) == cacheline(ring->head) &&
880                    tail < ring->head);
881 #undef cacheline
882 }
883
884 static inline unsigned int
885 intel_ring_set_tail(struct intel_ring *ring, unsigned int tail)
886 {
887         /* Whilst writes to the tail are strictly order, there is no
888          * serialisation between readers and the writers. The tail may be
889          * read by i915_request_retire() just as it is being updated
890          * by execlists, as although the breadcrumb is complete, the context
891          * switch hasn't been seen.
892          */
893         assert_ring_tail_valid(ring, tail);
894         ring->tail = tail;
895         return tail;
896 }
897
898 void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno);
899
900 void intel_engine_setup_common(struct intel_engine_cs *engine);
901 int intel_engine_init_common(struct intel_engine_cs *engine);
902 void intel_engine_cleanup_common(struct intel_engine_cs *engine);
903
904 int intel_engine_create_scratch(struct intel_engine_cs *engine,
905                                 unsigned int size);
906 void intel_engine_cleanup_scratch(struct intel_engine_cs *engine);
907
908 int intel_init_render_ring_buffer(struct intel_engine_cs *engine);
909 int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine);
910 int intel_init_blt_ring_buffer(struct intel_engine_cs *engine);
911 int intel_init_vebox_ring_buffer(struct intel_engine_cs *engine);
912
913 int intel_engine_stop_cs(struct intel_engine_cs *engine);
914
915 u64 intel_engine_get_active_head(const struct intel_engine_cs *engine);
916 u64 intel_engine_get_last_batch_head(const struct intel_engine_cs *engine);
917
918 static inline u32 intel_engine_get_seqno(struct intel_engine_cs *engine)
919 {
920         return intel_read_status_page(engine, I915_GEM_HWS_INDEX);
921 }
922
923 static inline u32 intel_engine_last_submit(struct intel_engine_cs *engine)
924 {
925         /* We are only peeking at the tail of the submit queue (and not the
926          * queue itself) in order to gain a hint as to the current active
927          * state of the engine. Callers are not expected to be taking
928          * engine->timeline->lock, nor are they expected to be concerned
929          * wtih serialising this hint with anything, so document it as
930          * a hint and nothing more.
931          */
932         return READ_ONCE(engine->timeline.seqno);
933 }
934
935 void intel_engine_get_instdone(struct intel_engine_cs *engine,
936                                struct intel_instdone *instdone);
937
938 /*
939  * Arbitrary size for largest possible 'add request' sequence. The code paths
940  * are complex and variable. Empirical measurement shows that the worst case
941  * is BDW at 192 bytes (6 + 6 + 36 dwords), then ILK at 136 bytes. However,
942  * we need to allocate double the largest single packet within that emission
943  * to account for tail wraparound (so 6 + 6 + 72 dwords for BDW).
944  */
945 #define MIN_SPACE_FOR_ADD_REQUEST 336
946
947 static inline u32 intel_hws_seqno_address(struct intel_engine_cs *engine)
948 {
949         return engine->status_page.ggtt_offset + I915_GEM_HWS_INDEX_ADDR;
950 }
951
952 static inline u32 intel_hws_preempt_done_address(struct intel_engine_cs *engine)
953 {
954         return engine->status_page.ggtt_offset + I915_GEM_HWS_PREEMPT_ADDR;
955 }
956
957 /* intel_breadcrumbs.c -- user interrupt bottom-half for waiters */
958 int intel_engine_init_breadcrumbs(struct intel_engine_cs *engine);
959
960 static inline void intel_wait_init(struct intel_wait *wait)
961 {
962         wait->tsk = current;
963         wait->request = NULL;
964 }
965
966 static inline void intel_wait_init_for_seqno(struct intel_wait *wait, u32 seqno)
967 {
968         wait->tsk = current;
969         wait->seqno = seqno;
970 }
971
972 static inline bool intel_wait_has_seqno(const struct intel_wait *wait)
973 {
974         return wait->seqno;
975 }
976
977 static inline bool
978 intel_wait_update_seqno(struct intel_wait *wait, u32 seqno)
979 {
980         wait->seqno = seqno;
981         return intel_wait_has_seqno(wait);
982 }
983
984 static inline bool
985 intel_wait_update_request(struct intel_wait *wait,
986                           const struct i915_request *rq)
987 {
988         return intel_wait_update_seqno(wait, i915_request_global_seqno(rq));
989 }
990
991 static inline bool
992 intel_wait_check_seqno(const struct intel_wait *wait, u32 seqno)
993 {
994         return wait->seqno == seqno;
995 }
996
997 static inline bool
998 intel_wait_check_request(const struct intel_wait *wait,
999                          const struct i915_request *rq)
1000 {
1001         return intel_wait_check_seqno(wait, i915_request_global_seqno(rq));
1002 }
1003
1004 static inline bool intel_wait_complete(const struct intel_wait *wait)
1005 {
1006         return RB_EMPTY_NODE(&wait->node);
1007 }
1008
1009 bool intel_engine_add_wait(struct intel_engine_cs *engine,
1010                            struct intel_wait *wait);
1011 void intel_engine_remove_wait(struct intel_engine_cs *engine,
1012                               struct intel_wait *wait);
1013 bool intel_engine_enable_signaling(struct i915_request *request, bool wakeup);
1014 void intel_engine_cancel_signaling(struct i915_request *request);
1015
1016 static inline bool intel_engine_has_waiter(const struct intel_engine_cs *engine)
1017 {
1018         return READ_ONCE(engine->breadcrumbs.irq_wait);
1019 }
1020
1021 unsigned int intel_engine_wakeup(struct intel_engine_cs *engine);
1022 #define ENGINE_WAKEUP_WAITER BIT(0)
1023 #define ENGINE_WAKEUP_ASLEEP BIT(1)
1024
1025 void intel_engine_pin_breadcrumbs_irq(struct intel_engine_cs *engine);
1026 void intel_engine_unpin_breadcrumbs_irq(struct intel_engine_cs *engine);
1027
1028 void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine);
1029 void intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine);
1030
1031 void intel_engine_reset_breadcrumbs(struct intel_engine_cs *engine);
1032 void intel_engine_fini_breadcrumbs(struct intel_engine_cs *engine);
1033
1034 static inline u32 *gen8_emit_pipe_control(u32 *batch, u32 flags, u32 offset)
1035 {
1036         memset(batch, 0, 6 * sizeof(u32));
1037
1038         batch[0] = GFX_OP_PIPE_CONTROL(6);
1039         batch[1] = flags;
1040         batch[2] = offset;
1041
1042         return batch + 6;
1043 }
1044
1045 static inline u32 *
1046 gen8_emit_ggtt_write_rcs(u32 *cs, u32 value, u32 gtt_offset)
1047 {
1048         /* We're using qword write, offset should be aligned to 8 bytes. */
1049         GEM_BUG_ON(!IS_ALIGNED(gtt_offset, 8));
1050
1051         /* w/a for post sync ops following a GPGPU operation we
1052          * need a prior CS_STALL, which is emitted by the flush
1053          * following the batch.
1054          */
1055         *cs++ = GFX_OP_PIPE_CONTROL(6);
1056         *cs++ = PIPE_CONTROL_GLOBAL_GTT_IVB | PIPE_CONTROL_CS_STALL |
1057                 PIPE_CONTROL_QW_WRITE;
1058         *cs++ = gtt_offset;
1059         *cs++ = 0;
1060         *cs++ = value;
1061         /* We're thrashing one dword of HWS. */
1062         *cs++ = 0;
1063
1064         return cs;
1065 }
1066
1067 static inline u32 *
1068 gen8_emit_ggtt_write(u32 *cs, u32 value, u32 gtt_offset)
1069 {
1070         /* w/a: bit 5 needs to be zero for MI_FLUSH_DW address. */
1071         GEM_BUG_ON(gtt_offset & (1 << 5));
1072         /* Offset should be aligned to 8 bytes for both (QW/DW) write types */
1073         GEM_BUG_ON(!IS_ALIGNED(gtt_offset, 8));
1074
1075         *cs++ = (MI_FLUSH_DW + 1) | MI_FLUSH_DW_OP_STOREDW;
1076         *cs++ = gtt_offset | MI_FLUSH_DW_USE_GTT;
1077         *cs++ = 0;
1078         *cs++ = value;
1079
1080         return cs;
1081 }
1082
1083 void intel_engines_sanitize(struct drm_i915_private *i915);
1084
1085 bool intel_engine_is_idle(struct intel_engine_cs *engine);
1086 bool intel_engines_are_idle(struct drm_i915_private *dev_priv);
1087
1088 bool intel_engine_has_kernel_context(const struct intel_engine_cs *engine);
1089 void intel_engine_lost_context(struct intel_engine_cs *engine);
1090
1091 void intel_engines_park(struct drm_i915_private *i915);
1092 void intel_engines_unpark(struct drm_i915_private *i915);
1093
1094 void intel_engines_reset_default_submission(struct drm_i915_private *i915);
1095 unsigned int intel_engines_has_context_isolation(struct drm_i915_private *i915);
1096
1097 bool intel_engine_can_store_dword(struct intel_engine_cs *engine);
1098
1099 __printf(3, 4)
1100 void intel_engine_dump(struct intel_engine_cs *engine,
1101                        struct drm_printer *m,
1102                        const char *header, ...);
1103
1104 struct intel_engine_cs *
1105 intel_engine_lookup_user(struct drm_i915_private *i915, u8 class, u8 instance);
1106
1107 static inline void intel_engine_context_in(struct intel_engine_cs *engine)
1108 {
1109         unsigned long flags;
1110
1111         if (READ_ONCE(engine->stats.enabled) == 0)
1112                 return;
1113
1114         write_seqlock_irqsave(&engine->stats.lock, flags);
1115
1116         if (engine->stats.enabled > 0) {
1117                 if (engine->stats.active++ == 0)
1118                         engine->stats.start = ktime_get();
1119                 GEM_BUG_ON(engine->stats.active == 0);
1120         }
1121
1122         write_sequnlock_irqrestore(&engine->stats.lock, flags);
1123 }
1124
1125 static inline void intel_engine_context_out(struct intel_engine_cs *engine)
1126 {
1127         unsigned long flags;
1128
1129         if (READ_ONCE(engine->stats.enabled) == 0)
1130                 return;
1131
1132         write_seqlock_irqsave(&engine->stats.lock, flags);
1133
1134         if (engine->stats.enabled > 0) {
1135                 ktime_t last;
1136
1137                 if (engine->stats.active && --engine->stats.active == 0) {
1138                         /*
1139                          * Decrement the active context count and in case GPU
1140                          * is now idle add up to the running total.
1141                          */
1142                         last = ktime_sub(ktime_get(), engine->stats.start);
1143
1144                         engine->stats.total = ktime_add(engine->stats.total,
1145                                                         last);
1146                 } else if (engine->stats.active == 0) {
1147                         /*
1148                          * After turning on engine stats, context out might be
1149                          * the first event in which case we account from the
1150                          * time stats gathering was turned on.
1151                          */
1152                         last = ktime_sub(ktime_get(), engine->stats.enabled_at);
1153
1154                         engine->stats.total = ktime_add(engine->stats.total,
1155                                                         last);
1156                 }
1157         }
1158
1159         write_sequnlock_irqrestore(&engine->stats.lock, flags);
1160 }
1161
1162 int intel_enable_engine_stats(struct intel_engine_cs *engine);
1163 void intel_disable_engine_stats(struct intel_engine_cs *engine);
1164
1165 ktime_t intel_engine_get_busy_time(struct intel_engine_cs *engine);
1166
1167 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
1168
1169 static inline bool inject_preempt_hang(struct intel_engine_execlists *execlists)
1170 {
1171         if (!execlists->preempt_hang.inject_hang)
1172                 return false;
1173
1174         complete(&execlists->preempt_hang.completion);
1175         return true;
1176 }
1177
1178 #else
1179
1180 static inline bool inject_preempt_hang(struct intel_engine_execlists *execlists)
1181 {
1182         return false;
1183 }
1184
1185 #endif
1186
1187 #endif /* _INTEL_RINGBUFFER_H_ */