]> Git Repo - linux.git/blob - drivers/gpu/drm/i915/intel_ringbuffer.h
drm/i915: Update DRIVER_DATE to 20171117
[linux.git] / drivers / gpu / drm / i915 / intel_ringbuffer.h
1 #ifndef _INTEL_RINGBUFFER_H_
2 #define _INTEL_RINGBUFFER_H_
3
4 #include <linux/hashtable.h>
5 #include "i915_gem_batch_pool.h"
6 #include "i915_gem_request.h"
7 #include "i915_gem_timeline.h"
8 #include "i915_selftest.h"
9
10 struct drm_printer;
11
12 #define I915_CMD_HASH_ORDER 9
13
14 /* Early gen2 devices have a cacheline of just 32 bytes, using 64 is overkill,
15  * but keeps the logic simple. Indeed, the whole purpose of this macro is just
16  * to give some inclination as to some of the magic values used in the various
17  * workarounds!
18  */
19 #define CACHELINE_BYTES 64
20 #define CACHELINE_DWORDS (CACHELINE_BYTES / sizeof(uint32_t))
21
22 struct intel_hw_status_page {
23         struct i915_vma *vma;
24         u32 *page_addr;
25         u32 ggtt_offset;
26 };
27
28 #define I915_READ_TAIL(engine) I915_READ(RING_TAIL((engine)->mmio_base))
29 #define I915_WRITE_TAIL(engine, val) I915_WRITE(RING_TAIL((engine)->mmio_base), val)
30
31 #define I915_READ_START(engine) I915_READ(RING_START((engine)->mmio_base))
32 #define I915_WRITE_START(engine, val) I915_WRITE(RING_START((engine)->mmio_base), val)
33
34 #define I915_READ_HEAD(engine)  I915_READ(RING_HEAD((engine)->mmio_base))
35 #define I915_WRITE_HEAD(engine, val) I915_WRITE(RING_HEAD((engine)->mmio_base), val)
36
37 #define I915_READ_CTL(engine) I915_READ(RING_CTL((engine)->mmio_base))
38 #define I915_WRITE_CTL(engine, val) I915_WRITE(RING_CTL((engine)->mmio_base), val)
39
40 #define I915_READ_IMR(engine) I915_READ(RING_IMR((engine)->mmio_base))
41 #define I915_WRITE_IMR(engine, val) I915_WRITE(RING_IMR((engine)->mmio_base), val)
42
43 #define I915_READ_MODE(engine) I915_READ(RING_MI_MODE((engine)->mmio_base))
44 #define I915_WRITE_MODE(engine, val) I915_WRITE(RING_MI_MODE((engine)->mmio_base), val)
45
46 /* seqno size is actually only a uint32, but since we plan to use MI_FLUSH_DW to
47  * do the writes, and that must have qw aligned offsets, simply pretend it's 8b.
48  */
49 #define gen8_semaphore_seqno_size sizeof(uint64_t)
50 #define GEN8_SEMAPHORE_OFFSET(__from, __to)                          \
51         (((__from) * I915_NUM_ENGINES  + (__to)) * gen8_semaphore_seqno_size)
52 #define GEN8_SIGNAL_OFFSET(__ring, to)                       \
53         (dev_priv->semaphore->node.start + \
54          GEN8_SEMAPHORE_OFFSET((__ring)->id, (to)))
55 #define GEN8_WAIT_OFFSET(__ring, from)                       \
56         (dev_priv->semaphore->node.start + \
57          GEN8_SEMAPHORE_OFFSET(from, (__ring)->id))
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 3
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)
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 drm_i915_gem_request *active_request;
127         bool stalled;
128 };
129
130 struct intel_ring {
131         struct i915_vma *vma;
132         void *vaddr;
133
134         struct list_head request_list;
135
136         u32 head;
137         u32 tail;
138         u32 emit;
139
140         u32 space;
141         u32 size;
142         u32 effective_size;
143 };
144
145 struct i915_gem_context;
146 struct drm_i915_reg_table;
147
148 /*
149  * we use a single page to load ctx workarounds so all of these
150  * values are referred in terms of dwords
151  *
152  * struct i915_wa_ctx_bb:
153  *  offset: specifies batch starting position, also helpful in case
154  *    if we want to have multiple batches at different offsets based on
155  *    some criteria. It is not a requirement at the moment but provides
156  *    an option for future use.
157  *  size: size of the batch in DWORDS
158  */
159 struct i915_ctx_workarounds {
160         struct i915_wa_ctx_bb {
161                 u32 offset;
162                 u32 size;
163         } indirect_ctx, per_ctx;
164         struct i915_vma *vma;
165 };
166
167 struct drm_i915_gem_request;
168
169 /*
170  * Engine IDs definitions.
171  * Keep instances of the same type engine together.
172  */
173 enum intel_engine_id {
174         RCS = 0,
175         BCS,
176         VCS,
177         VCS2,
178 #define _VCS(n) (VCS + (n))
179         VECS
180 };
181
182 struct i915_priolist {
183         struct rb_node node;
184         struct list_head requests;
185         int priority;
186 };
187
188 /**
189  * struct intel_engine_execlists - execlist submission queue and port state
190  *
191  * The struct intel_engine_execlists represents the combined logical state of
192  * driver and the hardware state for execlist mode of submission.
193  */
194 struct intel_engine_execlists {
195         /**
196          * @tasklet: softirq tasklet for bottom handler
197          */
198         struct tasklet_struct tasklet;
199
200         /**
201          * @default_priolist: priority list for I915_PRIORITY_NORMAL
202          */
203         struct i915_priolist default_priolist;
204
205         /**
206          * @no_priolist: priority lists disabled
207          */
208         bool no_priolist;
209
210         /**
211          * @port: execlist port states
212          *
213          * For each hardware ELSP (ExecList Submission Port) we keep
214          * track of the last request and the number of times we submitted
215          * that port to hw. We then count the number of times the hw reports
216          * a context completion or preemption. As only one context can
217          * be active on hw, we limit resubmission of context to port[0]. This
218          * is called Lite Restore, of the context.
219          */
220         struct execlist_port {
221                 /**
222                  * @request_count: combined request and submission count
223                  */
224                 struct drm_i915_gem_request *request_count;
225 #define EXECLIST_COUNT_BITS 2
226 #define port_request(p) ptr_mask_bits((p)->request_count, EXECLIST_COUNT_BITS)
227 #define port_count(p) ptr_unmask_bits((p)->request_count, EXECLIST_COUNT_BITS)
228 #define port_pack(rq, count) ptr_pack_bits(rq, count, EXECLIST_COUNT_BITS)
229 #define port_unpack(p, count) ptr_unpack_bits((p)->request_count, count, EXECLIST_COUNT_BITS)
230 #define port_set(p, packed) ((p)->request_count = (packed))
231 #define port_isset(p) ((p)->request_count)
232 #define port_index(p, execlists) ((p) - (execlists)->port)
233
234                 /**
235                  * @context_id: context ID for port
236                  */
237                 GEM_DEBUG_DECL(u32 context_id);
238
239 #define EXECLIST_MAX_PORTS 2
240         } port[EXECLIST_MAX_PORTS];
241
242         /**
243          * @active: is the HW active? We consider the HW as active after
244          * submitting any context for execution and until we have seen the
245          * last context completion event. After that, we do not expect any
246          * more events until we submit, and so can park the HW.
247          *
248          * As we have a small number of different sources from which we feed
249          * the HW, we track the state of each inside a single bitfield.
250          */
251         unsigned int active;
252 #define EXECLISTS_ACTIVE_USER 0
253 #define EXECLISTS_ACTIVE_PREEMPT 1
254
255         /**
256          * @port_mask: number of execlist ports - 1
257          */
258         unsigned int port_mask;
259
260         /**
261          * @queue: queue of requests, in priority lists
262          */
263         struct rb_root queue;
264
265         /**
266          * @first: leftmost level in priority @queue
267          */
268         struct rb_node *first;
269
270         /**
271          * @fw_domains: forcewake domains for irq tasklet
272          */
273         unsigned int fw_domains;
274
275         /**
276          * @csb_head: context status buffer head
277          */
278         unsigned int csb_head;
279
280         /**
281          * @csb_use_mmio: access csb through mmio, instead of hwsp
282          */
283         bool csb_use_mmio;
284 };
285
286 #define INTEL_ENGINE_CS_MAX_NAME 8
287
288 struct intel_engine_cs {
289         struct drm_i915_private *i915;
290         char name[INTEL_ENGINE_CS_MAX_NAME];
291
292         enum intel_engine_id id;
293         unsigned int hw_id;
294         unsigned int guc_id;
295
296         u8 uabi_id;
297         u8 uabi_class;
298
299         u8 class;
300         u8 instance;
301         u32 context_size;
302         u32 mmio_base;
303         unsigned int irq_shift;
304
305         struct intel_ring *buffer;
306         struct intel_timeline *timeline;
307
308         struct drm_i915_gem_object *default_state;
309
310         atomic_t irq_count;
311         unsigned long irq_posted;
312 #define ENGINE_IRQ_BREADCRUMB 0
313 #define ENGINE_IRQ_EXECLIST 1
314
315         /* Rather than have every client wait upon all user interrupts,
316          * with the herd waking after every interrupt and each doing the
317          * heavyweight seqno dance, we delegate the task (of being the
318          * bottom-half of the user interrupt) to the first client. After
319          * every interrupt, we wake up one client, who does the heavyweight
320          * coherent seqno read and either goes back to sleep (if incomplete),
321          * or wakes up all the completed clients in parallel, before then
322          * transferring the bottom-half status to the next client in the queue.
323          *
324          * Compared to walking the entire list of waiters in a single dedicated
325          * bottom-half, we reduce the latency of the first waiter by avoiding
326          * a context switch, but incur additional coherent seqno reads when
327          * following the chain of request breadcrumbs. Since it is most likely
328          * that we have a single client waiting on each seqno, then reducing
329          * the overhead of waking that client is much preferred.
330          */
331         struct intel_breadcrumbs {
332                 spinlock_t irq_lock; /* protects irq_*; irqsafe */
333                 struct intel_wait *irq_wait; /* oldest waiter by retirement */
334
335                 spinlock_t rb_lock; /* protects the rb and wraps irq_lock */
336                 struct rb_root waiters; /* sorted by retirement, priority */
337                 struct rb_root signals; /* sorted by retirement */
338                 struct task_struct *signaler; /* used for fence signalling */
339                 struct drm_i915_gem_request __rcu *first_signal;
340                 struct timer_list fake_irq; /* used after a missed interrupt */
341                 struct timer_list hangcheck; /* detect missed interrupts */
342
343                 unsigned int hangcheck_interrupts;
344                 unsigned int irq_enabled;
345
346                 bool irq_armed : 1;
347                 I915_SELFTEST_DECLARE(bool mock : 1);
348         } breadcrumbs;
349
350         /*
351          * A pool of objects to use as shadow copies of client batch buffers
352          * when the command parser is enabled. Prevents the client from
353          * modifying the batch contents after software parsing.
354          */
355         struct i915_gem_batch_pool batch_pool;
356
357         struct intel_hw_status_page status_page;
358         struct i915_ctx_workarounds wa_ctx;
359         struct i915_vma *scratch;
360
361         u32             irq_keep_mask; /* always keep these interrupts */
362         u32             irq_enable_mask; /* bitmask to enable ring interrupt */
363         void            (*irq_enable)(struct intel_engine_cs *engine);
364         void            (*irq_disable)(struct intel_engine_cs *engine);
365
366         int             (*init_hw)(struct intel_engine_cs *engine);
367         void            (*reset_hw)(struct intel_engine_cs *engine,
368                                     struct drm_i915_gem_request *req);
369
370         void            (*park)(struct intel_engine_cs *engine);
371         void            (*unpark)(struct intel_engine_cs *engine);
372
373         void            (*set_default_submission)(struct intel_engine_cs *engine);
374
375         struct intel_ring *(*context_pin)(struct intel_engine_cs *engine,
376                                           struct i915_gem_context *ctx);
377         void            (*context_unpin)(struct intel_engine_cs *engine,
378                                          struct i915_gem_context *ctx);
379         int             (*request_alloc)(struct drm_i915_gem_request *req);
380         int             (*init_context)(struct drm_i915_gem_request *req);
381
382         int             (*emit_flush)(struct drm_i915_gem_request *request,
383                                       u32 mode);
384 #define EMIT_INVALIDATE BIT(0)
385 #define EMIT_FLUSH      BIT(1)
386 #define EMIT_BARRIER    (EMIT_INVALIDATE | EMIT_FLUSH)
387         int             (*emit_bb_start)(struct drm_i915_gem_request *req,
388                                          u64 offset, u32 length,
389                                          unsigned int dispatch_flags);
390 #define I915_DISPATCH_SECURE BIT(0)
391 #define I915_DISPATCH_PINNED BIT(1)
392 #define I915_DISPATCH_RS     BIT(2)
393         void            (*emit_breadcrumb)(struct drm_i915_gem_request *req,
394                                            u32 *cs);
395         int             emit_breadcrumb_sz;
396
397         /* Pass the request to the hardware queue (e.g. directly into
398          * the legacy ringbuffer or to the end of an execlist).
399          *
400          * This is called from an atomic context with irqs disabled; must
401          * be irq safe.
402          */
403         void            (*submit_request)(struct drm_i915_gem_request *req);
404
405         /* Call when the priority on a request has changed and it and its
406          * dependencies may need rescheduling. Note the request itself may
407          * not be ready to run!
408          *
409          * Called under the struct_mutex.
410          */
411         void            (*schedule)(struct drm_i915_gem_request *request,
412                                     int priority);
413
414         /*
415          * Cancel all requests on the hardware, or queued for execution.
416          * This should only cancel the ready requests that have been
417          * submitted to the engine (via the engine->submit_request callback).
418          * This is called when marking the device as wedged.
419          */
420         void            (*cancel_requests)(struct intel_engine_cs *engine);
421
422         /* Some chipsets are not quite as coherent as advertised and need
423          * an expensive kick to force a true read of the up-to-date seqno.
424          * However, the up-to-date seqno is not always required and the last
425          * seen value is good enough. Note that the seqno will always be
426          * monotonic, even if not coherent.
427          */
428         void            (*irq_seqno_barrier)(struct intel_engine_cs *engine);
429         void            (*cleanup)(struct intel_engine_cs *engine);
430
431         /* GEN8 signal/wait table - never trust comments!
432          *        signal to     signal to    signal to   signal to      signal to
433          *          RCS            VCS          BCS        VECS          VCS2
434          *      --------------------------------------------------------------------
435          *  RCS | NOP (0x00) | VCS (0x08) | BCS (0x10) | VECS (0x18) | VCS2 (0x20) |
436          *      |-------------------------------------------------------------------
437          *  VCS | RCS (0x28) | NOP (0x30) | BCS (0x38) | VECS (0x40) | VCS2 (0x48) |
438          *      |-------------------------------------------------------------------
439          *  BCS | RCS (0x50) | VCS (0x58) | NOP (0x60) | VECS (0x68) | VCS2 (0x70) |
440          *      |-------------------------------------------------------------------
441          * VECS | RCS (0x78) | VCS (0x80) | BCS (0x88) |  NOP (0x90) | VCS2 (0x98) |
442          *      |-------------------------------------------------------------------
443          * VCS2 | RCS (0xa0) | VCS (0xa8) | BCS (0xb0) | VECS (0xb8) | NOP  (0xc0) |
444          *      |-------------------------------------------------------------------
445          *
446          * Generalization:
447          *  f(x, y) := (x->id * NUM_RINGS * seqno_size) + (seqno_size * y->id)
448          *  ie. transpose of g(x, y)
449          *
450          *       sync from      sync from    sync from    sync from     sync from
451          *          RCS            VCS          BCS        VECS          VCS2
452          *      --------------------------------------------------------------------
453          *  RCS | NOP (0x00) | VCS (0x28) | BCS (0x50) | VECS (0x78) | VCS2 (0xa0) |
454          *      |-------------------------------------------------------------------
455          *  VCS | RCS (0x08) | NOP (0x30) | BCS (0x58) | VECS (0x80) | VCS2 (0xa8) |
456          *      |-------------------------------------------------------------------
457          *  BCS | RCS (0x10) | VCS (0x38) | NOP (0x60) | VECS (0x88) | VCS2 (0xb0) |
458          *      |-------------------------------------------------------------------
459          * VECS | RCS (0x18) | VCS (0x40) | BCS (0x68) |  NOP (0x90) | VCS2 (0xb8) |
460          *      |-------------------------------------------------------------------
461          * VCS2 | RCS (0x20) | VCS (0x48) | BCS (0x70) | VECS (0x98) |  NOP (0xc0) |
462          *      |-------------------------------------------------------------------
463          *
464          * Generalization:
465          *  g(x, y) := (y->id * NUM_RINGS * seqno_size) + (seqno_size * x->id)
466          *  ie. transpose of f(x, y)
467          */
468         struct {
469                 union {
470 #define GEN6_SEMAPHORE_LAST     VECS_HW
471 #define GEN6_NUM_SEMAPHORES     (GEN6_SEMAPHORE_LAST + 1)
472 #define GEN6_SEMAPHORES_MASK    GENMASK(GEN6_SEMAPHORE_LAST, 0)
473                         struct {
474                                 /* our mbox written by others */
475                                 u32             wait[GEN6_NUM_SEMAPHORES];
476                                 /* mboxes this ring signals to */
477                                 i915_reg_t      signal[GEN6_NUM_SEMAPHORES];
478                         } mbox;
479                         u64             signal_ggtt[I915_NUM_ENGINES];
480                 };
481
482                 /* AKA wait() */
483                 int     (*sync_to)(struct drm_i915_gem_request *req,
484                                    struct drm_i915_gem_request *signal);
485                 u32     *(*signal)(struct drm_i915_gem_request *req, u32 *cs);
486         } semaphore;
487
488         struct intel_engine_execlists execlists;
489
490         /* Contexts are pinned whilst they are active on the GPU. The last
491          * context executed remains active whilst the GPU is idle - the
492          * switch away and write to the context object only occurs on the
493          * next execution.  Contexts are only unpinned on retirement of the
494          * following request ensuring that we can always write to the object
495          * on the context switch even after idling. Across suspend, we switch
496          * to the kernel context and trash it as the save may not happen
497          * before the hardware is powered down.
498          */
499         struct i915_gem_context *last_retired_context;
500
501         /* We track the current MI_SET_CONTEXT in order to eliminate
502          * redudant context switches. This presumes that requests are not
503          * reordered! Or when they are the tracking is updated along with
504          * the emission of individual requests into the legacy command
505          * stream (ring).
506          */
507         struct i915_gem_context *legacy_active_context;
508
509         /* status_notifier: list of callbacks for context-switch changes */
510         struct atomic_notifier_head context_status_notifier;
511
512         struct intel_engine_hangcheck hangcheck;
513
514         bool needs_cmd_parser;
515
516         /*
517          * Table of commands the command parser needs to know about
518          * for this engine.
519          */
520         DECLARE_HASHTABLE(cmd_hash, I915_CMD_HASH_ORDER);
521
522         /*
523          * Table of registers allowed in commands that read/write registers.
524          */
525         const struct drm_i915_reg_table *reg_tables;
526         int reg_table_count;
527
528         /*
529          * Returns the bitmask for the length field of the specified command.
530          * Return 0 for an unrecognized/invalid command.
531          *
532          * If the command parser finds an entry for a command in the engine's
533          * cmd_tables, it gets the command's length based on the table entry.
534          * If not, it calls this function to determine the per-engine length
535          * field encoding for the command (i.e. different opcode ranges use
536          * certain bits to encode the command length in the header).
537          */
538         u32 (*get_cmd_length_mask)(u32 cmd_header);
539 };
540
541 static inline void
542 execlists_set_active(struct intel_engine_execlists *execlists,
543                      unsigned int bit)
544 {
545         __set_bit(bit, (unsigned long *)&execlists->active);
546 }
547
548 static inline void
549 execlists_clear_active(struct intel_engine_execlists *execlists,
550                        unsigned int bit)
551 {
552         __clear_bit(bit, (unsigned long *)&execlists->active);
553 }
554
555 static inline bool
556 execlists_is_active(const struct intel_engine_execlists *execlists,
557                     unsigned int bit)
558 {
559         return test_bit(bit, (unsigned long *)&execlists->active);
560 }
561
562 void
563 execlists_cancel_port_requests(struct intel_engine_execlists * const execlists);
564
565 void
566 execlists_unwind_incomplete_requests(struct intel_engine_execlists *execlists);
567
568 static inline unsigned int
569 execlists_num_ports(const struct intel_engine_execlists * const execlists)
570 {
571         return execlists->port_mask + 1;
572 }
573
574 static inline void
575 execlists_port_complete(struct intel_engine_execlists * const execlists,
576                         struct execlist_port * const port)
577 {
578         const unsigned int m = execlists->port_mask;
579
580         GEM_BUG_ON(port_index(port, execlists) != 0);
581         GEM_BUG_ON(!execlists_is_active(execlists, EXECLISTS_ACTIVE_USER));
582
583         memmove(port, port + 1, m * sizeof(struct execlist_port));
584         memset(port + m, 0, sizeof(struct execlist_port));
585 }
586
587 static inline unsigned int
588 intel_engine_flag(const struct intel_engine_cs *engine)
589 {
590         return BIT(engine->id);
591 }
592
593 static inline u32
594 intel_read_status_page(struct intel_engine_cs *engine, int reg)
595 {
596         /* Ensure that the compiler doesn't optimize away the load. */
597         return READ_ONCE(engine->status_page.page_addr[reg]);
598 }
599
600 static inline void
601 intel_write_status_page(struct intel_engine_cs *engine, int reg, u32 value)
602 {
603         /* Writing into the status page should be done sparingly. Since
604          * we do when we are uncertain of the device state, we take a bit
605          * of extra paranoia to try and ensure that the HWS takes the value
606          * we give and that it doesn't end up trapped inside the CPU!
607          */
608         if (static_cpu_has(X86_FEATURE_CLFLUSH)) {
609                 mb();
610                 clflush(&engine->status_page.page_addr[reg]);
611                 engine->status_page.page_addr[reg] = value;
612                 clflush(&engine->status_page.page_addr[reg]);
613                 mb();
614         } else {
615                 WRITE_ONCE(engine->status_page.page_addr[reg], value);
616         }
617 }
618
619 /*
620  * Reads a dword out of the status page, which is written to from the command
621  * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
622  * MI_STORE_DATA_IMM.
623  *
624  * The following dwords have a reserved meaning:
625  * 0x00: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
626  * 0x04: ring 0 head pointer
627  * 0x05: ring 1 head pointer (915-class)
628  * 0x06: ring 2 head pointer (915-class)
629  * 0x10-0x1b: Context status DWords (GM45)
630  * 0x1f: Last written status offset. (GM45)
631  * 0x20-0x2f: Reserved (Gen6+)
632  *
633  * The area from dword 0x30 to 0x3ff is available for driver usage.
634  */
635 #define I915_GEM_HWS_INDEX              0x30
636 #define I915_GEM_HWS_INDEX_ADDR (I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
637 #define I915_GEM_HWS_PREEMPT_INDEX      0x32
638 #define I915_GEM_HWS_PREEMPT_ADDR (I915_GEM_HWS_PREEMPT_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
639 #define I915_GEM_HWS_SCRATCH_INDEX      0x40
640 #define I915_GEM_HWS_SCRATCH_ADDR (I915_GEM_HWS_SCRATCH_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
641
642 #define I915_HWS_CSB_BUF0_INDEX         0x10
643 #define I915_HWS_CSB_WRITE_INDEX        0x1f
644 #define CNL_HWS_CSB_WRITE_INDEX         0x2f
645
646 struct intel_ring *
647 intel_engine_create_ring(struct intel_engine_cs *engine, int size);
648 int intel_ring_pin(struct intel_ring *ring,
649                    struct drm_i915_private *i915,
650                    unsigned int offset_bias);
651 void intel_ring_reset(struct intel_ring *ring, u32 tail);
652 unsigned int intel_ring_update_space(struct intel_ring *ring);
653 void intel_ring_unpin(struct intel_ring *ring);
654 void intel_ring_free(struct intel_ring *ring);
655
656 void intel_engine_stop(struct intel_engine_cs *engine);
657 void intel_engine_cleanup(struct intel_engine_cs *engine);
658
659 void intel_legacy_submission_resume(struct drm_i915_private *dev_priv);
660
661 int __must_check intel_ring_cacheline_align(struct drm_i915_gem_request *req);
662
663 int intel_ring_wait_for_space(struct intel_ring *ring, unsigned int bytes);
664 u32 __must_check *intel_ring_begin(struct drm_i915_gem_request *req,
665                                    unsigned int n);
666
667 static inline void
668 intel_ring_advance(struct drm_i915_gem_request *req, u32 *cs)
669 {
670         /* Dummy function.
671          *
672          * This serves as a placeholder in the code so that the reader
673          * can compare against the preceding intel_ring_begin() and
674          * check that the number of dwords emitted matches the space
675          * reserved for the command packet (i.e. the value passed to
676          * intel_ring_begin()).
677          */
678         GEM_BUG_ON((req->ring->vaddr + req->ring->emit) != cs);
679 }
680
681 static inline u32
682 intel_ring_wrap(const struct intel_ring *ring, u32 pos)
683 {
684         return pos & (ring->size - 1);
685 }
686
687 static inline u32
688 intel_ring_offset(const struct drm_i915_gem_request *req, void *addr)
689 {
690         /* Don't write ring->size (equivalent to 0) as that hangs some GPUs. */
691         u32 offset = addr - req->ring->vaddr;
692         GEM_BUG_ON(offset > req->ring->size);
693         return intel_ring_wrap(req->ring, offset);
694 }
695
696 static inline void
697 assert_ring_tail_valid(const struct intel_ring *ring, unsigned int tail)
698 {
699         /* We could combine these into a single tail operation, but keeping
700          * them as seperate tests will help identify the cause should one
701          * ever fire.
702          */
703         GEM_BUG_ON(!IS_ALIGNED(tail, 8));
704         GEM_BUG_ON(tail >= ring->size);
705
706         /*
707          * "Ring Buffer Use"
708          *      Gen2 BSpec "1. Programming Environment" / 1.4.4.6
709          *      Gen3 BSpec "1c Memory Interface Functions" / 2.3.4.5
710          *      Gen4+ BSpec "1c Memory Interface and Command Stream" / 5.3.4.5
711          * "If the Ring Buffer Head Pointer and the Tail Pointer are on the
712          * same cacheline, the Head Pointer must not be greater than the Tail
713          * Pointer."
714          *
715          * We use ring->head as the last known location of the actual RING_HEAD,
716          * it may have advanced but in the worst case it is equally the same
717          * as ring->head and so we should never program RING_TAIL to advance
718          * into the same cacheline as ring->head.
719          */
720 #define cacheline(a) round_down(a, CACHELINE_BYTES)
721         GEM_BUG_ON(cacheline(tail) == cacheline(ring->head) &&
722                    tail < ring->head);
723 #undef cacheline
724 }
725
726 static inline unsigned int
727 intel_ring_set_tail(struct intel_ring *ring, unsigned int tail)
728 {
729         /* Whilst writes to the tail are strictly order, there is no
730          * serialisation between readers and the writers. The tail may be
731          * read by i915_gem_request_retire() just as it is being updated
732          * by execlists, as although the breadcrumb is complete, the context
733          * switch hasn't been seen.
734          */
735         assert_ring_tail_valid(ring, tail);
736         ring->tail = tail;
737         return tail;
738 }
739
740 void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno);
741
742 void intel_engine_setup_common(struct intel_engine_cs *engine);
743 int intel_engine_init_common(struct intel_engine_cs *engine);
744 int intel_engine_create_scratch(struct intel_engine_cs *engine, int size);
745 void intel_engine_cleanup_common(struct intel_engine_cs *engine);
746
747 int intel_init_render_ring_buffer(struct intel_engine_cs *engine);
748 int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine);
749 int intel_init_blt_ring_buffer(struct intel_engine_cs *engine);
750 int intel_init_vebox_ring_buffer(struct intel_engine_cs *engine);
751
752 u64 intel_engine_get_active_head(struct intel_engine_cs *engine);
753 u64 intel_engine_get_last_batch_head(struct intel_engine_cs *engine);
754
755 static inline u32 intel_engine_get_seqno(struct intel_engine_cs *engine)
756 {
757         return intel_read_status_page(engine, I915_GEM_HWS_INDEX);
758 }
759
760 static inline u32 intel_engine_last_submit(struct intel_engine_cs *engine)
761 {
762         /* We are only peeking at the tail of the submit queue (and not the
763          * queue itself) in order to gain a hint as to the current active
764          * state of the engine. Callers are not expected to be taking
765          * engine->timeline->lock, nor are they expected to be concerned
766          * wtih serialising this hint with anything, so document it as
767          * a hint and nothing more.
768          */
769         return READ_ONCE(engine->timeline->seqno);
770 }
771
772 int init_workarounds_ring(struct intel_engine_cs *engine);
773 int intel_ring_workarounds_emit(struct drm_i915_gem_request *req);
774
775 void intel_engine_get_instdone(struct intel_engine_cs *engine,
776                                struct intel_instdone *instdone);
777
778 /*
779  * Arbitrary size for largest possible 'add request' sequence. The code paths
780  * are complex and variable. Empirical measurement shows that the worst case
781  * is BDW at 192 bytes (6 + 6 + 36 dwords), then ILK at 136 bytes. However,
782  * we need to allocate double the largest single packet within that emission
783  * to account for tail wraparound (so 6 + 6 + 72 dwords for BDW).
784  */
785 #define MIN_SPACE_FOR_ADD_REQUEST 336
786
787 static inline u32 intel_hws_seqno_address(struct intel_engine_cs *engine)
788 {
789         return engine->status_page.ggtt_offset + I915_GEM_HWS_INDEX_ADDR;
790 }
791
792 static inline u32 intel_hws_preempt_done_address(struct intel_engine_cs *engine)
793 {
794         return engine->status_page.ggtt_offset + I915_GEM_HWS_PREEMPT_ADDR;
795 }
796
797 /* intel_breadcrumbs.c -- user interrupt bottom-half for waiters */
798 int intel_engine_init_breadcrumbs(struct intel_engine_cs *engine);
799
800 static inline void intel_wait_init(struct intel_wait *wait,
801                                    struct drm_i915_gem_request *rq)
802 {
803         wait->tsk = current;
804         wait->request = rq;
805 }
806
807 static inline void intel_wait_init_for_seqno(struct intel_wait *wait, u32 seqno)
808 {
809         wait->tsk = current;
810         wait->seqno = seqno;
811 }
812
813 static inline bool intel_wait_has_seqno(const struct intel_wait *wait)
814 {
815         return wait->seqno;
816 }
817
818 static inline bool
819 intel_wait_update_seqno(struct intel_wait *wait, u32 seqno)
820 {
821         wait->seqno = seqno;
822         return intel_wait_has_seqno(wait);
823 }
824
825 static inline bool
826 intel_wait_update_request(struct intel_wait *wait,
827                           const struct drm_i915_gem_request *rq)
828 {
829         return intel_wait_update_seqno(wait, i915_gem_request_global_seqno(rq));
830 }
831
832 static inline bool
833 intel_wait_check_seqno(const struct intel_wait *wait, u32 seqno)
834 {
835         return wait->seqno == seqno;
836 }
837
838 static inline bool
839 intel_wait_check_request(const struct intel_wait *wait,
840                          const struct drm_i915_gem_request *rq)
841 {
842         return intel_wait_check_seqno(wait, i915_gem_request_global_seqno(rq));
843 }
844
845 static inline bool intel_wait_complete(const struct intel_wait *wait)
846 {
847         return RB_EMPTY_NODE(&wait->node);
848 }
849
850 bool intel_engine_add_wait(struct intel_engine_cs *engine,
851                            struct intel_wait *wait);
852 void intel_engine_remove_wait(struct intel_engine_cs *engine,
853                               struct intel_wait *wait);
854 void intel_engine_enable_signaling(struct drm_i915_gem_request *request,
855                                    bool wakeup);
856 void intel_engine_cancel_signaling(struct drm_i915_gem_request *request);
857
858 static inline bool intel_engine_has_waiter(const struct intel_engine_cs *engine)
859 {
860         return READ_ONCE(engine->breadcrumbs.irq_wait);
861 }
862
863 unsigned int intel_engine_wakeup(struct intel_engine_cs *engine);
864 #define ENGINE_WAKEUP_WAITER BIT(0)
865 #define ENGINE_WAKEUP_ASLEEP BIT(1)
866
867 void intel_engine_pin_breadcrumbs_irq(struct intel_engine_cs *engine);
868 void intel_engine_unpin_breadcrumbs_irq(struct intel_engine_cs *engine);
869
870 void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine);
871 void intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine);
872
873 void intel_engine_reset_breadcrumbs(struct intel_engine_cs *engine);
874 void intel_engine_fini_breadcrumbs(struct intel_engine_cs *engine);
875 bool intel_breadcrumbs_busy(struct intel_engine_cs *engine);
876
877 static inline u32 *gen8_emit_pipe_control(u32 *batch, u32 flags, u32 offset)
878 {
879         memset(batch, 0, 6 * sizeof(u32));
880
881         batch[0] = GFX_OP_PIPE_CONTROL(6);
882         batch[1] = flags;
883         batch[2] = offset;
884
885         return batch + 6;
886 }
887
888 static inline u32 *
889 gen8_emit_ggtt_write_rcs(u32 *cs, u32 value, u32 gtt_offset)
890 {
891         /* We're using qword write, offset should be aligned to 8 bytes. */
892         GEM_BUG_ON(!IS_ALIGNED(gtt_offset, 8));
893
894         /* w/a for post sync ops following a GPGPU operation we
895          * need a prior CS_STALL, which is emitted by the flush
896          * following the batch.
897          */
898         *cs++ = GFX_OP_PIPE_CONTROL(6);
899         *cs++ = PIPE_CONTROL_GLOBAL_GTT_IVB | PIPE_CONTROL_CS_STALL |
900                 PIPE_CONTROL_QW_WRITE;
901         *cs++ = gtt_offset;
902         *cs++ = 0;
903         *cs++ = value;
904         /* We're thrashing one dword of HWS. */
905         *cs++ = 0;
906
907         return cs;
908 }
909
910 static inline u32 *
911 gen8_emit_ggtt_write(u32 *cs, u32 value, u32 gtt_offset)
912 {
913         /* w/a: bit 5 needs to be zero for MI_FLUSH_DW address. */
914         GEM_BUG_ON(gtt_offset & (1 << 5));
915         /* Offset should be aligned to 8 bytes for both (QW/DW) write types */
916         GEM_BUG_ON(!IS_ALIGNED(gtt_offset, 8));
917
918         *cs++ = (MI_FLUSH_DW + 1) | MI_FLUSH_DW_OP_STOREDW;
919         *cs++ = gtt_offset | MI_FLUSH_DW_USE_GTT;
920         *cs++ = 0;
921         *cs++ = value;
922
923         return cs;
924 }
925
926 bool intel_engine_is_idle(struct intel_engine_cs *engine);
927 bool intel_engines_are_idle(struct drm_i915_private *dev_priv);
928
929 bool intel_engine_has_kernel_context(const struct intel_engine_cs *engine);
930
931 void intel_engines_park(struct drm_i915_private *i915);
932 void intel_engines_unpark(struct drm_i915_private *i915);
933
934 void intel_engines_reset_default_submission(struct drm_i915_private *i915);
935 unsigned int intel_engines_has_context_isolation(struct drm_i915_private *i915);
936
937 bool intel_engine_can_store_dword(struct intel_engine_cs *engine);
938
939 void intel_engine_dump(struct intel_engine_cs *engine, struct drm_printer *p);
940
941 #endif /* _INTEL_RINGBUFFER_H_ */
This page took 0.089159 seconds and 4 git commands to generate.