Merge back cpufreq updates for v5.11.
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / gt / intel_lrc.c
1 /*
2  * Copyright © 2014 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * Authors:
24  *    Ben Widawsky <ben@bwidawsk.net>
25  *    Michel Thierry <michel.thierry@intel.com>
26  *    Thomas Daniel <thomas.daniel@intel.com>
27  *    Oscar Mateo <oscar.mateo@intel.com>
28  *
29  */
30
31 /**
32  * DOC: Logical Rings, Logical Ring Contexts and Execlists
33  *
34  * Motivation:
35  * GEN8 brings an expansion of the HW contexts: "Logical Ring Contexts".
36  * These expanded contexts enable a number of new abilities, especially
37  * "Execlists" (also implemented in this file).
38  *
39  * One of the main differences with the legacy HW contexts is that logical
40  * ring contexts incorporate many more things to the context's state, like
41  * PDPs or ringbuffer control registers:
42  *
43  * The reason why PDPs are included in the context is straightforward: as
44  * PPGTTs (per-process GTTs) are actually per-context, having the PDPs
45  * contained there mean you don't need to do a ppgtt->switch_mm yourself,
46  * instead, the GPU will do it for you on the context switch.
47  *
48  * But, what about the ringbuffer control registers (head, tail, etc..)?
49  * shouldn't we just need a set of those per engine command streamer? This is
50  * where the name "Logical Rings" starts to make sense: by virtualizing the
51  * rings, the engine cs shifts to a new "ring buffer" with every context
52  * switch. When you want to submit a workload to the GPU you: A) choose your
53  * context, B) find its appropriate virtualized ring, C) write commands to it
54  * and then, finally, D) tell the GPU to switch to that context.
55  *
56  * Instead of the legacy MI_SET_CONTEXT, the way you tell the GPU to switch
57  * to a contexts is via a context execution list, ergo "Execlists".
58  *
59  * LRC implementation:
60  * Regarding the creation of contexts, we have:
61  *
62  * - One global default context.
63  * - One local default context for each opened fd.
64  * - One local extra context for each context create ioctl call.
65  *
66  * Now that ringbuffers belong per-context (and not per-engine, like before)
67  * and that contexts are uniquely tied to a given engine (and not reusable,
68  * like before) we need:
69  *
70  * - One ringbuffer per-engine inside each context.
71  * - One backing object per-engine inside each context.
72  *
73  * The global default context starts its life with these new objects fully
74  * allocated and populated. The local default context for each opened fd is
75  * more complex, because we don't know at creation time which engine is going
76  * to use them. To handle this, we have implemented a deferred creation of LR
77  * contexts:
78  *
79  * The local context starts its life as a hollow or blank holder, that only
80  * gets populated for a given engine once we receive an execbuffer. If later
81  * on we receive another execbuffer ioctl for the same context but a different
82  * engine, we allocate/populate a new ringbuffer and context backing object and
83  * so on.
84  *
85  * Finally, regarding local contexts created using the ioctl call: as they are
86  * only allowed with the render ring, we can allocate & populate them right
87  * away (no need to defer anything, at least for now).
88  *
89  * Execlists implementation:
90  * Execlists are the new method by which, on gen8+ hardware, workloads are
91  * submitted for execution (as opposed to the legacy, ringbuffer-based, method).
92  * This method works as follows:
93  *
94  * When a request is committed, its commands (the BB start and any leading or
95  * trailing commands, like the seqno breadcrumbs) are placed in the ringbuffer
96  * for the appropriate context. The tail pointer in the hardware context is not
97  * updated at this time, but instead, kept by the driver in the ringbuffer
98  * structure. A structure representing this request is added to a request queue
99  * for the appropriate engine: this structure contains a copy of the context's
100  * tail after the request was written to the ring buffer and a pointer to the
101  * context itself.
102  *
103  * If the engine's request queue was empty before the request was added, the
104  * queue is processed immediately. Otherwise the queue will be processed during
105  * a context switch interrupt. In any case, elements on the queue will get sent
106  * (in pairs) to the GPU's ExecLists Submit Port (ELSP, for short) with a
107  * globally unique 20-bits submission ID.
108  *
109  * When execution of a request completes, the GPU updates the context status
110  * buffer with a context complete event and generates a context switch interrupt.
111  * During the interrupt handling, the driver examines the events in the buffer:
112  * for each context complete event, if the announced ID matches that on the head
113  * of the request queue, then that request is retired and removed from the queue.
114  *
115  * After processing, if any requests were retired and the queue is not empty
116  * then a new execution list can be submitted. The two requests at the front of
117  * the queue are next to be submitted but since a context may not occur twice in
118  * an execution list, if subsequent requests have the same ID as the first then
119  * the two requests must be combined. This is done simply by discarding requests
120  * at the head of the queue until either only one requests is left (in which case
121  * we use a NULL second context) or the first two requests have unique IDs.
122  *
123  * By always executing the first two requests in the queue the driver ensures
124  * that the GPU is kept as busy as possible. In the case where a single context
125  * completes but a second context is still executing, the request for this second
126  * context will be at the head of the queue when we remove the first one. This
127  * request will then be resubmitted along with a new request for a different context,
128  * which will cause the hardware to continue executing the second request and queue
129  * the new request (the GPU detects the condition of a context getting preempted
130  * with the same context and optimizes the context switch flow by not doing
131  * preemption, but just sampling the new tail pointer).
132  *
133  */
134 #include <linux/interrupt.h>
135
136 #include "i915_drv.h"
137 #include "i915_perf.h"
138 #include "i915_trace.h"
139 #include "i915_vgpu.h"
140 #include "intel_breadcrumbs.h"
141 #include "intel_context.h"
142 #include "intel_engine_pm.h"
143 #include "intel_gt.h"
144 #include "intel_gt_pm.h"
145 #include "intel_gt_requests.h"
146 #include "intel_lrc_reg.h"
147 #include "intel_mocs.h"
148 #include "intel_reset.h"
149 #include "intel_ring.h"
150 #include "intel_workarounds.h"
151 #include "shmem_utils.h"
152
153 #define RING_EXECLIST_QFULL             (1 << 0x2)
154 #define RING_EXECLIST1_VALID            (1 << 0x3)
155 #define RING_EXECLIST0_VALID            (1 << 0x4)
156 #define RING_EXECLIST_ACTIVE_STATUS     (3 << 0xE)
157 #define RING_EXECLIST1_ACTIVE           (1 << 0x11)
158 #define RING_EXECLIST0_ACTIVE           (1 << 0x12)
159
160 #define GEN8_CTX_STATUS_IDLE_ACTIVE     (1 << 0)
161 #define GEN8_CTX_STATUS_PREEMPTED       (1 << 1)
162 #define GEN8_CTX_STATUS_ELEMENT_SWITCH  (1 << 2)
163 #define GEN8_CTX_STATUS_ACTIVE_IDLE     (1 << 3)
164 #define GEN8_CTX_STATUS_COMPLETE        (1 << 4)
165 #define GEN8_CTX_STATUS_LITE_RESTORE    (1 << 15)
166
167 #define GEN8_CTX_STATUS_COMPLETED_MASK \
168          (GEN8_CTX_STATUS_COMPLETE | GEN8_CTX_STATUS_PREEMPTED)
169
170 #define CTX_DESC_FORCE_RESTORE BIT_ULL(2)
171
172 #define GEN12_CTX_STATUS_SWITCHED_TO_NEW_QUEUE  (0x1) /* lower csb dword */
173 #define GEN12_CTX_SWITCH_DETAIL(csb_dw) ((csb_dw) & 0xF) /* upper csb dword */
174 #define GEN12_CSB_SW_CTX_ID_MASK                GENMASK(25, 15)
175 #define GEN12_IDLE_CTX_ID               0x7FF
176 #define GEN12_CSB_CTX_VALID(csb_dw) \
177         (FIELD_GET(GEN12_CSB_SW_CTX_ID_MASK, csb_dw) != GEN12_IDLE_CTX_ID)
178
179 /* Typical size of the average request (2 pipecontrols and a MI_BB) */
180 #define EXECLISTS_REQUEST_SIZE 64 /* bytes */
181
182 struct virtual_engine {
183         struct intel_engine_cs base;
184         struct intel_context context;
185
186         /*
187          * We allow only a single request through the virtual engine at a time
188          * (each request in the timeline waits for the completion fence of
189          * the previous before being submitted). By restricting ourselves to
190          * only submitting a single request, each request is placed on to a
191          * physical to maximise load spreading (by virtue of the late greedy
192          * scheduling -- each real engine takes the next available request
193          * upon idling).
194          */
195         struct i915_request *request;
196
197         /*
198          * We keep a rbtree of available virtual engines inside each physical
199          * engine, sorted by priority. Here we preallocate the nodes we need
200          * for the virtual engine, indexed by physical_engine->id.
201          */
202         struct ve_node {
203                 struct rb_node rb;
204                 int prio;
205         } nodes[I915_NUM_ENGINES];
206
207         /*
208          * Keep track of bonded pairs -- restrictions upon on our selection
209          * of physical engines any particular request may be submitted to.
210          * If we receive a submit-fence from a master engine, we will only
211          * use one of sibling_mask physical engines.
212          */
213         struct ve_bond {
214                 const struct intel_engine_cs *master;
215                 intel_engine_mask_t sibling_mask;
216         } *bonds;
217         unsigned int num_bonds;
218
219         /* And finally, which physical engines this virtual engine maps onto. */
220         unsigned int num_siblings;
221         struct intel_engine_cs *siblings[];
222 };
223
224 static struct virtual_engine *to_virtual_engine(struct intel_engine_cs *engine)
225 {
226         GEM_BUG_ON(!intel_engine_is_virtual(engine));
227         return container_of(engine, struct virtual_engine, base);
228 }
229
230 static int __execlists_context_alloc(struct intel_context *ce,
231                                      struct intel_engine_cs *engine);
232
233 static void execlists_init_reg_state(u32 *reg_state,
234                                      const struct intel_context *ce,
235                                      const struct intel_engine_cs *engine,
236                                      const struct intel_ring *ring,
237                                      bool close);
238 static void
239 __execlists_update_reg_state(const struct intel_context *ce,
240                              const struct intel_engine_cs *engine,
241                              u32 head);
242
243 static int lrc_ring_mi_mode(const struct intel_engine_cs *engine)
244 {
245         if (INTEL_GEN(engine->i915) >= 12)
246                 return 0x60;
247         else if (INTEL_GEN(engine->i915) >= 9)
248                 return 0x54;
249         else if (engine->class == RENDER_CLASS)
250                 return 0x58;
251         else
252                 return -1;
253 }
254
255 static int lrc_ring_gpr0(const struct intel_engine_cs *engine)
256 {
257         if (INTEL_GEN(engine->i915) >= 12)
258                 return 0x74;
259         else if (INTEL_GEN(engine->i915) >= 9)
260                 return 0x68;
261         else if (engine->class == RENDER_CLASS)
262                 return 0xd8;
263         else
264                 return -1;
265 }
266
267 static int lrc_ring_wa_bb_per_ctx(const struct intel_engine_cs *engine)
268 {
269         if (INTEL_GEN(engine->i915) >= 12)
270                 return 0x12;
271         else if (INTEL_GEN(engine->i915) >= 9 || engine->class == RENDER_CLASS)
272                 return 0x18;
273         else
274                 return -1;
275 }
276
277 static int lrc_ring_indirect_ptr(const struct intel_engine_cs *engine)
278 {
279         int x;
280
281         x = lrc_ring_wa_bb_per_ctx(engine);
282         if (x < 0)
283                 return x;
284
285         return x + 2;
286 }
287
288 static int lrc_ring_indirect_offset(const struct intel_engine_cs *engine)
289 {
290         int x;
291
292         x = lrc_ring_indirect_ptr(engine);
293         if (x < 0)
294                 return x;
295
296         return x + 2;
297 }
298
299 static int lrc_ring_cmd_buf_cctl(const struct intel_engine_cs *engine)
300 {
301         if (engine->class != RENDER_CLASS)
302                 return -1;
303
304         if (INTEL_GEN(engine->i915) >= 12)
305                 return 0xb6;
306         else if (INTEL_GEN(engine->i915) >= 11)
307                 return 0xaa;
308         else
309                 return -1;
310 }
311
312 static u32
313 lrc_ring_indirect_offset_default(const struct intel_engine_cs *engine)
314 {
315         switch (INTEL_GEN(engine->i915)) {
316         default:
317                 MISSING_CASE(INTEL_GEN(engine->i915));
318                 fallthrough;
319         case 12:
320                 return GEN12_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
321         case 11:
322                 return GEN11_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
323         case 10:
324                 return GEN10_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
325         case 9:
326                 return GEN9_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
327         case 8:
328                 return GEN8_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
329         }
330 }
331
332 static void
333 lrc_ring_setup_indirect_ctx(u32 *regs,
334                             const struct intel_engine_cs *engine,
335                             u32 ctx_bb_ggtt_addr,
336                             u32 size)
337 {
338         GEM_BUG_ON(!size);
339         GEM_BUG_ON(!IS_ALIGNED(size, CACHELINE_BYTES));
340         GEM_BUG_ON(lrc_ring_indirect_ptr(engine) == -1);
341         regs[lrc_ring_indirect_ptr(engine) + 1] =
342                 ctx_bb_ggtt_addr | (size / CACHELINE_BYTES);
343
344         GEM_BUG_ON(lrc_ring_indirect_offset(engine) == -1);
345         regs[lrc_ring_indirect_offset(engine) + 1] =
346                 lrc_ring_indirect_offset_default(engine) << 6;
347 }
348
349 static u32 intel_context_get_runtime(const struct intel_context *ce)
350 {
351         /*
352          * We can use either ppHWSP[16] which is recorded before the context
353          * switch (and so excludes the cost of context switches) or use the
354          * value from the context image itself, which is saved/restored earlier
355          * and so includes the cost of the save.
356          */
357         return READ_ONCE(ce->lrc_reg_state[CTX_TIMESTAMP]);
358 }
359
360 static void mark_eio(struct i915_request *rq)
361 {
362         if (i915_request_completed(rq))
363                 return;
364
365         GEM_BUG_ON(i915_request_signaled(rq));
366
367         i915_request_set_error_once(rq, -EIO);
368         i915_request_mark_complete(rq);
369 }
370
371 static struct i915_request *
372 active_request(const struct intel_timeline * const tl, struct i915_request *rq)
373 {
374         struct i915_request *active = rq;
375
376         rcu_read_lock();
377         list_for_each_entry_continue_reverse(rq, &tl->requests, link) {
378                 if (i915_request_completed(rq))
379                         break;
380
381                 active = rq;
382         }
383         rcu_read_unlock();
384
385         return active;
386 }
387
388 static inline u32 intel_hws_preempt_address(struct intel_engine_cs *engine)
389 {
390         return (i915_ggtt_offset(engine->status_page.vma) +
391                 I915_GEM_HWS_PREEMPT_ADDR);
392 }
393
394 static inline void
395 ring_set_paused(const struct intel_engine_cs *engine, int state)
396 {
397         /*
398          * We inspect HWS_PREEMPT with a semaphore inside
399          * engine->emit_fini_breadcrumb. If the dword is true,
400          * the ring is paused as the semaphore will busywait
401          * until the dword is false.
402          */
403         engine->status_page.addr[I915_GEM_HWS_PREEMPT] = state;
404         if (state)
405                 wmb();
406 }
407
408 static inline struct i915_priolist *to_priolist(struct rb_node *rb)
409 {
410         return rb_entry(rb, struct i915_priolist, node);
411 }
412
413 static inline int rq_prio(const struct i915_request *rq)
414 {
415         return READ_ONCE(rq->sched.attr.priority);
416 }
417
418 static int effective_prio(const struct i915_request *rq)
419 {
420         int prio = rq_prio(rq);
421
422         /*
423          * If this request is special and must not be interrupted at any
424          * cost, so be it. Note we are only checking the most recent request
425          * in the context and so may be masking an earlier vip request. It
426          * is hoped that under the conditions where nopreempt is used, this
427          * will not matter (i.e. all requests to that context will be
428          * nopreempt for as long as desired).
429          */
430         if (i915_request_has_nopreempt(rq))
431                 prio = I915_PRIORITY_UNPREEMPTABLE;
432
433         return prio;
434 }
435
436 static int queue_prio(const struct intel_engine_execlists *execlists)
437 {
438         struct i915_priolist *p;
439         struct rb_node *rb;
440
441         rb = rb_first_cached(&execlists->queue);
442         if (!rb)
443                 return INT_MIN;
444
445         /*
446          * As the priolist[] are inverted, with the highest priority in [0],
447          * we have to flip the index value to become priority.
448          */
449         p = to_priolist(rb);
450         if (!I915_USER_PRIORITY_SHIFT)
451                 return p->priority;
452
453         return ((p->priority + 1) << I915_USER_PRIORITY_SHIFT) - ffs(p->used);
454 }
455
456 static inline bool need_preempt(const struct intel_engine_cs *engine,
457                                 const struct i915_request *rq,
458                                 struct rb_node *rb)
459 {
460         int last_prio;
461
462         if (!intel_engine_has_semaphores(engine))
463                 return false;
464
465         /*
466          * Check if the current priority hint merits a preemption attempt.
467          *
468          * We record the highest value priority we saw during rescheduling
469          * prior to this dequeue, therefore we know that if it is strictly
470          * less than the current tail of ESLP[0], we do not need to force
471          * a preempt-to-idle cycle.
472          *
473          * However, the priority hint is a mere hint that we may need to
474          * preempt. If that hint is stale or we may be trying to preempt
475          * ourselves, ignore the request.
476          *
477          * More naturally we would write
478          *      prio >= max(0, last);
479          * except that we wish to prevent triggering preemption at the same
480          * priority level: the task that is running should remain running
481          * to preserve FIFO ordering of dependencies.
482          */
483         last_prio = max(effective_prio(rq), I915_PRIORITY_NORMAL - 1);
484         if (engine->execlists.queue_priority_hint <= last_prio)
485                 return false;
486
487         /*
488          * Check against the first request in ELSP[1], it will, thanks to the
489          * power of PI, be the highest priority of that context.
490          */
491         if (!list_is_last(&rq->sched.link, &engine->active.requests) &&
492             rq_prio(list_next_entry(rq, sched.link)) > last_prio)
493                 return true;
494
495         if (rb) {
496                 struct virtual_engine *ve =
497                         rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
498                 bool preempt = false;
499
500                 if (engine == ve->siblings[0]) { /* only preempt one sibling */
501                         struct i915_request *next;
502
503                         rcu_read_lock();
504                         next = READ_ONCE(ve->request);
505                         if (next)
506                                 preempt = rq_prio(next) > last_prio;
507                         rcu_read_unlock();
508                 }
509
510                 if (preempt)
511                         return preempt;
512         }
513
514         /*
515          * If the inflight context did not trigger the preemption, then maybe
516          * it was the set of queued requests? Pick the highest priority in
517          * the queue (the first active priolist) and see if it deserves to be
518          * running instead of ELSP[0].
519          *
520          * The highest priority request in the queue can not be either
521          * ELSP[0] or ELSP[1] as, thanks again to PI, if it was the same
522          * context, it's priority would not exceed ELSP[0] aka last_prio.
523          */
524         return queue_prio(&engine->execlists) > last_prio;
525 }
526
527 __maybe_unused static inline bool
528 assert_priority_queue(const struct i915_request *prev,
529                       const struct i915_request *next)
530 {
531         /*
532          * Without preemption, the prev may refer to the still active element
533          * which we refuse to let go.
534          *
535          * Even with preemption, there are times when we think it is better not
536          * to preempt and leave an ostensibly lower priority request in flight.
537          */
538         if (i915_request_is_active(prev))
539                 return true;
540
541         return rq_prio(prev) >= rq_prio(next);
542 }
543
544 /*
545  * The context descriptor encodes various attributes of a context,
546  * including its GTT address and some flags. Because it's fairly
547  * expensive to calculate, we'll just do it once and cache the result,
548  * which remains valid until the context is unpinned.
549  *
550  * This is what a descriptor looks like, from LSB to MSB::
551  *
552  *      bits  0-11:    flags, GEN8_CTX_* (cached in ctx->desc_template)
553  *      bits 12-31:    LRCA, GTT address of (the HWSP of) this context
554  *      bits 32-52:    ctx ID, a globally unique tag (highest bit used by GuC)
555  *      bits 53-54:    mbz, reserved for use by hardware
556  *      bits 55-63:    group ID, currently unused and set to 0
557  *
558  * Starting from Gen11, the upper dword of the descriptor has a new format:
559  *
560  *      bits 32-36:    reserved
561  *      bits 37-47:    SW context ID
562  *      bits 48:53:    engine instance
563  *      bit 54:        mbz, reserved for use by hardware
564  *      bits 55-60:    SW counter
565  *      bits 61-63:    engine class
566  *
567  * engine info, SW context ID and SW counter need to form a unique number
568  * (Context ID) per lrc.
569  */
570 static u32
571 lrc_descriptor(struct intel_context *ce, struct intel_engine_cs *engine)
572 {
573         u32 desc;
574
575         desc = INTEL_LEGACY_32B_CONTEXT;
576         if (i915_vm_is_4lvl(ce->vm))
577                 desc = INTEL_LEGACY_64B_CONTEXT;
578         desc <<= GEN8_CTX_ADDRESSING_MODE_SHIFT;
579
580         desc |= GEN8_CTX_VALID | GEN8_CTX_PRIVILEGE;
581         if (IS_GEN(engine->i915, 8))
582                 desc |= GEN8_CTX_L3LLC_COHERENT;
583
584         return i915_ggtt_offset(ce->state) | desc;
585 }
586
587 static inline unsigned int dword_in_page(void *addr)
588 {
589         return offset_in_page(addr) / sizeof(u32);
590 }
591
592 static void set_offsets(u32 *regs,
593                         const u8 *data,
594                         const struct intel_engine_cs *engine,
595                         bool clear)
596 #define NOP(x) (BIT(7) | (x))
597 #define LRI(count, flags) ((flags) << 6 | (count) | BUILD_BUG_ON_ZERO(count >= BIT(6)))
598 #define POSTED BIT(0)
599 #define REG(x) (((x) >> 2) | BUILD_BUG_ON_ZERO(x >= 0x200))
600 #define REG16(x) \
601         (((x) >> 9) | BIT(7) | BUILD_BUG_ON_ZERO(x >= 0x10000)), \
602         (((x) >> 2) & 0x7f)
603 #define END(total_state_size) 0, (total_state_size)
604 {
605         const u32 base = engine->mmio_base;
606
607         while (*data) {
608                 u8 count, flags;
609
610                 if (*data & BIT(7)) { /* skip */
611                         count = *data++ & ~BIT(7);
612                         if (clear)
613                                 memset32(regs, MI_NOOP, count);
614                         regs += count;
615                         continue;
616                 }
617
618                 count = *data & 0x3f;
619                 flags = *data >> 6;
620                 data++;
621
622                 *regs = MI_LOAD_REGISTER_IMM(count);
623                 if (flags & POSTED)
624                         *regs |= MI_LRI_FORCE_POSTED;
625                 if (INTEL_GEN(engine->i915) >= 11)
626                         *regs |= MI_LRI_LRM_CS_MMIO;
627                 regs++;
628
629                 GEM_BUG_ON(!count);
630                 do {
631                         u32 offset = 0;
632                         u8 v;
633
634                         do {
635                                 v = *data++;
636                                 offset <<= 7;
637                                 offset |= v & ~BIT(7);
638                         } while (v & BIT(7));
639
640                         regs[0] = base + (offset << 2);
641                         if (clear)
642                                 regs[1] = 0;
643                         regs += 2;
644                 } while (--count);
645         }
646
647         if (clear) {
648                 u8 count = *++data;
649
650                 /* Clear past the tail for HW access */
651                 GEM_BUG_ON(dword_in_page(regs) > count);
652                 memset32(regs, MI_NOOP, count - dword_in_page(regs));
653
654                 /* Close the batch; used mainly by live_lrc_layout() */
655                 *regs = MI_BATCH_BUFFER_END;
656                 if (INTEL_GEN(engine->i915) >= 10)
657                         *regs |= BIT(0);
658         }
659 }
660
661 static const u8 gen8_xcs_offsets[] = {
662         NOP(1),
663         LRI(11, 0),
664         REG16(0x244),
665         REG(0x034),
666         REG(0x030),
667         REG(0x038),
668         REG(0x03c),
669         REG(0x168),
670         REG(0x140),
671         REG(0x110),
672         REG(0x11c),
673         REG(0x114),
674         REG(0x118),
675
676         NOP(9),
677         LRI(9, 0),
678         REG16(0x3a8),
679         REG16(0x28c),
680         REG16(0x288),
681         REG16(0x284),
682         REG16(0x280),
683         REG16(0x27c),
684         REG16(0x278),
685         REG16(0x274),
686         REG16(0x270),
687
688         NOP(13),
689         LRI(2, 0),
690         REG16(0x200),
691         REG(0x028),
692
693         END(80)
694 };
695
696 static const u8 gen9_xcs_offsets[] = {
697         NOP(1),
698         LRI(14, POSTED),
699         REG16(0x244),
700         REG(0x034),
701         REG(0x030),
702         REG(0x038),
703         REG(0x03c),
704         REG(0x168),
705         REG(0x140),
706         REG(0x110),
707         REG(0x11c),
708         REG(0x114),
709         REG(0x118),
710         REG(0x1c0),
711         REG(0x1c4),
712         REG(0x1c8),
713
714         NOP(3),
715         LRI(9, POSTED),
716         REG16(0x3a8),
717         REG16(0x28c),
718         REG16(0x288),
719         REG16(0x284),
720         REG16(0x280),
721         REG16(0x27c),
722         REG16(0x278),
723         REG16(0x274),
724         REG16(0x270),
725
726         NOP(13),
727         LRI(1, POSTED),
728         REG16(0x200),
729
730         NOP(13),
731         LRI(44, POSTED),
732         REG(0x028),
733         REG(0x09c),
734         REG(0x0c0),
735         REG(0x178),
736         REG(0x17c),
737         REG16(0x358),
738         REG(0x170),
739         REG(0x150),
740         REG(0x154),
741         REG(0x158),
742         REG16(0x41c),
743         REG16(0x600),
744         REG16(0x604),
745         REG16(0x608),
746         REG16(0x60c),
747         REG16(0x610),
748         REG16(0x614),
749         REG16(0x618),
750         REG16(0x61c),
751         REG16(0x620),
752         REG16(0x624),
753         REG16(0x628),
754         REG16(0x62c),
755         REG16(0x630),
756         REG16(0x634),
757         REG16(0x638),
758         REG16(0x63c),
759         REG16(0x640),
760         REG16(0x644),
761         REG16(0x648),
762         REG16(0x64c),
763         REG16(0x650),
764         REG16(0x654),
765         REG16(0x658),
766         REG16(0x65c),
767         REG16(0x660),
768         REG16(0x664),
769         REG16(0x668),
770         REG16(0x66c),
771         REG16(0x670),
772         REG16(0x674),
773         REG16(0x678),
774         REG16(0x67c),
775         REG(0x068),
776
777         END(176)
778 };
779
780 static const u8 gen12_xcs_offsets[] = {
781         NOP(1),
782         LRI(13, POSTED),
783         REG16(0x244),
784         REG(0x034),
785         REG(0x030),
786         REG(0x038),
787         REG(0x03c),
788         REG(0x168),
789         REG(0x140),
790         REG(0x110),
791         REG(0x1c0),
792         REG(0x1c4),
793         REG(0x1c8),
794         REG(0x180),
795         REG16(0x2b4),
796
797         NOP(5),
798         LRI(9, POSTED),
799         REG16(0x3a8),
800         REG16(0x28c),
801         REG16(0x288),
802         REG16(0x284),
803         REG16(0x280),
804         REG16(0x27c),
805         REG16(0x278),
806         REG16(0x274),
807         REG16(0x270),
808
809         END(80)
810 };
811
812 static const u8 gen8_rcs_offsets[] = {
813         NOP(1),
814         LRI(14, POSTED),
815         REG16(0x244),
816         REG(0x034),
817         REG(0x030),
818         REG(0x038),
819         REG(0x03c),
820         REG(0x168),
821         REG(0x140),
822         REG(0x110),
823         REG(0x11c),
824         REG(0x114),
825         REG(0x118),
826         REG(0x1c0),
827         REG(0x1c4),
828         REG(0x1c8),
829
830         NOP(3),
831         LRI(9, POSTED),
832         REG16(0x3a8),
833         REG16(0x28c),
834         REG16(0x288),
835         REG16(0x284),
836         REG16(0x280),
837         REG16(0x27c),
838         REG16(0x278),
839         REG16(0x274),
840         REG16(0x270),
841
842         NOP(13),
843         LRI(1, 0),
844         REG(0x0c8),
845
846         END(80)
847 };
848
849 static const u8 gen9_rcs_offsets[] = {
850         NOP(1),
851         LRI(14, POSTED),
852         REG16(0x244),
853         REG(0x34),
854         REG(0x30),
855         REG(0x38),
856         REG(0x3c),
857         REG(0x168),
858         REG(0x140),
859         REG(0x110),
860         REG(0x11c),
861         REG(0x114),
862         REG(0x118),
863         REG(0x1c0),
864         REG(0x1c4),
865         REG(0x1c8),
866
867         NOP(3),
868         LRI(9, POSTED),
869         REG16(0x3a8),
870         REG16(0x28c),
871         REG16(0x288),
872         REG16(0x284),
873         REG16(0x280),
874         REG16(0x27c),
875         REG16(0x278),
876         REG16(0x274),
877         REG16(0x270),
878
879         NOP(13),
880         LRI(1, 0),
881         REG(0xc8),
882
883         NOP(13),
884         LRI(44, POSTED),
885         REG(0x28),
886         REG(0x9c),
887         REG(0xc0),
888         REG(0x178),
889         REG(0x17c),
890         REG16(0x358),
891         REG(0x170),
892         REG(0x150),
893         REG(0x154),
894         REG(0x158),
895         REG16(0x41c),
896         REG16(0x600),
897         REG16(0x604),
898         REG16(0x608),
899         REG16(0x60c),
900         REG16(0x610),
901         REG16(0x614),
902         REG16(0x618),
903         REG16(0x61c),
904         REG16(0x620),
905         REG16(0x624),
906         REG16(0x628),
907         REG16(0x62c),
908         REG16(0x630),
909         REG16(0x634),
910         REG16(0x638),
911         REG16(0x63c),
912         REG16(0x640),
913         REG16(0x644),
914         REG16(0x648),
915         REG16(0x64c),
916         REG16(0x650),
917         REG16(0x654),
918         REG16(0x658),
919         REG16(0x65c),
920         REG16(0x660),
921         REG16(0x664),
922         REG16(0x668),
923         REG16(0x66c),
924         REG16(0x670),
925         REG16(0x674),
926         REG16(0x678),
927         REG16(0x67c),
928         REG(0x68),
929
930         END(176)
931 };
932
933 static const u8 gen11_rcs_offsets[] = {
934         NOP(1),
935         LRI(15, POSTED),
936         REG16(0x244),
937         REG(0x034),
938         REG(0x030),
939         REG(0x038),
940         REG(0x03c),
941         REG(0x168),
942         REG(0x140),
943         REG(0x110),
944         REG(0x11c),
945         REG(0x114),
946         REG(0x118),
947         REG(0x1c0),
948         REG(0x1c4),
949         REG(0x1c8),
950         REG(0x180),
951
952         NOP(1),
953         LRI(9, POSTED),
954         REG16(0x3a8),
955         REG16(0x28c),
956         REG16(0x288),
957         REG16(0x284),
958         REG16(0x280),
959         REG16(0x27c),
960         REG16(0x278),
961         REG16(0x274),
962         REG16(0x270),
963
964         LRI(1, POSTED),
965         REG(0x1b0),
966
967         NOP(10),
968         LRI(1, 0),
969         REG(0x0c8),
970
971         END(80)
972 };
973
974 static const u8 gen12_rcs_offsets[] = {
975         NOP(1),
976         LRI(13, POSTED),
977         REG16(0x244),
978         REG(0x034),
979         REG(0x030),
980         REG(0x038),
981         REG(0x03c),
982         REG(0x168),
983         REG(0x140),
984         REG(0x110),
985         REG(0x1c0),
986         REG(0x1c4),
987         REG(0x1c8),
988         REG(0x180),
989         REG16(0x2b4),
990
991         NOP(5),
992         LRI(9, POSTED),
993         REG16(0x3a8),
994         REG16(0x28c),
995         REG16(0x288),
996         REG16(0x284),
997         REG16(0x280),
998         REG16(0x27c),
999         REG16(0x278),
1000         REG16(0x274),
1001         REG16(0x270),
1002
1003         LRI(3, POSTED),
1004         REG(0x1b0),
1005         REG16(0x5a8),
1006         REG16(0x5ac),
1007
1008         NOP(6),
1009         LRI(1, 0),
1010         REG(0x0c8),
1011         NOP(3 + 9 + 1),
1012
1013         LRI(51, POSTED),
1014         REG16(0x588),
1015         REG16(0x588),
1016         REG16(0x588),
1017         REG16(0x588),
1018         REG16(0x588),
1019         REG16(0x588),
1020         REG(0x028),
1021         REG(0x09c),
1022         REG(0x0c0),
1023         REG(0x178),
1024         REG(0x17c),
1025         REG16(0x358),
1026         REG(0x170),
1027         REG(0x150),
1028         REG(0x154),
1029         REG(0x158),
1030         REG16(0x41c),
1031         REG16(0x600),
1032         REG16(0x604),
1033         REG16(0x608),
1034         REG16(0x60c),
1035         REG16(0x610),
1036         REG16(0x614),
1037         REG16(0x618),
1038         REG16(0x61c),
1039         REG16(0x620),
1040         REG16(0x624),
1041         REG16(0x628),
1042         REG16(0x62c),
1043         REG16(0x630),
1044         REG16(0x634),
1045         REG16(0x638),
1046         REG16(0x63c),
1047         REG16(0x640),
1048         REG16(0x644),
1049         REG16(0x648),
1050         REG16(0x64c),
1051         REG16(0x650),
1052         REG16(0x654),
1053         REG16(0x658),
1054         REG16(0x65c),
1055         REG16(0x660),
1056         REG16(0x664),
1057         REG16(0x668),
1058         REG16(0x66c),
1059         REG16(0x670),
1060         REG16(0x674),
1061         REG16(0x678),
1062         REG16(0x67c),
1063         REG(0x068),
1064         REG(0x084),
1065         NOP(1),
1066
1067         END(192)
1068 };
1069
1070 #undef END
1071 #undef REG16
1072 #undef REG
1073 #undef LRI
1074 #undef NOP
1075
1076 static const u8 *reg_offsets(const struct intel_engine_cs *engine)
1077 {
1078         /*
1079          * The gen12+ lists only have the registers we program in the basic
1080          * default state. We rely on the context image using relative
1081          * addressing to automatic fixup the register state between the
1082          * physical engines for virtual engine.
1083          */
1084         GEM_BUG_ON(INTEL_GEN(engine->i915) >= 12 &&
1085                    !intel_engine_has_relative_mmio(engine));
1086
1087         if (engine->class == RENDER_CLASS) {
1088                 if (INTEL_GEN(engine->i915) >= 12)
1089                         return gen12_rcs_offsets;
1090                 else if (INTEL_GEN(engine->i915) >= 11)
1091                         return gen11_rcs_offsets;
1092                 else if (INTEL_GEN(engine->i915) >= 9)
1093                         return gen9_rcs_offsets;
1094                 else
1095                         return gen8_rcs_offsets;
1096         } else {
1097                 if (INTEL_GEN(engine->i915) >= 12)
1098                         return gen12_xcs_offsets;
1099                 else if (INTEL_GEN(engine->i915) >= 9)
1100                         return gen9_xcs_offsets;
1101                 else
1102                         return gen8_xcs_offsets;
1103         }
1104 }
1105
1106 static struct i915_request *
1107 __unwind_incomplete_requests(struct intel_engine_cs *engine)
1108 {
1109         struct i915_request *rq, *rn, *active = NULL;
1110         struct list_head *pl;
1111         int prio = I915_PRIORITY_INVALID;
1112
1113         lockdep_assert_held(&engine->active.lock);
1114
1115         list_for_each_entry_safe_reverse(rq, rn,
1116                                          &engine->active.requests,
1117                                          sched.link) {
1118                 if (i915_request_completed(rq))
1119                         continue; /* XXX */
1120
1121                 __i915_request_unsubmit(rq);
1122
1123                 /*
1124                  * Push the request back into the queue for later resubmission.
1125                  * If this request is not native to this physical engine (i.e.
1126                  * it came from a virtual source), push it back onto the virtual
1127                  * engine so that it can be moved across onto another physical
1128                  * engine as load dictates.
1129                  */
1130                 if (likely(rq->execution_mask == engine->mask)) {
1131                         GEM_BUG_ON(rq_prio(rq) == I915_PRIORITY_INVALID);
1132                         if (rq_prio(rq) != prio) {
1133                                 prio = rq_prio(rq);
1134                                 pl = i915_sched_lookup_priolist(engine, prio);
1135                         }
1136                         GEM_BUG_ON(RB_EMPTY_ROOT(&engine->execlists.queue.rb_root));
1137
1138                         list_move(&rq->sched.link, pl);
1139                         set_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
1140
1141                         /* Check in case we rollback so far we wrap [size/2] */
1142                         if (intel_ring_direction(rq->ring,
1143                                                  rq->tail,
1144                                                  rq->ring->tail + 8) > 0)
1145                                 rq->context->lrc.desc |= CTX_DESC_FORCE_RESTORE;
1146
1147                         active = rq;
1148                 } else {
1149                         struct intel_engine_cs *owner = rq->context->engine;
1150
1151                         WRITE_ONCE(rq->engine, owner);
1152                         owner->submit_request(rq);
1153                         active = NULL;
1154                 }
1155         }
1156
1157         return active;
1158 }
1159
1160 struct i915_request *
1161 execlists_unwind_incomplete_requests(struct intel_engine_execlists *execlists)
1162 {
1163         struct intel_engine_cs *engine =
1164                 container_of(execlists, typeof(*engine), execlists);
1165
1166         return __unwind_incomplete_requests(engine);
1167 }
1168
1169 static inline void
1170 execlists_context_status_change(struct i915_request *rq, unsigned long status)
1171 {
1172         /*
1173          * Only used when GVT-g is enabled now. When GVT-g is disabled,
1174          * The compiler should eliminate this function as dead-code.
1175          */
1176         if (!IS_ENABLED(CONFIG_DRM_I915_GVT))
1177                 return;
1178
1179         atomic_notifier_call_chain(&rq->engine->context_status_notifier,
1180                                    status, rq);
1181 }
1182
1183 static void intel_engine_context_in(struct intel_engine_cs *engine)
1184 {
1185         unsigned long flags;
1186
1187         if (atomic_add_unless(&engine->stats.active, 1, 0))
1188                 return;
1189
1190         write_seqlock_irqsave(&engine->stats.lock, flags);
1191         if (!atomic_add_unless(&engine->stats.active, 1, 0)) {
1192                 engine->stats.start = ktime_get();
1193                 atomic_inc(&engine->stats.active);
1194         }
1195         write_sequnlock_irqrestore(&engine->stats.lock, flags);
1196 }
1197
1198 static void intel_engine_context_out(struct intel_engine_cs *engine)
1199 {
1200         unsigned long flags;
1201
1202         GEM_BUG_ON(!atomic_read(&engine->stats.active));
1203
1204         if (atomic_add_unless(&engine->stats.active, -1, 1))
1205                 return;
1206
1207         write_seqlock_irqsave(&engine->stats.lock, flags);
1208         if (atomic_dec_and_test(&engine->stats.active)) {
1209                 engine->stats.total =
1210                         ktime_add(engine->stats.total,
1211                                   ktime_sub(ktime_get(), engine->stats.start));
1212         }
1213         write_sequnlock_irqrestore(&engine->stats.lock, flags);
1214 }
1215
1216 static void
1217 execlists_check_context(const struct intel_context *ce,
1218                         const struct intel_engine_cs *engine)
1219 {
1220         const struct intel_ring *ring = ce->ring;
1221         u32 *regs = ce->lrc_reg_state;
1222         bool valid = true;
1223         int x;
1224
1225         if (regs[CTX_RING_START] != i915_ggtt_offset(ring->vma)) {
1226                 pr_err("%s: context submitted with incorrect RING_START [%08x], expected %08x\n",
1227                        engine->name,
1228                        regs[CTX_RING_START],
1229                        i915_ggtt_offset(ring->vma));
1230                 regs[CTX_RING_START] = i915_ggtt_offset(ring->vma);
1231                 valid = false;
1232         }
1233
1234         if ((regs[CTX_RING_CTL] & ~(RING_WAIT | RING_WAIT_SEMAPHORE)) !=
1235             (RING_CTL_SIZE(ring->size) | RING_VALID)) {
1236                 pr_err("%s: context submitted with incorrect RING_CTL [%08x], expected %08x\n",
1237                        engine->name,
1238                        regs[CTX_RING_CTL],
1239                        (u32)(RING_CTL_SIZE(ring->size) | RING_VALID));
1240                 regs[CTX_RING_CTL] = RING_CTL_SIZE(ring->size) | RING_VALID;
1241                 valid = false;
1242         }
1243
1244         x = lrc_ring_mi_mode(engine);
1245         if (x != -1 && regs[x + 1] & (regs[x + 1] >> 16) & STOP_RING) {
1246                 pr_err("%s: context submitted with STOP_RING [%08x] in RING_MI_MODE\n",
1247                        engine->name, regs[x + 1]);
1248                 regs[x + 1] &= ~STOP_RING;
1249                 regs[x + 1] |= STOP_RING << 16;
1250                 valid = false;
1251         }
1252
1253         WARN_ONCE(!valid, "Invalid lrc state found before submission\n");
1254 }
1255
1256 static void restore_default_state(struct intel_context *ce,
1257                                   struct intel_engine_cs *engine)
1258 {
1259         u32 *regs;
1260
1261         regs = memset(ce->lrc_reg_state, 0, engine->context_size - PAGE_SIZE);
1262         execlists_init_reg_state(regs, ce, engine, ce->ring, true);
1263
1264         ce->runtime.last = intel_context_get_runtime(ce);
1265 }
1266
1267 static void reset_active(struct i915_request *rq,
1268                          struct intel_engine_cs *engine)
1269 {
1270         struct intel_context * const ce = rq->context;
1271         u32 head;
1272
1273         /*
1274          * The executing context has been cancelled. We want to prevent
1275          * further execution along this context and propagate the error on
1276          * to anything depending on its results.
1277          *
1278          * In __i915_request_submit(), we apply the -EIO and remove the
1279          * requests' payloads for any banned requests. But first, we must
1280          * rewind the context back to the start of the incomplete request so
1281          * that we do not jump back into the middle of the batch.
1282          *
1283          * We preserve the breadcrumbs and semaphores of the incomplete
1284          * requests so that inter-timeline dependencies (i.e other timelines)
1285          * remain correctly ordered. And we defer to __i915_request_submit()
1286          * so that all asynchronous waits are correctly handled.
1287          */
1288         ENGINE_TRACE(engine, "{ rq=%llx:%lld }\n",
1289                      rq->fence.context, rq->fence.seqno);
1290
1291         /* On resubmission of the active request, payload will be scrubbed */
1292         if (i915_request_completed(rq))
1293                 head = rq->tail;
1294         else
1295                 head = active_request(ce->timeline, rq)->head;
1296         head = intel_ring_wrap(ce->ring, head);
1297
1298         /* Scrub the context image to prevent replaying the previous batch */
1299         restore_default_state(ce, engine);
1300         __execlists_update_reg_state(ce, engine, head);
1301
1302         /* We've switched away, so this should be a no-op, but intent matters */
1303         ce->lrc.desc |= CTX_DESC_FORCE_RESTORE;
1304 }
1305
1306 static void st_update_runtime_underflow(struct intel_context *ce, s32 dt)
1307 {
1308 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
1309         ce->runtime.num_underflow += dt < 0;
1310         ce->runtime.max_underflow = max_t(u32, ce->runtime.max_underflow, -dt);
1311 #endif
1312 }
1313
1314 static void intel_context_update_runtime(struct intel_context *ce)
1315 {
1316         u32 old;
1317         s32 dt;
1318
1319         if (intel_context_is_barrier(ce))
1320                 return;
1321
1322         old = ce->runtime.last;
1323         ce->runtime.last = intel_context_get_runtime(ce);
1324         dt = ce->runtime.last - old;
1325
1326         if (unlikely(dt <= 0)) {
1327                 CE_TRACE(ce, "runtime underflow: last=%u, new=%u, delta=%d\n",
1328                          old, ce->runtime.last, dt);
1329                 st_update_runtime_underflow(ce, dt);
1330                 return;
1331         }
1332
1333         ewma_runtime_add(&ce->runtime.avg, dt);
1334         ce->runtime.total += dt;
1335 }
1336
1337 static inline struct intel_engine_cs *
1338 __execlists_schedule_in(struct i915_request *rq)
1339 {
1340         struct intel_engine_cs * const engine = rq->engine;
1341         struct intel_context * const ce = rq->context;
1342
1343         intel_context_get(ce);
1344
1345         if (unlikely(intel_context_is_banned(ce)))
1346                 reset_active(rq, engine);
1347
1348         if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
1349                 execlists_check_context(ce, engine);
1350
1351         if (ce->tag) {
1352                 /* Use a fixed tag for OA and friends */
1353                 GEM_BUG_ON(ce->tag <= BITS_PER_LONG);
1354                 ce->lrc.ccid = ce->tag;
1355         } else {
1356                 /* We don't need a strict matching tag, just different values */
1357                 unsigned int tag = ffs(READ_ONCE(engine->context_tag));
1358
1359                 GEM_BUG_ON(tag == 0 || tag >= BITS_PER_LONG);
1360                 clear_bit(tag - 1, &engine->context_tag);
1361                 ce->lrc.ccid = tag << (GEN11_SW_CTX_ID_SHIFT - 32);
1362
1363                 BUILD_BUG_ON(BITS_PER_LONG > GEN12_MAX_CONTEXT_HW_ID);
1364         }
1365
1366         ce->lrc.ccid |= engine->execlists.ccid;
1367
1368         __intel_gt_pm_get(engine->gt);
1369         if (engine->fw_domain && !atomic_fetch_inc(&engine->fw_active))
1370                 intel_uncore_forcewake_get(engine->uncore, engine->fw_domain);
1371         execlists_context_status_change(rq, INTEL_CONTEXT_SCHEDULE_IN);
1372         intel_engine_context_in(engine);
1373
1374         return engine;
1375 }
1376
1377 static inline struct i915_request *
1378 execlists_schedule_in(struct i915_request *rq, int idx)
1379 {
1380         struct intel_context * const ce = rq->context;
1381         struct intel_engine_cs *old;
1382
1383         GEM_BUG_ON(!intel_engine_pm_is_awake(rq->engine));
1384         trace_i915_request_in(rq, idx);
1385
1386         old = READ_ONCE(ce->inflight);
1387         do {
1388                 if (!old) {
1389                         WRITE_ONCE(ce->inflight, __execlists_schedule_in(rq));
1390                         break;
1391                 }
1392         } while (!try_cmpxchg(&ce->inflight, &old, ptr_inc(old)));
1393
1394         GEM_BUG_ON(intel_context_inflight(ce) != rq->engine);
1395         return i915_request_get(rq);
1396 }
1397
1398 static void kick_siblings(struct i915_request *rq, struct intel_context *ce)
1399 {
1400         struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
1401         struct i915_request *next = READ_ONCE(ve->request);
1402
1403         if (next == rq || (next && next->execution_mask & ~rq->execution_mask))
1404                 tasklet_hi_schedule(&ve->base.execlists.tasklet);
1405 }
1406
1407 static inline void
1408 __execlists_schedule_out(struct i915_request *rq,
1409                          struct intel_engine_cs * const engine,
1410                          unsigned int ccid)
1411 {
1412         struct intel_context * const ce = rq->context;
1413
1414         /*
1415          * NB process_csb() is not under the engine->active.lock and hence
1416          * schedule_out can race with schedule_in meaning that we should
1417          * refrain from doing non-trivial work here.
1418          */
1419
1420         /*
1421          * If we have just completed this context, the engine may now be
1422          * idle and we want to re-enter powersaving.
1423          */
1424         if (list_is_last_rcu(&rq->link, &ce->timeline->requests) &&
1425             i915_request_completed(rq))
1426                 intel_engine_add_retire(engine, ce->timeline);
1427
1428         ccid >>= GEN11_SW_CTX_ID_SHIFT - 32;
1429         ccid &= GEN12_MAX_CONTEXT_HW_ID;
1430         if (ccid < BITS_PER_LONG) {
1431                 GEM_BUG_ON(ccid == 0);
1432                 GEM_BUG_ON(test_bit(ccid - 1, &engine->context_tag));
1433                 set_bit(ccid - 1, &engine->context_tag);
1434         }
1435
1436         intel_context_update_runtime(ce);
1437         intel_engine_context_out(engine);
1438         execlists_context_status_change(rq, INTEL_CONTEXT_SCHEDULE_OUT);
1439         if (engine->fw_domain && !atomic_dec_return(&engine->fw_active))
1440                 intel_uncore_forcewake_put(engine->uncore, engine->fw_domain);
1441         intel_gt_pm_put_async(engine->gt);
1442
1443         /*
1444          * If this is part of a virtual engine, its next request may
1445          * have been blocked waiting for access to the active context.
1446          * We have to kick all the siblings again in case we need to
1447          * switch (e.g. the next request is not runnable on this
1448          * engine). Hopefully, we will already have submitted the next
1449          * request before the tasklet runs and do not need to rebuild
1450          * each virtual tree and kick everyone again.
1451          */
1452         if (ce->engine != engine)
1453                 kick_siblings(rq, ce);
1454
1455         intel_context_put(ce);
1456 }
1457
1458 static inline void
1459 execlists_schedule_out(struct i915_request *rq)
1460 {
1461         struct intel_context * const ce = rq->context;
1462         struct intel_engine_cs *cur, *old;
1463         u32 ccid;
1464
1465         trace_i915_request_out(rq);
1466
1467         ccid = rq->context->lrc.ccid;
1468         old = READ_ONCE(ce->inflight);
1469         do
1470                 cur = ptr_unmask_bits(old, 2) ? ptr_dec(old) : NULL;
1471         while (!try_cmpxchg(&ce->inflight, &old, cur));
1472         if (!cur)
1473                 __execlists_schedule_out(rq, old, ccid);
1474
1475         i915_request_put(rq);
1476 }
1477
1478 static u64 execlists_update_context(struct i915_request *rq)
1479 {
1480         struct intel_context *ce = rq->context;
1481         u64 desc = ce->lrc.desc;
1482         u32 tail, prev;
1483
1484         /*
1485          * WaIdleLiteRestore:bdw,skl
1486          *
1487          * We should never submit the context with the same RING_TAIL twice
1488          * just in case we submit an empty ring, which confuses the HW.
1489          *
1490          * We append a couple of NOOPs (gen8_emit_wa_tail) after the end of
1491          * the normal request to be able to always advance the RING_TAIL on
1492          * subsequent resubmissions (for lite restore). Should that fail us,
1493          * and we try and submit the same tail again, force the context
1494          * reload.
1495          *
1496          * If we need to return to a preempted context, we need to skip the
1497          * lite-restore and force it to reload the RING_TAIL. Otherwise, the
1498          * HW has a tendency to ignore us rewinding the TAIL to the end of
1499          * an earlier request.
1500          */
1501         GEM_BUG_ON(ce->lrc_reg_state[CTX_RING_TAIL] != rq->ring->tail);
1502         prev = rq->ring->tail;
1503         tail = intel_ring_set_tail(rq->ring, rq->tail);
1504         if (unlikely(intel_ring_direction(rq->ring, tail, prev) <= 0))
1505                 desc |= CTX_DESC_FORCE_RESTORE;
1506         ce->lrc_reg_state[CTX_RING_TAIL] = tail;
1507         rq->tail = rq->wa_tail;
1508
1509         /*
1510          * Make sure the context image is complete before we submit it to HW.
1511          *
1512          * Ostensibly, writes (including the WCB) should be flushed prior to
1513          * an uncached write such as our mmio register access, the empirical
1514          * evidence (esp. on Braswell) suggests that the WC write into memory
1515          * may not be visible to the HW prior to the completion of the UC
1516          * register write and that we may begin execution from the context
1517          * before its image is complete leading to invalid PD chasing.
1518          */
1519         wmb();
1520
1521         ce->lrc.desc &= ~CTX_DESC_FORCE_RESTORE;
1522         return desc;
1523 }
1524
1525 static inline void write_desc(struct intel_engine_execlists *execlists, u64 desc, u32 port)
1526 {
1527         if (execlists->ctrl_reg) {
1528                 writel(lower_32_bits(desc), execlists->submit_reg + port * 2);
1529                 writel(upper_32_bits(desc), execlists->submit_reg + port * 2 + 1);
1530         } else {
1531                 writel(upper_32_bits(desc), execlists->submit_reg);
1532                 writel(lower_32_bits(desc), execlists->submit_reg);
1533         }
1534 }
1535
1536 static __maybe_unused char *
1537 dump_port(char *buf, int buflen, const char *prefix, struct i915_request *rq)
1538 {
1539         if (!rq)
1540                 return "";
1541
1542         snprintf(buf, buflen, "%sccid:%x %llx:%lld%s prio %d",
1543                  prefix,
1544                  rq->context->lrc.ccid,
1545                  rq->fence.context, rq->fence.seqno,
1546                  i915_request_completed(rq) ? "!" :
1547                  i915_request_started(rq) ? "*" :
1548                  "",
1549                  rq_prio(rq));
1550
1551         return buf;
1552 }
1553
1554 static __maybe_unused void
1555 trace_ports(const struct intel_engine_execlists *execlists,
1556             const char *msg,
1557             struct i915_request * const *ports)
1558 {
1559         const struct intel_engine_cs *engine =
1560                 container_of(execlists, typeof(*engine), execlists);
1561         char __maybe_unused p0[40], p1[40];
1562
1563         if (!ports[0])
1564                 return;
1565
1566         ENGINE_TRACE(engine, "%s { %s%s }\n", msg,
1567                      dump_port(p0, sizeof(p0), "", ports[0]),
1568                      dump_port(p1, sizeof(p1), ", ", ports[1]));
1569 }
1570
1571 static inline bool
1572 reset_in_progress(const struct intel_engine_execlists *execlists)
1573 {
1574         return unlikely(!__tasklet_is_enabled(&execlists->tasklet));
1575 }
1576
1577 static __maybe_unused bool
1578 assert_pending_valid(const struct intel_engine_execlists *execlists,
1579                      const char *msg)
1580 {
1581         struct intel_engine_cs *engine =
1582                 container_of(execlists, typeof(*engine), execlists);
1583         struct i915_request * const *port, *rq;
1584         struct intel_context *ce = NULL;
1585         bool sentinel = false;
1586         u32 ccid = -1;
1587
1588         trace_ports(execlists, msg, execlists->pending);
1589
1590         /* We may be messing around with the lists during reset, lalala */
1591         if (reset_in_progress(execlists))
1592                 return true;
1593
1594         if (!execlists->pending[0]) {
1595                 GEM_TRACE_ERR("%s: Nothing pending for promotion!\n",
1596                               engine->name);
1597                 return false;
1598         }
1599
1600         if (execlists->pending[execlists_num_ports(execlists)]) {
1601                 GEM_TRACE_ERR("%s: Excess pending[%d] for promotion!\n",
1602                               engine->name, execlists_num_ports(execlists));
1603                 return false;
1604         }
1605
1606         for (port = execlists->pending; (rq = *port); port++) {
1607                 unsigned long flags;
1608                 bool ok = true;
1609
1610                 GEM_BUG_ON(!kref_read(&rq->fence.refcount));
1611                 GEM_BUG_ON(!i915_request_is_active(rq));
1612
1613                 if (ce == rq->context) {
1614                         GEM_TRACE_ERR("%s: Dup context:%llx in pending[%zd]\n",
1615                                       engine->name,
1616                                       ce->timeline->fence_context,
1617                                       port - execlists->pending);
1618                         return false;
1619                 }
1620                 ce = rq->context;
1621
1622                 if (ccid == ce->lrc.ccid) {
1623                         GEM_TRACE_ERR("%s: Dup ccid:%x context:%llx in pending[%zd]\n",
1624                                       engine->name,
1625                                       ccid, ce->timeline->fence_context,
1626                                       port - execlists->pending);
1627                         return false;
1628                 }
1629                 ccid = ce->lrc.ccid;
1630
1631                 /*
1632                  * Sentinels are supposed to be the last request so they flush
1633                  * the current execution off the HW. Check that they are the only
1634                  * request in the pending submission.
1635                  */
1636                 if (sentinel) {
1637                         GEM_TRACE_ERR("%s: context:%llx after sentinel in pending[%zd]\n",
1638                                       engine->name,
1639                                       ce->timeline->fence_context,
1640                                       port - execlists->pending);
1641                         return false;
1642                 }
1643                 sentinel = i915_request_has_sentinel(rq);
1644
1645                 /* Hold tightly onto the lock to prevent concurrent retires! */
1646                 if (!spin_trylock_irqsave(&rq->lock, flags))
1647                         continue;
1648
1649                 if (i915_request_completed(rq))
1650                         goto unlock;
1651
1652                 if (i915_active_is_idle(&ce->active) &&
1653                     !intel_context_is_barrier(ce)) {
1654                         GEM_TRACE_ERR("%s: Inactive context:%llx in pending[%zd]\n",
1655                                       engine->name,
1656                                       ce->timeline->fence_context,
1657                                       port - execlists->pending);
1658                         ok = false;
1659                         goto unlock;
1660                 }
1661
1662                 if (!i915_vma_is_pinned(ce->state)) {
1663                         GEM_TRACE_ERR("%s: Unpinned context:%llx in pending[%zd]\n",
1664                                       engine->name,
1665                                       ce->timeline->fence_context,
1666                                       port - execlists->pending);
1667                         ok = false;
1668                         goto unlock;
1669                 }
1670
1671                 if (!i915_vma_is_pinned(ce->ring->vma)) {
1672                         GEM_TRACE_ERR("%s: Unpinned ring:%llx in pending[%zd]\n",
1673                                       engine->name,
1674                                       ce->timeline->fence_context,
1675                                       port - execlists->pending);
1676                         ok = false;
1677                         goto unlock;
1678                 }
1679
1680 unlock:
1681                 spin_unlock_irqrestore(&rq->lock, flags);
1682                 if (!ok)
1683                         return false;
1684         }
1685
1686         return ce;
1687 }
1688
1689 static void execlists_submit_ports(struct intel_engine_cs *engine)
1690 {
1691         struct intel_engine_execlists *execlists = &engine->execlists;
1692         unsigned int n;
1693
1694         GEM_BUG_ON(!assert_pending_valid(execlists, "submit"));
1695
1696         /*
1697          * We can skip acquiring intel_runtime_pm_get() here as it was taken
1698          * on our behalf by the request (see i915_gem_mark_busy()) and it will
1699          * not be relinquished until the device is idle (see
1700          * i915_gem_idle_work_handler()). As a precaution, we make sure
1701          * that all ELSP are drained i.e. we have processed the CSB,
1702          * before allowing ourselves to idle and calling intel_runtime_pm_put().
1703          */
1704         GEM_BUG_ON(!intel_engine_pm_is_awake(engine));
1705
1706         /*
1707          * ELSQ note: the submit queue is not cleared after being submitted
1708          * to the HW so we need to make sure we always clean it up. This is
1709          * currently ensured by the fact that we always write the same number
1710          * of elsq entries, keep this in mind before changing the loop below.
1711          */
1712         for (n = execlists_num_ports(execlists); n--; ) {
1713                 struct i915_request *rq = execlists->pending[n];
1714
1715                 write_desc(execlists,
1716                            rq ? execlists_update_context(rq) : 0,
1717                            n);
1718         }
1719
1720         /* we need to manually load the submit queue */
1721         if (execlists->ctrl_reg)
1722                 writel(EL_CTRL_LOAD, execlists->ctrl_reg);
1723 }
1724
1725 static bool ctx_single_port_submission(const struct intel_context *ce)
1726 {
1727         return (IS_ENABLED(CONFIG_DRM_I915_GVT) &&
1728                 intel_context_force_single_submission(ce));
1729 }
1730
1731 static bool can_merge_ctx(const struct intel_context *prev,
1732                           const struct intel_context *next)
1733 {
1734         if (prev != next)
1735                 return false;
1736
1737         if (ctx_single_port_submission(prev))
1738                 return false;
1739
1740         return true;
1741 }
1742
1743 static unsigned long i915_request_flags(const struct i915_request *rq)
1744 {
1745         return READ_ONCE(rq->fence.flags);
1746 }
1747
1748 static bool can_merge_rq(const struct i915_request *prev,
1749                          const struct i915_request *next)
1750 {
1751         GEM_BUG_ON(prev == next);
1752         GEM_BUG_ON(!assert_priority_queue(prev, next));
1753
1754         /*
1755          * We do not submit known completed requests. Therefore if the next
1756          * request is already completed, we can pretend to merge it in
1757          * with the previous context (and we will skip updating the ELSP
1758          * and tracking). Thus hopefully keeping the ELSP full with active
1759          * contexts, despite the best efforts of preempt-to-busy to confuse
1760          * us.
1761          */
1762         if (i915_request_completed(next))
1763                 return true;
1764
1765         if (unlikely((i915_request_flags(prev) ^ i915_request_flags(next)) &
1766                      (BIT(I915_FENCE_FLAG_NOPREEMPT) |
1767                       BIT(I915_FENCE_FLAG_SENTINEL))))
1768                 return false;
1769
1770         if (!can_merge_ctx(prev->context, next->context))
1771                 return false;
1772
1773         GEM_BUG_ON(i915_seqno_passed(prev->fence.seqno, next->fence.seqno));
1774         return true;
1775 }
1776
1777 static void virtual_update_register_offsets(u32 *regs,
1778                                             struct intel_engine_cs *engine)
1779 {
1780         set_offsets(regs, reg_offsets(engine), engine, false);
1781 }
1782
1783 static bool virtual_matches(const struct virtual_engine *ve,
1784                             const struct i915_request *rq,
1785                             const struct intel_engine_cs *engine)
1786 {
1787         const struct intel_engine_cs *inflight;
1788
1789         if (!(rq->execution_mask & engine->mask)) /* We peeked too soon! */
1790                 return false;
1791
1792         /*
1793          * We track when the HW has completed saving the context image
1794          * (i.e. when we have seen the final CS event switching out of
1795          * the context) and must not overwrite the context image before
1796          * then. This restricts us to only using the active engine
1797          * while the previous virtualized request is inflight (so
1798          * we reuse the register offsets). This is a very small
1799          * hystersis on the greedy seelction algorithm.
1800          */
1801         inflight = intel_context_inflight(&ve->context);
1802         if (inflight && inflight != engine)
1803                 return false;
1804
1805         return true;
1806 }
1807
1808 static void virtual_xfer_context(struct virtual_engine *ve,
1809                                  struct intel_engine_cs *engine)
1810 {
1811         unsigned int n;
1812
1813         if (likely(engine == ve->siblings[0]))
1814                 return;
1815
1816         GEM_BUG_ON(READ_ONCE(ve->context.inflight));
1817         if (!intel_engine_has_relative_mmio(engine))
1818                 virtual_update_register_offsets(ve->context.lrc_reg_state,
1819                                                 engine);
1820
1821         /*
1822          * Move the bound engine to the top of the list for
1823          * future execution. We then kick this tasklet first
1824          * before checking others, so that we preferentially
1825          * reuse this set of bound registers.
1826          */
1827         for (n = 1; n < ve->num_siblings; n++) {
1828                 if (ve->siblings[n] == engine) {
1829                         swap(ve->siblings[n], ve->siblings[0]);
1830                         break;
1831                 }
1832         }
1833 }
1834
1835 #define for_each_waiter(p__, rq__) \
1836         list_for_each_entry_lockless(p__, \
1837                                      &(rq__)->sched.waiters_list, \
1838                                      wait_link)
1839
1840 #define for_each_signaler(p__, rq__) \
1841         list_for_each_entry_rcu(p__, \
1842                                 &(rq__)->sched.signalers_list, \
1843                                 signal_link)
1844
1845 static void defer_request(struct i915_request *rq, struct list_head * const pl)
1846 {
1847         LIST_HEAD(list);
1848
1849         /*
1850          * We want to move the interrupted request to the back of
1851          * the round-robin list (i.e. its priority level), but
1852          * in doing so, we must then move all requests that were in
1853          * flight and were waiting for the interrupted request to
1854          * be run after it again.
1855          */
1856         do {
1857                 struct i915_dependency *p;
1858
1859                 GEM_BUG_ON(i915_request_is_active(rq));
1860                 list_move_tail(&rq->sched.link, pl);
1861
1862                 for_each_waiter(p, rq) {
1863                         struct i915_request *w =
1864                                 container_of(p->waiter, typeof(*w), sched);
1865
1866                         if (p->flags & I915_DEPENDENCY_WEAK)
1867                                 continue;
1868
1869                         /* Leave semaphores spinning on the other engines */
1870                         if (w->engine != rq->engine)
1871                                 continue;
1872
1873                         /* No waiter should start before its signaler */
1874                         GEM_BUG_ON(i915_request_has_initial_breadcrumb(w) &&
1875                                    i915_request_started(w) &&
1876                                    !i915_request_completed(rq));
1877
1878                         GEM_BUG_ON(i915_request_is_active(w));
1879                         if (!i915_request_is_ready(w))
1880                                 continue;
1881
1882                         if (rq_prio(w) < rq_prio(rq))
1883                                 continue;
1884
1885                         GEM_BUG_ON(rq_prio(w) > rq_prio(rq));
1886                         list_move_tail(&w->sched.link, &list);
1887                 }
1888
1889                 rq = list_first_entry_or_null(&list, typeof(*rq), sched.link);
1890         } while (rq);
1891 }
1892
1893 static void defer_active(struct intel_engine_cs *engine)
1894 {
1895         struct i915_request *rq;
1896
1897         rq = __unwind_incomplete_requests(engine);
1898         if (!rq)
1899                 return;
1900
1901         defer_request(rq, i915_sched_lookup_priolist(engine, rq_prio(rq)));
1902 }
1903
1904 static bool
1905 need_timeslice(const struct intel_engine_cs *engine,
1906                const struct i915_request *rq,
1907                const struct rb_node *rb)
1908 {
1909         int hint;
1910
1911         if (!intel_engine_has_timeslices(engine))
1912                 return false;
1913
1914         hint = engine->execlists.queue_priority_hint;
1915
1916         if (rb) {
1917                 const struct virtual_engine *ve =
1918                         rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
1919                 const struct intel_engine_cs *inflight =
1920                         intel_context_inflight(&ve->context);
1921
1922                 if (!inflight || inflight == engine) {
1923                         struct i915_request *next;
1924
1925                         rcu_read_lock();
1926                         next = READ_ONCE(ve->request);
1927                         if (next)
1928                                 hint = max(hint, rq_prio(next));
1929                         rcu_read_unlock();
1930                 }
1931         }
1932
1933         if (!list_is_last(&rq->sched.link, &engine->active.requests))
1934                 hint = max(hint, rq_prio(list_next_entry(rq, sched.link)));
1935
1936         GEM_BUG_ON(hint >= I915_PRIORITY_UNPREEMPTABLE);
1937         return hint >= effective_prio(rq);
1938 }
1939
1940 static bool
1941 timeslice_yield(const struct intel_engine_execlists *el,
1942                 const struct i915_request *rq)
1943 {
1944         /*
1945          * Once bitten, forever smitten!
1946          *
1947          * If the active context ever busy-waited on a semaphore,
1948          * it will be treated as a hog until the end of its timeslice (i.e.
1949          * until it is scheduled out and replaced by a new submission,
1950          * possibly even its own lite-restore). The HW only sends an interrupt
1951          * on the first miss, and we do know if that semaphore has been
1952          * signaled, or even if it is now stuck on another semaphore. Play
1953          * safe, yield if it might be stuck -- it will be given a fresh
1954          * timeslice in the near future.
1955          */
1956         return rq->context->lrc.ccid == READ_ONCE(el->yield);
1957 }
1958
1959 static bool
1960 timeslice_expired(const struct intel_engine_execlists *el,
1961                   const struct i915_request *rq)
1962 {
1963         return timer_expired(&el->timer) || timeslice_yield(el, rq);
1964 }
1965
1966 static int
1967 switch_prio(struct intel_engine_cs *engine, const struct i915_request *rq)
1968 {
1969         if (list_is_last(&rq->sched.link, &engine->active.requests))
1970                 return engine->execlists.queue_priority_hint;
1971
1972         return rq_prio(list_next_entry(rq, sched.link));
1973 }
1974
1975 static inline unsigned long
1976 timeslice(const struct intel_engine_cs *engine)
1977 {
1978         return READ_ONCE(engine->props.timeslice_duration_ms);
1979 }
1980
1981 static unsigned long active_timeslice(const struct intel_engine_cs *engine)
1982 {
1983         const struct intel_engine_execlists *execlists = &engine->execlists;
1984         const struct i915_request *rq = *execlists->active;
1985
1986         if (!rq || i915_request_completed(rq))
1987                 return 0;
1988
1989         if (READ_ONCE(execlists->switch_priority_hint) < effective_prio(rq))
1990                 return 0;
1991
1992         return timeslice(engine);
1993 }
1994
1995 static void set_timeslice(struct intel_engine_cs *engine)
1996 {
1997         unsigned long duration;
1998
1999         if (!intel_engine_has_timeslices(engine))
2000                 return;
2001
2002         duration = active_timeslice(engine);
2003         ENGINE_TRACE(engine, "bump timeslicing, interval:%lu", duration);
2004
2005         set_timer_ms(&engine->execlists.timer, duration);
2006 }
2007
2008 static void start_timeslice(struct intel_engine_cs *engine, int prio)
2009 {
2010         struct intel_engine_execlists *execlists = &engine->execlists;
2011         unsigned long duration;
2012
2013         if (!intel_engine_has_timeslices(engine))
2014                 return;
2015
2016         WRITE_ONCE(execlists->switch_priority_hint, prio);
2017         if (prio == INT_MIN)
2018                 return;
2019
2020         if (timer_pending(&execlists->timer))
2021                 return;
2022
2023         duration = timeslice(engine);
2024         ENGINE_TRACE(engine,
2025                      "start timeslicing, prio:%d, interval:%lu",
2026                      prio, duration);
2027
2028         set_timer_ms(&execlists->timer, duration);
2029 }
2030
2031 static void record_preemption(struct intel_engine_execlists *execlists)
2032 {
2033         (void)I915_SELFTEST_ONLY(execlists->preempt_hang.count++);
2034 }
2035
2036 static unsigned long active_preempt_timeout(struct intel_engine_cs *engine,
2037                                             const struct i915_request *rq)
2038 {
2039         if (!rq)
2040                 return 0;
2041
2042         /* Force a fast reset for terminated contexts (ignoring sysfs!) */
2043         if (unlikely(intel_context_is_banned(rq->context)))
2044                 return 1;
2045
2046         return READ_ONCE(engine->props.preempt_timeout_ms);
2047 }
2048
2049 static void set_preempt_timeout(struct intel_engine_cs *engine,
2050                                 const struct i915_request *rq)
2051 {
2052         if (!intel_engine_has_preempt_reset(engine))
2053                 return;
2054
2055         set_timer_ms(&engine->execlists.preempt,
2056                      active_preempt_timeout(engine, rq));
2057 }
2058
2059 static inline void clear_ports(struct i915_request **ports, int count)
2060 {
2061         memset_p((void **)ports, NULL, count);
2062 }
2063
2064 static inline void
2065 copy_ports(struct i915_request **dst, struct i915_request **src, int count)
2066 {
2067         /* A memcpy_p() would be very useful here! */
2068         while (count--)
2069                 WRITE_ONCE(*dst++, *src++); /* avoid write tearing */
2070 }
2071
2072 static void execlists_dequeue(struct intel_engine_cs *engine)
2073 {
2074         struct intel_engine_execlists * const execlists = &engine->execlists;
2075         struct i915_request **port = execlists->pending;
2076         struct i915_request ** const last_port = port + execlists->port_mask;
2077         struct i915_request * const *active;
2078         struct i915_request *last;
2079         struct rb_node *rb;
2080         bool submit = false;
2081
2082         /*
2083          * Hardware submission is through 2 ports. Conceptually each port
2084          * has a (RING_START, RING_HEAD, RING_TAIL) tuple. RING_START is
2085          * static for a context, and unique to each, so we only execute
2086          * requests belonging to a single context from each ring. RING_HEAD
2087          * is maintained by the CS in the context image, it marks the place
2088          * where it got up to last time, and through RING_TAIL we tell the CS
2089          * where we want to execute up to this time.
2090          *
2091          * In this list the requests are in order of execution. Consecutive
2092          * requests from the same context are adjacent in the ringbuffer. We
2093          * can combine these requests into a single RING_TAIL update:
2094          *
2095          *              RING_HEAD...req1...req2
2096          *                                    ^- RING_TAIL
2097          * since to execute req2 the CS must first execute req1.
2098          *
2099          * Our goal then is to point each port to the end of a consecutive
2100          * sequence of requests as being the most optimal (fewest wake ups
2101          * and context switches) submission.
2102          */
2103
2104         for (rb = rb_first_cached(&execlists->virtual); rb; ) {
2105                 struct virtual_engine *ve =
2106                         rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
2107                 struct i915_request *rq = READ_ONCE(ve->request);
2108
2109                 if (!rq) { /* lazily cleanup after another engine handled rq */
2110                         rb_erase_cached(rb, &execlists->virtual);
2111                         RB_CLEAR_NODE(rb);
2112                         rb = rb_first_cached(&execlists->virtual);
2113                         continue;
2114                 }
2115
2116                 if (!virtual_matches(ve, rq, engine)) {
2117                         rb = rb_next(rb);
2118                         continue;
2119                 }
2120
2121                 break;
2122         }
2123
2124         /*
2125          * If the queue is higher priority than the last
2126          * request in the currently active context, submit afresh.
2127          * We will resubmit again afterwards in case we need to split
2128          * the active context to interject the preemption request,
2129          * i.e. we will retrigger preemption following the ack in case
2130          * of trouble.
2131          */
2132         active = READ_ONCE(execlists->active);
2133
2134         /*
2135          * In theory we can skip over completed contexts that have not
2136          * yet been processed by events (as those events are in flight):
2137          *
2138          * while ((last = *active) && i915_request_completed(last))
2139          *      active++;
2140          *
2141          * However, the GPU cannot handle this as it will ultimately
2142          * find itself trying to jump back into a context it has just
2143          * completed and barf.
2144          */
2145
2146         if ((last = *active)) {
2147                 if (need_preempt(engine, last, rb)) {
2148                         if (i915_request_completed(last)) {
2149                                 tasklet_hi_schedule(&execlists->tasklet);
2150                                 return;
2151                         }
2152
2153                         ENGINE_TRACE(engine,
2154                                      "preempting last=%llx:%lld, prio=%d, hint=%d\n",
2155                                      last->fence.context,
2156                                      last->fence.seqno,
2157                                      last->sched.attr.priority,
2158                                      execlists->queue_priority_hint);
2159                         record_preemption(execlists);
2160
2161                         /*
2162                          * Don't let the RING_HEAD advance past the breadcrumb
2163                          * as we unwind (and until we resubmit) so that we do
2164                          * not accidentally tell it to go backwards.
2165                          */
2166                         ring_set_paused(engine, 1);
2167
2168                         /*
2169                          * Note that we have not stopped the GPU at this point,
2170                          * so we are unwinding the incomplete requests as they
2171                          * remain inflight and so by the time we do complete
2172                          * the preemption, some of the unwound requests may
2173                          * complete!
2174                          */
2175                         __unwind_incomplete_requests(engine);
2176
2177                         last = NULL;
2178                 } else if (need_timeslice(engine, last, rb) &&
2179                            timeslice_expired(execlists, last)) {
2180                         if (i915_request_completed(last)) {
2181                                 tasklet_hi_schedule(&execlists->tasklet);
2182                                 return;
2183                         }
2184
2185                         ENGINE_TRACE(engine,
2186                                      "expired last=%llx:%lld, prio=%d, hint=%d, yield?=%s\n",
2187                                      last->fence.context,
2188                                      last->fence.seqno,
2189                                      last->sched.attr.priority,
2190                                      execlists->queue_priority_hint,
2191                                      yesno(timeslice_yield(execlists, last)));
2192
2193                         ring_set_paused(engine, 1);
2194                         defer_active(engine);
2195
2196                         /*
2197                          * Unlike for preemption, if we rewind and continue
2198                          * executing the same context as previously active,
2199                          * the order of execution will remain the same and
2200                          * the tail will only advance. We do not need to
2201                          * force a full context restore, as a lite-restore
2202                          * is sufficient to resample the monotonic TAIL.
2203                          *
2204                          * If we switch to any other context, similarly we
2205                          * will not rewind TAIL of current context, and
2206                          * normal save/restore will preserve state and allow
2207                          * us to later continue executing the same request.
2208                          */
2209                         last = NULL;
2210                 } else {
2211                         /*
2212                          * Otherwise if we already have a request pending
2213                          * for execution after the current one, we can
2214                          * just wait until the next CS event before
2215                          * queuing more. In either case we will force a
2216                          * lite-restore preemption event, but if we wait
2217                          * we hopefully coalesce several updates into a single
2218                          * submission.
2219                          */
2220                         if (!list_is_last(&last->sched.link,
2221                                           &engine->active.requests)) {
2222                                 /*
2223                                  * Even if ELSP[1] is occupied and not worthy
2224                                  * of timeslices, our queue might be.
2225                                  */
2226                                 start_timeslice(engine, queue_prio(execlists));
2227                                 return;
2228                         }
2229                 }
2230         }
2231
2232         while (rb) { /* XXX virtual is always taking precedence */
2233                 struct virtual_engine *ve =
2234                         rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
2235                 struct i915_request *rq;
2236
2237                 spin_lock(&ve->base.active.lock);
2238
2239                 rq = ve->request;
2240                 if (unlikely(!rq)) { /* lost the race to a sibling */
2241                         spin_unlock(&ve->base.active.lock);
2242                         rb_erase_cached(rb, &execlists->virtual);
2243                         RB_CLEAR_NODE(rb);
2244                         rb = rb_first_cached(&execlists->virtual);
2245                         continue;
2246                 }
2247
2248                 GEM_BUG_ON(rq != ve->request);
2249                 GEM_BUG_ON(rq->engine != &ve->base);
2250                 GEM_BUG_ON(rq->context != &ve->context);
2251
2252                 if (rq_prio(rq) >= queue_prio(execlists)) {
2253                         if (!virtual_matches(ve, rq, engine)) {
2254                                 spin_unlock(&ve->base.active.lock);
2255                                 rb = rb_next(rb);
2256                                 continue;
2257                         }
2258
2259                         if (last && !can_merge_rq(last, rq)) {
2260                                 spin_unlock(&ve->base.active.lock);
2261                                 start_timeslice(engine, rq_prio(rq));
2262                                 return; /* leave this for another sibling */
2263                         }
2264
2265                         ENGINE_TRACE(engine,
2266                                      "virtual rq=%llx:%lld%s, new engine? %s\n",
2267                                      rq->fence.context,
2268                                      rq->fence.seqno,
2269                                      i915_request_completed(rq) ? "!" :
2270                                      i915_request_started(rq) ? "*" :
2271                                      "",
2272                                      yesno(engine != ve->siblings[0]));
2273
2274                         WRITE_ONCE(ve->request, NULL);
2275                         WRITE_ONCE(ve->base.execlists.queue_priority_hint,
2276                                    INT_MIN);
2277                         rb_erase_cached(rb, &execlists->virtual);
2278                         RB_CLEAR_NODE(rb);
2279
2280                         GEM_BUG_ON(!(rq->execution_mask & engine->mask));
2281                         WRITE_ONCE(rq->engine, engine);
2282
2283                         if (__i915_request_submit(rq)) {
2284                                 /*
2285                                  * Only after we confirm that we will submit
2286                                  * this request (i.e. it has not already
2287                                  * completed), do we want to update the context.
2288                                  *
2289                                  * This serves two purposes. It avoids
2290                                  * unnecessary work if we are resubmitting an
2291                                  * already completed request after timeslicing.
2292                                  * But more importantly, it prevents us altering
2293                                  * ve->siblings[] on an idle context, where
2294                                  * we may be using ve->siblings[] in
2295                                  * virtual_context_enter / virtual_context_exit.
2296                                  */
2297                                 virtual_xfer_context(ve, engine);
2298                                 GEM_BUG_ON(ve->siblings[0] != engine);
2299
2300                                 submit = true;
2301                                 last = rq;
2302                         }
2303                         i915_request_put(rq);
2304
2305                         /*
2306                          * Hmm, we have a bunch of virtual engine requests,
2307                          * but the first one was already completed (thanks
2308                          * preempt-to-busy!). Keep looking at the veng queue
2309                          * until we have no more relevant requests (i.e.
2310                          * the normal submit queue has higher priority).
2311                          */
2312                         if (!submit) {
2313                                 spin_unlock(&ve->base.active.lock);
2314                                 rb = rb_first_cached(&execlists->virtual);
2315                                 continue;
2316                         }
2317                 }
2318
2319                 spin_unlock(&ve->base.active.lock);
2320                 break;
2321         }
2322
2323         while ((rb = rb_first_cached(&execlists->queue))) {
2324                 struct i915_priolist *p = to_priolist(rb);
2325                 struct i915_request *rq, *rn;
2326                 int i;
2327
2328                 priolist_for_each_request_consume(rq, rn, p, i) {
2329                         bool merge = true;
2330
2331                         /*
2332                          * Can we combine this request with the current port?
2333                          * It has to be the same context/ringbuffer and not
2334                          * have any exceptions (e.g. GVT saying never to
2335                          * combine contexts).
2336                          *
2337                          * If we can combine the requests, we can execute both
2338                          * by updating the RING_TAIL to point to the end of the
2339                          * second request, and so we never need to tell the
2340                          * hardware about the first.
2341                          */
2342                         if (last && !can_merge_rq(last, rq)) {
2343                                 /*
2344                                  * If we are on the second port and cannot
2345                                  * combine this request with the last, then we
2346                                  * are done.
2347                                  */
2348                                 if (port == last_port)
2349                                         goto done;
2350
2351                                 /*
2352                                  * We must not populate both ELSP[] with the
2353                                  * same LRCA, i.e. we must submit 2 different
2354                                  * contexts if we submit 2 ELSP.
2355                                  */
2356                                 if (last->context == rq->context)
2357                                         goto done;
2358
2359                                 if (i915_request_has_sentinel(last))
2360                                         goto done;
2361
2362                                 /*
2363                                  * If GVT overrides us we only ever submit
2364                                  * port[0], leaving port[1] empty. Note that we
2365                                  * also have to be careful that we don't queue
2366                                  * the same context (even though a different
2367                                  * request) to the second port.
2368                                  */
2369                                 if (ctx_single_port_submission(last->context) ||
2370                                     ctx_single_port_submission(rq->context))
2371                                         goto done;
2372
2373                                 merge = false;
2374                         }
2375
2376                         if (__i915_request_submit(rq)) {
2377                                 if (!merge) {
2378                                         *port = execlists_schedule_in(last, port - execlists->pending);
2379                                         port++;
2380                                         last = NULL;
2381                                 }
2382
2383                                 GEM_BUG_ON(last &&
2384                                            !can_merge_ctx(last->context,
2385                                                           rq->context));
2386                                 GEM_BUG_ON(last &&
2387                                            i915_seqno_passed(last->fence.seqno,
2388                                                              rq->fence.seqno));
2389
2390                                 submit = true;
2391                                 last = rq;
2392                         }
2393                 }
2394
2395                 rb_erase_cached(&p->node, &execlists->queue);
2396                 i915_priolist_free(p);
2397         }
2398
2399 done:
2400         /*
2401          * Here be a bit of magic! Or sleight-of-hand, whichever you prefer.
2402          *
2403          * We choose the priority hint such that if we add a request of greater
2404          * priority than this, we kick the submission tasklet to decide on
2405          * the right order of submitting the requests to hardware. We must
2406          * also be prepared to reorder requests as they are in-flight on the
2407          * HW. We derive the priority hint then as the first "hole" in
2408          * the HW submission ports and if there are no available slots,
2409          * the priority of the lowest executing request, i.e. last.
2410          *
2411          * When we do receive a higher priority request ready to run from the
2412          * user, see queue_request(), the priority hint is bumped to that
2413          * request triggering preemption on the next dequeue (or subsequent
2414          * interrupt for secondary ports).
2415          */
2416         execlists->queue_priority_hint = queue_prio(execlists);
2417
2418         if (submit) {
2419                 *port = execlists_schedule_in(last, port - execlists->pending);
2420                 execlists->switch_priority_hint =
2421                         switch_prio(engine, *execlists->pending);
2422
2423                 /*
2424                  * Skip if we ended up with exactly the same set of requests,
2425                  * e.g. trying to timeslice a pair of ordered contexts
2426                  */
2427                 if (!memcmp(active, execlists->pending,
2428                             (port - execlists->pending + 1) * sizeof(*port))) {
2429                         do
2430                                 execlists_schedule_out(fetch_and_zero(port));
2431                         while (port-- != execlists->pending);
2432
2433                         goto skip_submit;
2434                 }
2435                 clear_ports(port + 1, last_port - port);
2436
2437                 WRITE_ONCE(execlists->yield, -1);
2438                 set_preempt_timeout(engine, *active);
2439                 execlists_submit_ports(engine);
2440         } else {
2441                 start_timeslice(engine, execlists->queue_priority_hint);
2442 skip_submit:
2443                 ring_set_paused(engine, 0);
2444         }
2445 }
2446
2447 static void
2448 cancel_port_requests(struct intel_engine_execlists * const execlists)
2449 {
2450         struct i915_request * const *port;
2451
2452         for (port = execlists->pending; *port; port++)
2453                 execlists_schedule_out(*port);
2454         clear_ports(execlists->pending, ARRAY_SIZE(execlists->pending));
2455
2456         /* Mark the end of active before we overwrite *active */
2457         for (port = xchg(&execlists->active, execlists->pending); *port; port++)
2458                 execlists_schedule_out(*port);
2459         clear_ports(execlists->inflight, ARRAY_SIZE(execlists->inflight));
2460
2461         smp_wmb(); /* complete the seqlock for execlists_active() */
2462         WRITE_ONCE(execlists->active, execlists->inflight);
2463 }
2464
2465 static inline void
2466 invalidate_csb_entries(const u64 *first, const u64 *last)
2467 {
2468         clflush((void *)first);
2469         clflush((void *)last);
2470 }
2471
2472 /*
2473  * Starting with Gen12, the status has a new format:
2474  *
2475  *     bit  0:     switched to new queue
2476  *     bit  1:     reserved
2477  *     bit  2:     semaphore wait mode (poll or signal), only valid when
2478  *                 switch detail is set to "wait on semaphore"
2479  *     bits 3-5:   engine class
2480  *     bits 6-11:  engine instance
2481  *     bits 12-14: reserved
2482  *     bits 15-25: sw context id of the lrc the GT switched to
2483  *     bits 26-31: sw counter of the lrc the GT switched to
2484  *     bits 32-35: context switch detail
2485  *                  - 0: ctx complete
2486  *                  - 1: wait on sync flip
2487  *                  - 2: wait on vblank
2488  *                  - 3: wait on scanline
2489  *                  - 4: wait on semaphore
2490  *                  - 5: context preempted (not on SEMAPHORE_WAIT or
2491  *                       WAIT_FOR_EVENT)
2492  *     bit  36:    reserved
2493  *     bits 37-43: wait detail (for switch detail 1 to 4)
2494  *     bits 44-46: reserved
2495  *     bits 47-57: sw context id of the lrc the GT switched away from
2496  *     bits 58-63: sw counter of the lrc the GT switched away from
2497  */
2498 static inline bool gen12_csb_parse(const u64 *csb)
2499 {
2500         bool ctx_away_valid;
2501         bool new_queue;
2502         u64 entry;
2503
2504         /* HSD#22011248461 */
2505         entry = READ_ONCE(*csb);
2506         if (unlikely(entry == -1)) {
2507                 preempt_disable();
2508                 if (wait_for_atomic_us((entry = READ_ONCE(*csb)) != -1, 50))
2509                         GEM_WARN_ON("50us CSB timeout");
2510                 preempt_enable();
2511         }
2512         WRITE_ONCE(*(u64 *)csb, -1);
2513
2514         ctx_away_valid = GEN12_CSB_CTX_VALID(upper_32_bits(entry));
2515         new_queue =
2516                 lower_32_bits(entry) & GEN12_CTX_STATUS_SWITCHED_TO_NEW_QUEUE;
2517
2518         /*
2519          * The context switch detail is not guaranteed to be 5 when a preemption
2520          * occurs, so we can't just check for that. The check below works for
2521          * all the cases we care about, including preemptions of WAIT
2522          * instructions and lite-restore. Preempt-to-idle via the CTRL register
2523          * would require some extra handling, but we don't support that.
2524          */
2525         if (!ctx_away_valid || new_queue) {
2526                 GEM_BUG_ON(!GEN12_CSB_CTX_VALID(lower_32_bits(entry)));
2527                 return true;
2528         }
2529
2530         /*
2531          * switch detail = 5 is covered by the case above and we do not expect a
2532          * context switch on an unsuccessful wait instruction since we always
2533          * use polling mode.
2534          */
2535         GEM_BUG_ON(GEN12_CTX_SWITCH_DETAIL(upper_32_bits(entry)));
2536         return false;
2537 }
2538
2539 static inline bool gen8_csb_parse(const u64 *csb)
2540 {
2541         return *csb & (GEN8_CTX_STATUS_IDLE_ACTIVE | GEN8_CTX_STATUS_PREEMPTED);
2542 }
2543
2544 static void process_csb(struct intel_engine_cs *engine)
2545 {
2546         struct intel_engine_execlists * const execlists = &engine->execlists;
2547         const u64 * const buf = execlists->csb_status;
2548         const u8 num_entries = execlists->csb_size;
2549         u8 head, tail;
2550
2551         /*
2552          * As we modify our execlists state tracking we require exclusive
2553          * access. Either we are inside the tasklet, or the tasklet is disabled
2554          * and we assume that is only inside the reset paths and so serialised.
2555          */
2556         GEM_BUG_ON(!tasklet_is_locked(&execlists->tasklet) &&
2557                    !reset_in_progress(execlists));
2558         GEM_BUG_ON(!intel_engine_in_execlists_submission_mode(engine));
2559
2560         /*
2561          * Note that csb_write, csb_status may be either in HWSP or mmio.
2562          * When reading from the csb_write mmio register, we have to be
2563          * careful to only use the GEN8_CSB_WRITE_PTR portion, which is
2564          * the low 4bits. As it happens we know the next 4bits are always
2565          * zero and so we can simply masked off the low u8 of the register
2566          * and treat it identically to reading from the HWSP (without having
2567          * to use explicit shifting and masking, and probably bifurcating
2568          * the code to handle the legacy mmio read).
2569          */
2570         head = execlists->csb_head;
2571         tail = READ_ONCE(*execlists->csb_write);
2572         if (unlikely(head == tail))
2573                 return;
2574
2575         /*
2576          * We will consume all events from HW, or at least pretend to.
2577          *
2578          * The sequence of events from the HW is deterministic, and derived
2579          * from our writes to the ELSP, with a smidgen of variability for
2580          * the arrival of the asynchronous requests wrt to the inflight
2581          * execution. If the HW sends an event that does not correspond with
2582          * the one we are expecting, we have to abandon all hope as we lose
2583          * all tracking of what the engine is actually executing. We will
2584          * only detect we are out of sequence with the HW when we get an
2585          * 'impossible' event because we have already drained our own
2586          * preemption/promotion queue. If this occurs, we know that we likely
2587          * lost track of execution earlier and must unwind and restart, the
2588          * simplest way is by stop processing the event queue and force the
2589          * engine to reset.
2590          */
2591         execlists->csb_head = tail;
2592         ENGINE_TRACE(engine, "cs-irq head=%d, tail=%d\n", head, tail);
2593
2594         /*
2595          * Hopefully paired with a wmb() in HW!
2596          *
2597          * We must complete the read of the write pointer before any reads
2598          * from the CSB, so that we do not see stale values. Without an rmb
2599          * (lfence) the HW may speculatively perform the CSB[] reads *before*
2600          * we perform the READ_ONCE(*csb_write).
2601          */
2602         rmb();
2603         do {
2604                 bool promote;
2605
2606                 if (++head == num_entries)
2607                         head = 0;
2608
2609                 /*
2610                  * We are flying near dragons again.
2611                  *
2612                  * We hold a reference to the request in execlist_port[]
2613                  * but no more than that. We are operating in softirq
2614                  * context and so cannot hold any mutex or sleep. That
2615                  * prevents us stopping the requests we are processing
2616                  * in port[] from being retired simultaneously (the
2617                  * breadcrumb will be complete before we see the
2618                  * context-switch). As we only hold the reference to the
2619                  * request, any pointer chasing underneath the request
2620                  * is subject to a potential use-after-free. Thus we
2621                  * store all of the bookkeeping within port[] as
2622                  * required, and avoid using unguarded pointers beneath
2623                  * request itself. The same applies to the atomic
2624                  * status notifier.
2625                  */
2626
2627                 ENGINE_TRACE(engine, "csb[%d]: status=0x%08x:0x%08x\n",
2628                              head,
2629                              upper_32_bits(buf[head]),
2630                              lower_32_bits(buf[head]));
2631
2632                 if (INTEL_GEN(engine->i915) >= 12)
2633                         promote = gen12_csb_parse(buf + head);
2634                 else
2635                         promote = gen8_csb_parse(buf + head);
2636                 if (promote) {
2637                         struct i915_request * const *old = execlists->active;
2638
2639                         if (GEM_WARN_ON(!*execlists->pending)) {
2640                                 execlists->error_interrupt |= ERROR_CSB;
2641                                 break;
2642                         }
2643
2644                         ring_set_paused(engine, 0);
2645
2646                         /* Point active to the new ELSP; prevent overwriting */
2647                         WRITE_ONCE(execlists->active, execlists->pending);
2648                         smp_wmb(); /* notify execlists_active() */
2649
2650                         /* cancel old inflight, prepare for switch */
2651                         trace_ports(execlists, "preempted", old);
2652                         while (*old)
2653                                 execlists_schedule_out(*old++);
2654
2655                         /* switch pending to inflight */
2656                         GEM_BUG_ON(!assert_pending_valid(execlists, "promote"));
2657                         copy_ports(execlists->inflight,
2658                                    execlists->pending,
2659                                    execlists_num_ports(execlists));
2660                         smp_wmb(); /* complete the seqlock */
2661                         WRITE_ONCE(execlists->active, execlists->inflight);
2662
2663                         /* XXX Magic delay for tgl */
2664                         ENGINE_POSTING_READ(engine, RING_CONTEXT_STATUS_PTR);
2665
2666                         WRITE_ONCE(execlists->pending[0], NULL);
2667                 } else {
2668                         if (GEM_WARN_ON(!*execlists->active)) {
2669                                 execlists->error_interrupt |= ERROR_CSB;
2670                                 break;
2671                         }
2672
2673                         /* port0 completed, advanced to port1 */
2674                         trace_ports(execlists, "completed", execlists->active);
2675
2676                         /*
2677                          * We rely on the hardware being strongly
2678                          * ordered, that the breadcrumb write is
2679                          * coherent (visible from the CPU) before the
2680                          * user interrupt is processed. One might assume
2681                          * that the breadcrumb write being before the
2682                          * user interrupt and the CS event for the context
2683                          * switch would therefore be before the CS event
2684                          * itself...
2685                          */
2686                         if (GEM_SHOW_DEBUG() &&
2687                             !i915_request_completed(*execlists->active)) {
2688                                 struct i915_request *rq = *execlists->active;
2689                                 const u32 *regs __maybe_unused =
2690                                         rq->context->lrc_reg_state;
2691
2692                                 ENGINE_TRACE(engine,
2693                                              "context completed before request!\n");
2694                                 ENGINE_TRACE(engine,
2695                                              "ring:{start:0x%08x, head:%04x, tail:%04x, ctl:%08x, mode:%08x}\n",
2696                                              ENGINE_READ(engine, RING_START),
2697                                              ENGINE_READ(engine, RING_HEAD) & HEAD_ADDR,
2698                                              ENGINE_READ(engine, RING_TAIL) & TAIL_ADDR,
2699                                              ENGINE_READ(engine, RING_CTL),
2700                                              ENGINE_READ(engine, RING_MI_MODE));
2701                                 ENGINE_TRACE(engine,
2702                                              "rq:{start:%08x, head:%04x, tail:%04x, seqno:%llx:%d, hwsp:%d}, ",
2703                                              i915_ggtt_offset(rq->ring->vma),
2704                                              rq->head, rq->tail,
2705                                              rq->fence.context,
2706                                              lower_32_bits(rq->fence.seqno),
2707                                              hwsp_seqno(rq));
2708                                 ENGINE_TRACE(engine,
2709                                              "ctx:{start:%08x, head:%04x, tail:%04x}, ",
2710                                              regs[CTX_RING_START],
2711                                              regs[CTX_RING_HEAD],
2712                                              regs[CTX_RING_TAIL]);
2713                         }
2714
2715                         execlists_schedule_out(*execlists->active++);
2716
2717                         GEM_BUG_ON(execlists->active - execlists->inflight >
2718                                    execlists_num_ports(execlists));
2719                 }
2720         } while (head != tail);
2721
2722         set_timeslice(engine);
2723
2724         /*
2725          * Gen11 has proven to fail wrt global observation point between
2726          * entry and tail update, failing on the ordering and thus
2727          * we see an old entry in the context status buffer.
2728          *
2729          * Forcibly evict out entries for the next gpu csb update,
2730          * to increase the odds that we get a fresh entries with non
2731          * working hardware. The cost for doing so comes out mostly with
2732          * the wash as hardware, working or not, will need to do the
2733          * invalidation before.
2734          */
2735         invalidate_csb_entries(&buf[0], &buf[num_entries - 1]);
2736 }
2737
2738 static void __execlists_submission_tasklet(struct intel_engine_cs *const engine)
2739 {
2740         lockdep_assert_held(&engine->active.lock);
2741         if (!READ_ONCE(engine->execlists.pending[0])) {
2742                 rcu_read_lock(); /* protect peeking at execlists->active */
2743                 execlists_dequeue(engine);
2744                 rcu_read_unlock();
2745         }
2746 }
2747
2748 static void __execlists_hold(struct i915_request *rq)
2749 {
2750         LIST_HEAD(list);
2751
2752         do {
2753                 struct i915_dependency *p;
2754
2755                 if (i915_request_is_active(rq))
2756                         __i915_request_unsubmit(rq);
2757
2758                 clear_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
2759                 list_move_tail(&rq->sched.link, &rq->engine->active.hold);
2760                 i915_request_set_hold(rq);
2761                 RQ_TRACE(rq, "on hold\n");
2762
2763                 for_each_waiter(p, rq) {
2764                         struct i915_request *w =
2765                                 container_of(p->waiter, typeof(*w), sched);
2766
2767                         /* Leave semaphores spinning on the other engines */
2768                         if (w->engine != rq->engine)
2769                                 continue;
2770
2771                         if (!i915_request_is_ready(w))
2772                                 continue;
2773
2774                         if (i915_request_completed(w))
2775                                 continue;
2776
2777                         if (i915_request_on_hold(w))
2778                                 continue;
2779
2780                         list_move_tail(&w->sched.link, &list);
2781                 }
2782
2783                 rq = list_first_entry_or_null(&list, typeof(*rq), sched.link);
2784         } while (rq);
2785 }
2786
2787 static bool execlists_hold(struct intel_engine_cs *engine,
2788                            struct i915_request *rq)
2789 {
2790         spin_lock_irq(&engine->active.lock);
2791
2792         if (i915_request_completed(rq)) { /* too late! */
2793                 rq = NULL;
2794                 goto unlock;
2795         }
2796
2797         if (rq->engine != engine) { /* preempted virtual engine */
2798                 struct virtual_engine *ve = to_virtual_engine(rq->engine);
2799
2800                 /*
2801                  * intel_context_inflight() is only protected by virtue
2802                  * of process_csb() being called only by the tasklet (or
2803                  * directly from inside reset while the tasklet is suspended).
2804                  * Assert that neither of those are allowed to run while we
2805                  * poke at the request queues.
2806                  */
2807                 GEM_BUG_ON(!reset_in_progress(&engine->execlists));
2808
2809                 /*
2810                  * An unsubmitted request along a virtual engine will
2811                  * remain on the active (this) engine until we are able
2812                  * to process the context switch away (and so mark the
2813                  * context as no longer in flight). That cannot have happened
2814                  * yet, otherwise we would not be hanging!
2815                  */
2816                 spin_lock(&ve->base.active.lock);
2817                 GEM_BUG_ON(intel_context_inflight(rq->context) != engine);
2818                 GEM_BUG_ON(ve->request != rq);
2819                 ve->request = NULL;
2820                 spin_unlock(&ve->base.active.lock);
2821                 i915_request_put(rq);
2822
2823                 rq->engine = engine;
2824         }
2825
2826         /*
2827          * Transfer this request onto the hold queue to prevent it
2828          * being resumbitted to HW (and potentially completed) before we have
2829          * released it. Since we may have already submitted following
2830          * requests, we need to remove those as well.
2831          */
2832         GEM_BUG_ON(i915_request_on_hold(rq));
2833         GEM_BUG_ON(rq->engine != engine);
2834         __execlists_hold(rq);
2835         GEM_BUG_ON(list_empty(&engine->active.hold));
2836
2837 unlock:
2838         spin_unlock_irq(&engine->active.lock);
2839         return rq;
2840 }
2841
2842 static bool hold_request(const struct i915_request *rq)
2843 {
2844         struct i915_dependency *p;
2845         bool result = false;
2846
2847         /*
2848          * If one of our ancestors is on hold, we must also be on hold,
2849          * otherwise we will bypass it and execute before it.
2850          */
2851         rcu_read_lock();
2852         for_each_signaler(p, rq) {
2853                 const struct i915_request *s =
2854                         container_of(p->signaler, typeof(*s), sched);
2855
2856                 if (s->engine != rq->engine)
2857                         continue;
2858
2859                 result = i915_request_on_hold(s);
2860                 if (result)
2861                         break;
2862         }
2863         rcu_read_unlock();
2864
2865         return result;
2866 }
2867
2868 static void __execlists_unhold(struct i915_request *rq)
2869 {
2870         LIST_HEAD(list);
2871
2872         do {
2873                 struct i915_dependency *p;
2874
2875                 RQ_TRACE(rq, "hold release\n");
2876
2877                 GEM_BUG_ON(!i915_request_on_hold(rq));
2878                 GEM_BUG_ON(!i915_sw_fence_signaled(&rq->submit));
2879
2880                 i915_request_clear_hold(rq);
2881                 list_move_tail(&rq->sched.link,
2882                                i915_sched_lookup_priolist(rq->engine,
2883                                                           rq_prio(rq)));
2884                 set_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
2885
2886                 /* Also release any children on this engine that are ready */
2887                 for_each_waiter(p, rq) {
2888                         struct i915_request *w =
2889                                 container_of(p->waiter, typeof(*w), sched);
2890
2891                         /* Propagate any change in error status */
2892                         if (rq->fence.error)
2893                                 i915_request_set_error_once(w, rq->fence.error);
2894
2895                         if (w->engine != rq->engine)
2896                                 continue;
2897
2898                         if (!i915_request_on_hold(w))
2899                                 continue;
2900
2901                         /* Check that no other parents are also on hold */
2902                         if (hold_request(w))
2903                                 continue;
2904
2905                         list_move_tail(&w->sched.link, &list);
2906                 }
2907
2908                 rq = list_first_entry_or_null(&list, typeof(*rq), sched.link);
2909         } while (rq);
2910 }
2911
2912 static void execlists_unhold(struct intel_engine_cs *engine,
2913                              struct i915_request *rq)
2914 {
2915         spin_lock_irq(&engine->active.lock);
2916
2917         /*
2918          * Move this request back to the priority queue, and all of its
2919          * children and grandchildren that were suspended along with it.
2920          */
2921         __execlists_unhold(rq);
2922
2923         if (rq_prio(rq) > engine->execlists.queue_priority_hint) {
2924                 engine->execlists.queue_priority_hint = rq_prio(rq);
2925                 tasklet_hi_schedule(&engine->execlists.tasklet);
2926         }
2927
2928         spin_unlock_irq(&engine->active.lock);
2929 }
2930
2931 struct execlists_capture {
2932         struct work_struct work;
2933         struct i915_request *rq;
2934         struct i915_gpu_coredump *error;
2935 };
2936
2937 static void execlists_capture_work(struct work_struct *work)
2938 {
2939         struct execlists_capture *cap = container_of(work, typeof(*cap), work);
2940         const gfp_t gfp = GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
2941         struct intel_engine_cs *engine = cap->rq->engine;
2942         struct intel_gt_coredump *gt = cap->error->gt;
2943         struct intel_engine_capture_vma *vma;
2944
2945         /* Compress all the objects attached to the request, slow! */
2946         vma = intel_engine_coredump_add_request(gt->engine, cap->rq, gfp);
2947         if (vma) {
2948                 struct i915_vma_compress *compress =
2949                         i915_vma_capture_prepare(gt);
2950
2951                 intel_engine_coredump_add_vma(gt->engine, vma, compress);
2952                 i915_vma_capture_finish(gt, compress);
2953         }
2954
2955         gt->simulated = gt->engine->simulated;
2956         cap->error->simulated = gt->simulated;
2957
2958         /* Publish the error state, and announce it to the world */
2959         i915_error_state_store(cap->error);
2960         i915_gpu_coredump_put(cap->error);
2961
2962         /* Return this request and all that depend upon it for signaling */
2963         execlists_unhold(engine, cap->rq);
2964         i915_request_put(cap->rq);
2965
2966         kfree(cap);
2967 }
2968
2969 static struct execlists_capture *capture_regs(struct intel_engine_cs *engine)
2970 {
2971         const gfp_t gfp = GFP_ATOMIC | __GFP_NOWARN;
2972         struct execlists_capture *cap;
2973
2974         cap = kmalloc(sizeof(*cap), gfp);
2975         if (!cap)
2976                 return NULL;
2977
2978         cap->error = i915_gpu_coredump_alloc(engine->i915, gfp);
2979         if (!cap->error)
2980                 goto err_cap;
2981
2982         cap->error->gt = intel_gt_coredump_alloc(engine->gt, gfp);
2983         if (!cap->error->gt)
2984                 goto err_gpu;
2985
2986         cap->error->gt->engine = intel_engine_coredump_alloc(engine, gfp);
2987         if (!cap->error->gt->engine)
2988                 goto err_gt;
2989
2990         return cap;
2991
2992 err_gt:
2993         kfree(cap->error->gt);
2994 err_gpu:
2995         kfree(cap->error);
2996 err_cap:
2997         kfree(cap);
2998         return NULL;
2999 }
3000
3001 static struct i915_request *
3002 active_context(struct intel_engine_cs *engine, u32 ccid)
3003 {
3004         const struct intel_engine_execlists * const el = &engine->execlists;
3005         struct i915_request * const *port, *rq;
3006
3007         /*
3008          * Use the most recent result from process_csb(), but just in case
3009          * we trigger an error (via interrupt) before the first CS event has
3010          * been written, peek at the next submission.
3011          */
3012
3013         for (port = el->active; (rq = *port); port++) {
3014                 if (rq->context->lrc.ccid == ccid) {
3015                         ENGINE_TRACE(engine,
3016                                      "ccid found at active:%zd\n",
3017                                      port - el->active);
3018                         return rq;
3019                 }
3020         }
3021
3022         for (port = el->pending; (rq = *port); port++) {
3023                 if (rq->context->lrc.ccid == ccid) {
3024                         ENGINE_TRACE(engine,
3025                                      "ccid found at pending:%zd\n",
3026                                      port - el->pending);
3027                         return rq;
3028                 }
3029         }
3030
3031         ENGINE_TRACE(engine, "ccid:%x not found\n", ccid);
3032         return NULL;
3033 }
3034
3035 static u32 active_ccid(struct intel_engine_cs *engine)
3036 {
3037         return ENGINE_READ_FW(engine, RING_EXECLIST_STATUS_HI);
3038 }
3039
3040 static void execlists_capture(struct intel_engine_cs *engine)
3041 {
3042         struct execlists_capture *cap;
3043
3044         if (!IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR))
3045                 return;
3046
3047         /*
3048          * We need to _quickly_ capture the engine state before we reset.
3049          * We are inside an atomic section (softirq) here and we are delaying
3050          * the forced preemption event.
3051          */
3052         cap = capture_regs(engine);
3053         if (!cap)
3054                 return;
3055
3056         spin_lock_irq(&engine->active.lock);
3057         cap->rq = active_context(engine, active_ccid(engine));
3058         if (cap->rq) {
3059                 cap->rq = active_request(cap->rq->context->timeline, cap->rq);
3060                 cap->rq = i915_request_get_rcu(cap->rq);
3061         }
3062         spin_unlock_irq(&engine->active.lock);
3063         if (!cap->rq)
3064                 goto err_free;
3065
3066         /*
3067          * Remove the request from the execlists queue, and take ownership
3068          * of the request. We pass it to our worker who will _slowly_ compress
3069          * all the pages the _user_ requested for debugging their batch, after
3070          * which we return it to the queue for signaling.
3071          *
3072          * By removing them from the execlists queue, we also remove the
3073          * requests from being processed by __unwind_incomplete_requests()
3074          * during the intel_engine_reset(), and so they will *not* be replayed
3075          * afterwards.
3076          *
3077          * Note that because we have not yet reset the engine at this point,
3078          * it is possible for the request that we have identified as being
3079          * guilty, did in fact complete and we will then hit an arbitration
3080          * point allowing the outstanding preemption to succeed. The likelihood
3081          * of that is very low (as capturing of the engine registers should be
3082          * fast enough to run inside an irq-off atomic section!), so we will
3083          * simply hold that request accountable for being non-preemptible
3084          * long enough to force the reset.
3085          */
3086         if (!execlists_hold(engine, cap->rq))
3087                 goto err_rq;
3088
3089         INIT_WORK(&cap->work, execlists_capture_work);
3090         schedule_work(&cap->work);
3091         return;
3092
3093 err_rq:
3094         i915_request_put(cap->rq);
3095 err_free:
3096         i915_gpu_coredump_put(cap->error);
3097         kfree(cap);
3098 }
3099
3100 static void execlists_reset(struct intel_engine_cs *engine, const char *msg)
3101 {
3102         const unsigned int bit = I915_RESET_ENGINE + engine->id;
3103         unsigned long *lock = &engine->gt->reset.flags;
3104
3105         if (!intel_has_reset_engine(engine->gt))
3106                 return;
3107
3108         if (test_and_set_bit(bit, lock))
3109                 return;
3110
3111         ENGINE_TRACE(engine, "reset for %s\n", msg);
3112
3113         /* Mark this tasklet as disabled to avoid waiting for it to complete */
3114         tasklet_disable_nosync(&engine->execlists.tasklet);
3115
3116         ring_set_paused(engine, 1); /* Freeze the current request in place */
3117         execlists_capture(engine);
3118         intel_engine_reset(engine, msg);
3119
3120         tasklet_enable(&engine->execlists.tasklet);
3121         clear_and_wake_up_bit(bit, lock);
3122 }
3123
3124 static bool preempt_timeout(const struct intel_engine_cs *const engine)
3125 {
3126         const struct timer_list *t = &engine->execlists.preempt;
3127
3128         if (!CONFIG_DRM_I915_PREEMPT_TIMEOUT)
3129                 return false;
3130
3131         if (!timer_expired(t))
3132                 return false;
3133
3134         return READ_ONCE(engine->execlists.pending[0]);
3135 }
3136
3137 /*
3138  * Check the unread Context Status Buffers and manage the submission of new
3139  * contexts to the ELSP accordingly.
3140  */
3141 static void execlists_submission_tasklet(unsigned long data)
3142 {
3143         struct intel_engine_cs * const engine = (struct intel_engine_cs *)data;
3144         bool timeout = preempt_timeout(engine);
3145
3146         process_csb(engine);
3147
3148         if (unlikely(READ_ONCE(engine->execlists.error_interrupt))) {
3149                 const char *msg;
3150
3151                 /* Generate the error message in priority wrt to the user! */
3152                 if (engine->execlists.error_interrupt & GENMASK(15, 0))
3153                         msg = "CS error"; /* thrown by a user payload */
3154                 else if (engine->execlists.error_interrupt & ERROR_CSB)
3155                         msg = "invalid CSB event";
3156                 else
3157                         msg = "internal error";
3158
3159                 engine->execlists.error_interrupt = 0;
3160                 execlists_reset(engine, msg);
3161         }
3162
3163         if (!READ_ONCE(engine->execlists.pending[0]) || timeout) {
3164                 unsigned long flags;
3165
3166                 spin_lock_irqsave(&engine->active.lock, flags);
3167                 __execlists_submission_tasklet(engine);
3168                 spin_unlock_irqrestore(&engine->active.lock, flags);
3169
3170                 /* Recheck after serialising with direct-submission */
3171                 if (unlikely(timeout && preempt_timeout(engine)))
3172                         execlists_reset(engine, "preemption time out");
3173         }
3174 }
3175
3176 static void __execlists_kick(struct intel_engine_execlists *execlists)
3177 {
3178         /* Kick the tasklet for some interrupt coalescing and reset handling */
3179         tasklet_hi_schedule(&execlists->tasklet);
3180 }
3181
3182 #define execlists_kick(t, member) \
3183         __execlists_kick(container_of(t, struct intel_engine_execlists, member))
3184
3185 static void execlists_timeslice(struct timer_list *timer)
3186 {
3187         execlists_kick(timer, timer);
3188 }
3189
3190 static void execlists_preempt(struct timer_list *timer)
3191 {
3192         execlists_kick(timer, preempt);
3193 }
3194
3195 static void queue_request(struct intel_engine_cs *engine,
3196                           struct i915_request *rq)
3197 {
3198         GEM_BUG_ON(!list_empty(&rq->sched.link));
3199         list_add_tail(&rq->sched.link,
3200                       i915_sched_lookup_priolist(engine, rq_prio(rq)));
3201         set_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
3202 }
3203
3204 static void __submit_queue_imm(struct intel_engine_cs *engine)
3205 {
3206         struct intel_engine_execlists * const execlists = &engine->execlists;
3207
3208         if (reset_in_progress(execlists))
3209                 return; /* defer until we restart the engine following reset */
3210
3211         __execlists_submission_tasklet(engine);
3212 }
3213
3214 static void submit_queue(struct intel_engine_cs *engine,
3215                          const struct i915_request *rq)
3216 {
3217         struct intel_engine_execlists *execlists = &engine->execlists;
3218
3219         if (rq_prio(rq) <= execlists->queue_priority_hint)
3220                 return;
3221
3222         execlists->queue_priority_hint = rq_prio(rq);
3223         __submit_queue_imm(engine);
3224 }
3225
3226 static bool ancestor_on_hold(const struct intel_engine_cs *engine,
3227                              const struct i915_request *rq)
3228 {
3229         GEM_BUG_ON(i915_request_on_hold(rq));
3230         return !list_empty(&engine->active.hold) && hold_request(rq);
3231 }
3232
3233 static void flush_csb(struct intel_engine_cs *engine)
3234 {
3235         struct intel_engine_execlists *el = &engine->execlists;
3236
3237         if (READ_ONCE(el->pending[0]) && tasklet_trylock(&el->tasklet)) {
3238                 if (!reset_in_progress(el))
3239                         process_csb(engine);
3240                 tasklet_unlock(&el->tasklet);
3241         }
3242 }
3243
3244 static void execlists_submit_request(struct i915_request *request)
3245 {
3246         struct intel_engine_cs *engine = request->engine;
3247         unsigned long flags;
3248
3249         /* Hopefully we clear execlists->pending[] to let us through */
3250         flush_csb(engine);
3251
3252         /* Will be called from irq-context when using foreign fences. */
3253         spin_lock_irqsave(&engine->active.lock, flags);
3254
3255         if (unlikely(ancestor_on_hold(engine, request))) {
3256                 RQ_TRACE(request, "ancestor on hold\n");
3257                 list_add_tail(&request->sched.link, &engine->active.hold);
3258                 i915_request_set_hold(request);
3259         } else {
3260                 queue_request(engine, request);
3261
3262                 GEM_BUG_ON(RB_EMPTY_ROOT(&engine->execlists.queue.rb_root));
3263                 GEM_BUG_ON(list_empty(&request->sched.link));
3264
3265                 submit_queue(engine, request);
3266         }
3267
3268         spin_unlock_irqrestore(&engine->active.lock, flags);
3269 }
3270
3271 static void __execlists_context_fini(struct intel_context *ce)
3272 {
3273         intel_ring_put(ce->ring);
3274         i915_vma_put(ce->state);
3275 }
3276
3277 static void execlists_context_destroy(struct kref *kref)
3278 {
3279         struct intel_context *ce = container_of(kref, typeof(*ce), ref);
3280
3281         GEM_BUG_ON(!i915_active_is_idle(&ce->active));
3282         GEM_BUG_ON(intel_context_is_pinned(ce));
3283
3284         if (ce->state)
3285                 __execlists_context_fini(ce);
3286
3287         intel_context_fini(ce);
3288         intel_context_free(ce);
3289 }
3290
3291 static void
3292 set_redzone(void *vaddr, const struct intel_engine_cs *engine)
3293 {
3294         if (!IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
3295                 return;
3296
3297         vaddr += engine->context_size;
3298
3299         memset(vaddr, CONTEXT_REDZONE, I915_GTT_PAGE_SIZE);
3300 }
3301
3302 static void
3303 check_redzone(const void *vaddr, const struct intel_engine_cs *engine)
3304 {
3305         if (!IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
3306                 return;
3307
3308         vaddr += engine->context_size;
3309
3310         if (memchr_inv(vaddr, CONTEXT_REDZONE, I915_GTT_PAGE_SIZE))
3311                 drm_err_once(&engine->i915->drm,
3312                              "%s context redzone overwritten!\n",
3313                              engine->name);
3314 }
3315
3316 static void execlists_context_unpin(struct intel_context *ce)
3317 {
3318         check_redzone((void *)ce->lrc_reg_state - LRC_STATE_OFFSET,
3319                       ce->engine);
3320 }
3321
3322 static void execlists_context_post_unpin(struct intel_context *ce)
3323 {
3324         i915_gem_object_unpin_map(ce->state->obj);
3325 }
3326
3327 static u32 *
3328 gen12_emit_timestamp_wa(const struct intel_context *ce, u32 *cs)
3329 {
3330         *cs++ = MI_LOAD_REGISTER_MEM_GEN8 |
3331                 MI_SRM_LRM_GLOBAL_GTT |
3332                 MI_LRI_LRM_CS_MMIO;
3333         *cs++ = i915_mmio_reg_offset(GEN8_RING_CS_GPR(0, 0));
3334         *cs++ = i915_ggtt_offset(ce->state) + LRC_STATE_OFFSET +
3335                 CTX_TIMESTAMP * sizeof(u32);
3336         *cs++ = 0;
3337
3338         *cs++ = MI_LOAD_REGISTER_REG |
3339                 MI_LRR_SOURCE_CS_MMIO |
3340                 MI_LRI_LRM_CS_MMIO;
3341         *cs++ = i915_mmio_reg_offset(GEN8_RING_CS_GPR(0, 0));
3342         *cs++ = i915_mmio_reg_offset(RING_CTX_TIMESTAMP(0));
3343
3344         *cs++ = MI_LOAD_REGISTER_REG |
3345                 MI_LRR_SOURCE_CS_MMIO |
3346                 MI_LRI_LRM_CS_MMIO;
3347         *cs++ = i915_mmio_reg_offset(GEN8_RING_CS_GPR(0, 0));
3348         *cs++ = i915_mmio_reg_offset(RING_CTX_TIMESTAMP(0));
3349
3350         return cs;
3351 }
3352
3353 static u32 *
3354 gen12_emit_restore_scratch(const struct intel_context *ce, u32 *cs)
3355 {
3356         GEM_BUG_ON(lrc_ring_gpr0(ce->engine) == -1);
3357
3358         *cs++ = MI_LOAD_REGISTER_MEM_GEN8 |
3359                 MI_SRM_LRM_GLOBAL_GTT |
3360                 MI_LRI_LRM_CS_MMIO;
3361         *cs++ = i915_mmio_reg_offset(GEN8_RING_CS_GPR(0, 0));
3362         *cs++ = i915_ggtt_offset(ce->state) + LRC_STATE_OFFSET +
3363                 (lrc_ring_gpr0(ce->engine) + 1) * sizeof(u32);
3364         *cs++ = 0;
3365
3366         return cs;
3367 }
3368
3369 static u32 *
3370 gen12_emit_cmd_buf_wa(const struct intel_context *ce, u32 *cs)
3371 {
3372         GEM_BUG_ON(lrc_ring_cmd_buf_cctl(ce->engine) == -1);
3373
3374         *cs++ = MI_LOAD_REGISTER_MEM_GEN8 |
3375                 MI_SRM_LRM_GLOBAL_GTT |
3376                 MI_LRI_LRM_CS_MMIO;
3377         *cs++ = i915_mmio_reg_offset(GEN8_RING_CS_GPR(0, 0));
3378         *cs++ = i915_ggtt_offset(ce->state) + LRC_STATE_OFFSET +
3379                 (lrc_ring_cmd_buf_cctl(ce->engine) + 1) * sizeof(u32);
3380         *cs++ = 0;
3381
3382         *cs++ = MI_LOAD_REGISTER_REG |
3383                 MI_LRR_SOURCE_CS_MMIO |
3384                 MI_LRI_LRM_CS_MMIO;
3385         *cs++ = i915_mmio_reg_offset(GEN8_RING_CS_GPR(0, 0));
3386         *cs++ = i915_mmio_reg_offset(RING_CMD_BUF_CCTL(0));
3387
3388         return cs;
3389 }
3390
3391 static u32 *
3392 gen12_emit_indirect_ctx_rcs(const struct intel_context *ce, u32 *cs)
3393 {
3394         cs = gen12_emit_timestamp_wa(ce, cs);
3395         cs = gen12_emit_cmd_buf_wa(ce, cs);
3396         cs = gen12_emit_restore_scratch(ce, cs);
3397
3398         return cs;
3399 }
3400
3401 static u32 *
3402 gen12_emit_indirect_ctx_xcs(const struct intel_context *ce, u32 *cs)
3403 {
3404         cs = gen12_emit_timestamp_wa(ce, cs);
3405         cs = gen12_emit_restore_scratch(ce, cs);
3406
3407         return cs;
3408 }
3409
3410 static inline u32 context_wa_bb_offset(const struct intel_context *ce)
3411 {
3412         return PAGE_SIZE * ce->wa_bb_page;
3413 }
3414
3415 static u32 *context_indirect_bb(const struct intel_context *ce)
3416 {
3417         void *ptr;
3418
3419         GEM_BUG_ON(!ce->wa_bb_page);
3420
3421         ptr = ce->lrc_reg_state;
3422         ptr -= LRC_STATE_OFFSET; /* back to start of context image */
3423         ptr += context_wa_bb_offset(ce);
3424
3425         return ptr;
3426 }
3427
3428 static void
3429 setup_indirect_ctx_bb(const struct intel_context *ce,
3430                       const struct intel_engine_cs *engine,
3431                       u32 *(*emit)(const struct intel_context *, u32 *))
3432 {
3433         u32 * const start = context_indirect_bb(ce);
3434         u32 *cs;
3435
3436         cs = emit(ce, start);
3437         GEM_BUG_ON(cs - start > I915_GTT_PAGE_SIZE / sizeof(*cs));
3438         while ((unsigned long)cs % CACHELINE_BYTES)
3439                 *cs++ = MI_NOOP;
3440
3441         lrc_ring_setup_indirect_ctx(ce->lrc_reg_state, engine,
3442                                     i915_ggtt_offset(ce->state) +
3443                                     context_wa_bb_offset(ce),
3444                                     (cs - start) * sizeof(*cs));
3445 }
3446
3447 static void
3448 __execlists_update_reg_state(const struct intel_context *ce,
3449                              const struct intel_engine_cs *engine,
3450                              u32 head)
3451 {
3452         struct intel_ring *ring = ce->ring;
3453         u32 *regs = ce->lrc_reg_state;
3454
3455         GEM_BUG_ON(!intel_ring_offset_valid(ring, head));
3456         GEM_BUG_ON(!intel_ring_offset_valid(ring, ring->tail));
3457
3458         regs[CTX_RING_START] = i915_ggtt_offset(ring->vma);
3459         regs[CTX_RING_HEAD] = head;
3460         regs[CTX_RING_TAIL] = ring->tail;
3461         regs[CTX_RING_CTL] = RING_CTL_SIZE(ring->size) | RING_VALID;
3462
3463         /* RPCS */
3464         if (engine->class == RENDER_CLASS) {
3465                 regs[CTX_R_PWR_CLK_STATE] =
3466                         intel_sseu_make_rpcs(engine->gt, &ce->sseu);
3467
3468                 i915_oa_init_reg_state(ce, engine);
3469         }
3470
3471         if (ce->wa_bb_page) {
3472                 u32 *(*fn)(const struct intel_context *ce, u32 *cs);
3473
3474                 fn = gen12_emit_indirect_ctx_xcs;
3475                 if (ce->engine->class == RENDER_CLASS)
3476                         fn = gen12_emit_indirect_ctx_rcs;
3477
3478                 /* Mutually exclusive wrt to global indirect bb */
3479                 GEM_BUG_ON(engine->wa_ctx.indirect_ctx.size);
3480                 setup_indirect_ctx_bb(ce, engine, fn);
3481         }
3482 }
3483
3484 static int
3485 execlists_context_pre_pin(struct intel_context *ce,
3486                           struct i915_gem_ww_ctx *ww, void **vaddr)
3487 {
3488         GEM_BUG_ON(!ce->state);
3489         GEM_BUG_ON(!i915_vma_is_pinned(ce->state));
3490
3491         *vaddr = i915_gem_object_pin_map(ce->state->obj,
3492                                         i915_coherent_map_type(ce->engine->i915) |
3493                                         I915_MAP_OVERRIDE);
3494
3495         return PTR_ERR_OR_ZERO(*vaddr);
3496 }
3497
3498 static int
3499 __execlists_context_pin(struct intel_context *ce,
3500                         struct intel_engine_cs *engine,
3501                         void *vaddr)
3502 {
3503         ce->lrc.lrca = lrc_descriptor(ce, engine) | CTX_DESC_FORCE_RESTORE;
3504         ce->lrc_reg_state = vaddr + LRC_STATE_OFFSET;
3505         __execlists_update_reg_state(ce, engine, ce->ring->tail);
3506
3507         return 0;
3508 }
3509
3510 static int execlists_context_pin(struct intel_context *ce, void *vaddr)
3511 {
3512         return __execlists_context_pin(ce, ce->engine, vaddr);
3513 }
3514
3515 static int execlists_context_alloc(struct intel_context *ce)
3516 {
3517         return __execlists_context_alloc(ce, ce->engine);
3518 }
3519
3520 static void execlists_context_reset(struct intel_context *ce)
3521 {
3522         CE_TRACE(ce, "reset\n");
3523         GEM_BUG_ON(!intel_context_is_pinned(ce));
3524
3525         intel_ring_reset(ce->ring, ce->ring->emit);
3526
3527         /* Scrub away the garbage */
3528         execlists_init_reg_state(ce->lrc_reg_state,
3529                                  ce, ce->engine, ce->ring, true);
3530         __execlists_update_reg_state(ce, ce->engine, ce->ring->tail);
3531
3532         ce->lrc.desc |= CTX_DESC_FORCE_RESTORE;
3533 }
3534
3535 static const struct intel_context_ops execlists_context_ops = {
3536         .alloc = execlists_context_alloc,
3537
3538         .pre_pin = execlists_context_pre_pin,
3539         .pin = execlists_context_pin,
3540         .unpin = execlists_context_unpin,
3541         .post_unpin = execlists_context_post_unpin,
3542
3543         .enter = intel_context_enter_engine,
3544         .exit = intel_context_exit_engine,
3545
3546         .reset = execlists_context_reset,
3547         .destroy = execlists_context_destroy,
3548 };
3549
3550 static int gen8_emit_init_breadcrumb(struct i915_request *rq)
3551 {
3552         u32 *cs;
3553
3554         GEM_BUG_ON(i915_request_has_initial_breadcrumb(rq));
3555         if (!i915_request_timeline(rq)->has_initial_breadcrumb)
3556                 return 0;
3557
3558         cs = intel_ring_begin(rq, 6);
3559         if (IS_ERR(cs))
3560                 return PTR_ERR(cs);
3561
3562         /*
3563          * Check if we have been preempted before we even get started.
3564          *
3565          * After this point i915_request_started() reports true, even if
3566          * we get preempted and so are no longer running.
3567          */
3568         *cs++ = MI_ARB_CHECK;
3569         *cs++ = MI_NOOP;
3570
3571         *cs++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT;
3572         *cs++ = i915_request_timeline(rq)->hwsp_offset;
3573         *cs++ = 0;
3574         *cs++ = rq->fence.seqno - 1;
3575
3576         intel_ring_advance(rq, cs);
3577
3578         /* Record the updated position of the request's payload */
3579         rq->infix = intel_ring_offset(rq, cs);
3580
3581         __set_bit(I915_FENCE_FLAG_INITIAL_BREADCRUMB, &rq->fence.flags);
3582
3583         return 0;
3584 }
3585
3586 static int emit_pdps(struct i915_request *rq)
3587 {
3588         const struct intel_engine_cs * const engine = rq->engine;
3589         struct i915_ppgtt * const ppgtt = i915_vm_to_ppgtt(rq->context->vm);
3590         int err, i;
3591         u32 *cs;
3592
3593         GEM_BUG_ON(intel_vgpu_active(rq->engine->i915));
3594
3595         /*
3596          * Beware ye of the dragons, this sequence is magic!
3597          *
3598          * Small changes to this sequence can cause anything from
3599          * GPU hangs to forcewake errors and machine lockups!
3600          */
3601
3602         /* Flush any residual operations from the context load */
3603         err = engine->emit_flush(rq, EMIT_FLUSH);
3604         if (err)
3605                 return err;
3606
3607         /* Magic required to prevent forcewake errors! */
3608         err = engine->emit_flush(rq, EMIT_INVALIDATE);
3609         if (err)
3610                 return err;
3611
3612         cs = intel_ring_begin(rq, 4 * GEN8_3LVL_PDPES + 2);
3613         if (IS_ERR(cs))
3614                 return PTR_ERR(cs);
3615
3616         /* Ensure the LRI have landed before we invalidate & continue */
3617         *cs++ = MI_LOAD_REGISTER_IMM(2 * GEN8_3LVL_PDPES) | MI_LRI_FORCE_POSTED;
3618         for (i = GEN8_3LVL_PDPES; i--; ) {
3619                 const dma_addr_t pd_daddr = i915_page_dir_dma_addr(ppgtt, i);
3620                 u32 base = engine->mmio_base;
3621
3622                 *cs++ = i915_mmio_reg_offset(GEN8_RING_PDP_UDW(base, i));
3623                 *cs++ = upper_32_bits(pd_daddr);
3624                 *cs++ = i915_mmio_reg_offset(GEN8_RING_PDP_LDW(base, i));
3625                 *cs++ = lower_32_bits(pd_daddr);
3626         }
3627         *cs++ = MI_NOOP;
3628
3629         intel_ring_advance(rq, cs);
3630
3631         return 0;
3632 }
3633
3634 static int execlists_request_alloc(struct i915_request *request)
3635 {
3636         int ret;
3637
3638         GEM_BUG_ON(!intel_context_is_pinned(request->context));
3639
3640         /*
3641          * Flush enough space to reduce the likelihood of waiting after
3642          * we start building the request - in which case we will just
3643          * have to repeat work.
3644          */
3645         request->reserved_space += EXECLISTS_REQUEST_SIZE;
3646
3647         /*
3648          * Note that after this point, we have committed to using
3649          * this request as it is being used to both track the
3650          * state of engine initialisation and liveness of the
3651          * golden renderstate above. Think twice before you try
3652          * to cancel/unwind this request now.
3653          */
3654
3655         if (!i915_vm_is_4lvl(request->context->vm)) {
3656                 ret = emit_pdps(request);
3657                 if (ret)
3658                         return ret;
3659         }
3660
3661         /* Unconditionally invalidate GPU caches and TLBs. */
3662         ret = request->engine->emit_flush(request, EMIT_INVALIDATE);
3663         if (ret)
3664                 return ret;
3665
3666         request->reserved_space -= EXECLISTS_REQUEST_SIZE;
3667         return 0;
3668 }
3669
3670 /*
3671  * In this WA we need to set GEN8_L3SQCREG4[21:21] and reset it after
3672  * PIPE_CONTROL instruction. This is required for the flush to happen correctly
3673  * but there is a slight complication as this is applied in WA batch where the
3674  * values are only initialized once so we cannot take register value at the
3675  * beginning and reuse it further; hence we save its value to memory, upload a
3676  * constant value with bit21 set and then we restore it back with the saved value.
3677  * To simplify the WA, a constant value is formed by using the default value
3678  * of this register. This shouldn't be a problem because we are only modifying
3679  * it for a short period and this batch in non-premptible. We can ofcourse
3680  * use additional instructions that read the actual value of the register
3681  * at that time and set our bit of interest but it makes the WA complicated.
3682  *
3683  * This WA is also required for Gen9 so extracting as a function avoids
3684  * code duplication.
3685  */
3686 static u32 *
3687 gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine, u32 *batch)
3688 {
3689         /* NB no one else is allowed to scribble over scratch + 256! */
3690         *batch++ = MI_STORE_REGISTER_MEM_GEN8 | MI_SRM_LRM_GLOBAL_GTT;
3691         *batch++ = i915_mmio_reg_offset(GEN8_L3SQCREG4);
3692         *batch++ = intel_gt_scratch_offset(engine->gt,
3693                                            INTEL_GT_SCRATCH_FIELD_COHERENTL3_WA);
3694         *batch++ = 0;
3695
3696         *batch++ = MI_LOAD_REGISTER_IMM(1);
3697         *batch++ = i915_mmio_reg_offset(GEN8_L3SQCREG4);
3698         *batch++ = 0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES;
3699
3700         batch = gen8_emit_pipe_control(batch,
3701                                        PIPE_CONTROL_CS_STALL |
3702                                        PIPE_CONTROL_DC_FLUSH_ENABLE,
3703                                        0);
3704
3705         *batch++ = MI_LOAD_REGISTER_MEM_GEN8 | MI_SRM_LRM_GLOBAL_GTT;
3706         *batch++ = i915_mmio_reg_offset(GEN8_L3SQCREG4);
3707         *batch++ = intel_gt_scratch_offset(engine->gt,
3708                                            INTEL_GT_SCRATCH_FIELD_COHERENTL3_WA);
3709         *batch++ = 0;
3710
3711         return batch;
3712 }
3713
3714 /*
3715  * Typically we only have one indirect_ctx and per_ctx batch buffer which are
3716  * initialized at the beginning and shared across all contexts but this field
3717  * helps us to have multiple batches at different offsets and select them based
3718  * on a criteria. At the moment this batch always start at the beginning of the page
3719  * and at this point we don't have multiple wa_ctx batch buffers.
3720  *
3721  * The number of WA applied are not known at the beginning; we use this field
3722  * to return the no of DWORDS written.
3723  *
3724  * It is to be noted that this batch does not contain MI_BATCH_BUFFER_END
3725  * so it adds NOOPs as padding to make it cacheline aligned.
3726  * MI_BATCH_BUFFER_END will be added to perctx batch and both of them together
3727  * makes a complete batch buffer.
3728  */
3729 static u32 *gen8_init_indirectctx_bb(struct intel_engine_cs *engine, u32 *batch)
3730 {
3731         /* WaDisableCtxRestoreArbitration:bdw,chv */
3732         *batch++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
3733
3734         /* WaFlushCoherentL3CacheLinesAtContextSwitch:bdw */
3735         if (IS_BROADWELL(engine->i915))
3736                 batch = gen8_emit_flush_coherentl3_wa(engine, batch);
3737
3738         /* WaClearSlmSpaceAtContextSwitch:bdw,chv */
3739         /* Actual scratch location is at 128 bytes offset */
3740         batch = gen8_emit_pipe_control(batch,
3741                                        PIPE_CONTROL_FLUSH_L3 |
3742                                        PIPE_CONTROL_STORE_DATA_INDEX |
3743                                        PIPE_CONTROL_CS_STALL |
3744                                        PIPE_CONTROL_QW_WRITE,
3745                                        LRC_PPHWSP_SCRATCH_ADDR);
3746
3747         *batch++ = MI_ARB_ON_OFF | MI_ARB_ENABLE;
3748
3749         /* Pad to end of cacheline */
3750         while ((unsigned long)batch % CACHELINE_BYTES)
3751                 *batch++ = MI_NOOP;
3752
3753         /*
3754          * MI_BATCH_BUFFER_END is not required in Indirect ctx BB because
3755          * execution depends on the length specified in terms of cache lines
3756          * in the register CTX_RCS_INDIRECT_CTX
3757          */
3758
3759         return batch;
3760 }
3761
3762 struct lri {
3763         i915_reg_t reg;
3764         u32 value;
3765 };
3766
3767 static u32 *emit_lri(u32 *batch, const struct lri *lri, unsigned int count)
3768 {
3769         GEM_BUG_ON(!count || count > 63);
3770
3771         *batch++ = MI_LOAD_REGISTER_IMM(count);
3772         do {
3773                 *batch++ = i915_mmio_reg_offset(lri->reg);
3774                 *batch++ = lri->value;
3775         } while (lri++, --count);
3776         *batch++ = MI_NOOP;
3777
3778         return batch;
3779 }
3780
3781 static u32 *gen9_init_indirectctx_bb(struct intel_engine_cs *engine, u32 *batch)
3782 {
3783         static const struct lri lri[] = {
3784                 /* WaDisableGatherAtSetShaderCommonSlice:skl,bxt,kbl,glk */
3785                 {
3786                         COMMON_SLICE_CHICKEN2,
3787                         __MASKED_FIELD(GEN9_DISABLE_GATHER_AT_SET_SHADER_COMMON_SLICE,
3788                                        0),
3789                 },
3790
3791                 /* BSpec: 11391 */
3792                 {
3793                         FF_SLICE_CHICKEN,
3794                         __MASKED_FIELD(FF_SLICE_CHICKEN_CL_PROVOKING_VERTEX_FIX,
3795                                        FF_SLICE_CHICKEN_CL_PROVOKING_VERTEX_FIX),
3796                 },
3797
3798                 /* BSpec: 11299 */
3799                 {
3800                         _3D_CHICKEN3,
3801                         __MASKED_FIELD(_3D_CHICKEN_SF_PROVOKING_VERTEX_FIX,
3802                                        _3D_CHICKEN_SF_PROVOKING_VERTEX_FIX),
3803                 }
3804         };
3805
3806         *batch++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
3807
3808         /* WaFlushCoherentL3CacheLinesAtContextSwitch:skl,bxt,glk */
3809         batch = gen8_emit_flush_coherentl3_wa(engine, batch);
3810
3811         /* WaClearSlmSpaceAtContextSwitch:skl,bxt,kbl,glk,cfl */
3812         batch = gen8_emit_pipe_control(batch,
3813                                        PIPE_CONTROL_FLUSH_L3 |
3814                                        PIPE_CONTROL_STORE_DATA_INDEX |
3815                                        PIPE_CONTROL_CS_STALL |
3816                                        PIPE_CONTROL_QW_WRITE,
3817                                        LRC_PPHWSP_SCRATCH_ADDR);
3818
3819         batch = emit_lri(batch, lri, ARRAY_SIZE(lri));
3820
3821         /* WaMediaPoolStateCmdInWABB:bxt,glk */
3822         if (HAS_POOLED_EU(engine->i915)) {
3823                 /*
3824                  * EU pool configuration is setup along with golden context
3825                  * during context initialization. This value depends on
3826                  * device type (2x6 or 3x6) and needs to be updated based
3827                  * on which subslice is disabled especially for 2x6
3828                  * devices, however it is safe to load default
3829                  * configuration of 3x6 device instead of masking off
3830                  * corresponding bits because HW ignores bits of a disabled
3831                  * subslice and drops down to appropriate config. Please
3832                  * see render_state_setup() in i915_gem_render_state.c for
3833                  * possible configurations, to avoid duplication they are
3834                  * not shown here again.
3835                  */
3836                 *batch++ = GEN9_MEDIA_POOL_STATE;
3837                 *batch++ = GEN9_MEDIA_POOL_ENABLE;
3838                 *batch++ = 0x00777000;
3839                 *batch++ = 0;
3840                 *batch++ = 0;
3841                 *batch++ = 0;
3842         }
3843
3844         *batch++ = MI_ARB_ON_OFF | MI_ARB_ENABLE;
3845
3846         /* Pad to end of cacheline */
3847         while ((unsigned long)batch % CACHELINE_BYTES)
3848                 *batch++ = MI_NOOP;
3849
3850         return batch;
3851 }
3852
3853 static u32 *
3854 gen10_init_indirectctx_bb(struct intel_engine_cs *engine, u32 *batch)
3855 {
3856         int i;
3857
3858         /*
3859          * WaPipeControlBefore3DStateSamplePattern: cnl
3860          *
3861          * Ensure the engine is idle prior to programming a
3862          * 3DSTATE_SAMPLE_PATTERN during a context restore.
3863          */
3864         batch = gen8_emit_pipe_control(batch,
3865                                        PIPE_CONTROL_CS_STALL,
3866                                        0);
3867         /*
3868          * WaPipeControlBefore3DStateSamplePattern says we need 4 dwords for
3869          * the PIPE_CONTROL followed by 12 dwords of 0x0, so 16 dwords in
3870          * total. However, a PIPE_CONTROL is 6 dwords long, not 4, which is
3871          * confusing. Since gen8_emit_pipe_control() already advances the
3872          * batch by 6 dwords, we advance the other 10 here, completing a
3873          * cacheline. It's not clear if the workaround requires this padding
3874          * before other commands, or if it's just the regular padding we would
3875          * already have for the workaround bb, so leave it here for now.
3876          */
3877         for (i = 0; i < 10; i++)
3878                 *batch++ = MI_NOOP;
3879
3880         /* Pad to end of cacheline */
3881         while ((unsigned long)batch % CACHELINE_BYTES)
3882                 *batch++ = MI_NOOP;
3883
3884         return batch;
3885 }
3886
3887 #define CTX_WA_BB_OBJ_SIZE (PAGE_SIZE)
3888
3889 static int lrc_setup_wa_ctx(struct intel_engine_cs *engine)
3890 {
3891         struct drm_i915_gem_object *obj;
3892         struct i915_vma *vma;
3893         int err;
3894
3895         obj = i915_gem_object_create_shmem(engine->i915, CTX_WA_BB_OBJ_SIZE);
3896         if (IS_ERR(obj))
3897                 return PTR_ERR(obj);
3898
3899         vma = i915_vma_instance(obj, &engine->gt->ggtt->vm, NULL);
3900         if (IS_ERR(vma)) {
3901                 err = PTR_ERR(vma);
3902                 goto err;
3903         }
3904
3905         err = i915_ggtt_pin(vma, NULL, 0, PIN_HIGH);
3906         if (err)
3907                 goto err;
3908
3909         engine->wa_ctx.vma = vma;
3910         return 0;
3911
3912 err:
3913         i915_gem_object_put(obj);
3914         return err;
3915 }
3916
3917 static void lrc_destroy_wa_ctx(struct intel_engine_cs *engine)
3918 {
3919         i915_vma_unpin_and_release(&engine->wa_ctx.vma, 0);
3920 }
3921
3922 typedef u32 *(*wa_bb_func_t)(struct intel_engine_cs *engine, u32 *batch);
3923
3924 static int intel_init_workaround_bb(struct intel_engine_cs *engine)
3925 {
3926         struct i915_ctx_workarounds *wa_ctx = &engine->wa_ctx;
3927         struct i915_wa_ctx_bb *wa_bb[2] = { &wa_ctx->indirect_ctx,
3928                                             &wa_ctx->per_ctx };
3929         wa_bb_func_t wa_bb_fn[2];
3930         void *batch, *batch_ptr;
3931         unsigned int i;
3932         int ret;
3933
3934         if (engine->class != RENDER_CLASS)
3935                 return 0;
3936
3937         switch (INTEL_GEN(engine->i915)) {
3938         case 12:
3939         case 11:
3940                 return 0;
3941         case 10:
3942                 wa_bb_fn[0] = gen10_init_indirectctx_bb;
3943                 wa_bb_fn[1] = NULL;
3944                 break;
3945         case 9:
3946                 wa_bb_fn[0] = gen9_init_indirectctx_bb;
3947                 wa_bb_fn[1] = NULL;
3948                 break;
3949         case 8:
3950                 wa_bb_fn[0] = gen8_init_indirectctx_bb;
3951                 wa_bb_fn[1] = NULL;
3952                 break;
3953         default:
3954                 MISSING_CASE(INTEL_GEN(engine->i915));
3955                 return 0;
3956         }
3957
3958         ret = lrc_setup_wa_ctx(engine);
3959         if (ret) {
3960                 drm_dbg(&engine->i915->drm,
3961                         "Failed to setup context WA page: %d\n", ret);
3962                 return ret;
3963         }
3964
3965         batch = i915_gem_object_pin_map(wa_ctx->vma->obj, I915_MAP_WB);
3966
3967         /*
3968          * Emit the two workaround batch buffers, recording the offset from the
3969          * start of the workaround batch buffer object for each and their
3970          * respective sizes.
3971          */
3972         batch_ptr = batch;
3973         for (i = 0; i < ARRAY_SIZE(wa_bb_fn); i++) {
3974                 wa_bb[i]->offset = batch_ptr - batch;
3975                 if (GEM_DEBUG_WARN_ON(!IS_ALIGNED(wa_bb[i]->offset,
3976                                                   CACHELINE_BYTES))) {
3977                         ret = -EINVAL;
3978                         break;
3979                 }
3980                 if (wa_bb_fn[i])
3981                         batch_ptr = wa_bb_fn[i](engine, batch_ptr);
3982                 wa_bb[i]->size = batch_ptr - (batch + wa_bb[i]->offset);
3983         }
3984         GEM_BUG_ON(batch_ptr - batch > CTX_WA_BB_OBJ_SIZE);
3985
3986         __i915_gem_object_flush_map(wa_ctx->vma->obj, 0, batch_ptr - batch);
3987         __i915_gem_object_release_map(wa_ctx->vma->obj);
3988         if (ret)
3989                 lrc_destroy_wa_ctx(engine);
3990
3991         return ret;
3992 }
3993
3994 static void reset_csb_pointers(struct intel_engine_cs *engine)
3995 {
3996         struct intel_engine_execlists * const execlists = &engine->execlists;
3997         const unsigned int reset_value = execlists->csb_size - 1;
3998
3999         ring_set_paused(engine, 0);
4000
4001         /*
4002          * Sometimes Icelake forgets to reset its pointers on a GPU reset.
4003          * Bludgeon them with a mmio update to be sure.
4004          */
4005         ENGINE_WRITE(engine, RING_CONTEXT_STATUS_PTR,
4006                      0xffff << 16 | reset_value << 8 | reset_value);
4007         ENGINE_POSTING_READ(engine, RING_CONTEXT_STATUS_PTR);
4008
4009         /*
4010          * After a reset, the HW starts writing into CSB entry [0]. We
4011          * therefore have to set our HEAD pointer back one entry so that
4012          * the *first* entry we check is entry 0. To complicate this further,
4013          * as we don't wait for the first interrupt after reset, we have to
4014          * fake the HW write to point back to the last entry so that our
4015          * inline comparison of our cached head position against the last HW
4016          * write works even before the first interrupt.
4017          */
4018         execlists->csb_head = reset_value;
4019         WRITE_ONCE(*execlists->csb_write, reset_value);
4020         wmb(); /* Make sure this is visible to HW (paranoia?) */
4021
4022         /* Check that the GPU does indeed update the CSB entries! */
4023         memset(execlists->csb_status, -1, (reset_value + 1) * sizeof(u64));
4024         invalidate_csb_entries(&execlists->csb_status[0],
4025                                &execlists->csb_status[reset_value]);
4026
4027         /* Once more for luck and our trusty paranoia */
4028         ENGINE_WRITE(engine, RING_CONTEXT_STATUS_PTR,
4029                      0xffff << 16 | reset_value << 8 | reset_value);
4030         ENGINE_POSTING_READ(engine, RING_CONTEXT_STATUS_PTR);
4031
4032         GEM_BUG_ON(READ_ONCE(*execlists->csb_write) != reset_value);
4033 }
4034
4035 static void execlists_sanitize(struct intel_engine_cs *engine)
4036 {
4037         /*
4038          * Poison residual state on resume, in case the suspend didn't!
4039          *
4040          * We have to assume that across suspend/resume (or other loss
4041          * of control) that the contents of our pinned buffers has been
4042          * lost, replaced by garbage. Since this doesn't always happen,
4043          * let's poison such state so that we more quickly spot when
4044          * we falsely assume it has been preserved.
4045          */
4046         if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
4047                 memset(engine->status_page.addr, POISON_INUSE, PAGE_SIZE);
4048
4049         reset_csb_pointers(engine);
4050
4051         /*
4052          * The kernel_context HWSP is stored in the status_page. As above,
4053          * that may be lost on resume/initialisation, and so we need to
4054          * reset the value in the HWSP.
4055          */
4056         intel_timeline_reset_seqno(engine->kernel_context->timeline);
4057
4058         /* And scrub the dirty cachelines for the HWSP */
4059         clflush_cache_range(engine->status_page.addr, PAGE_SIZE);
4060 }
4061
4062 static void enable_error_interrupt(struct intel_engine_cs *engine)
4063 {
4064         u32 status;
4065
4066         engine->execlists.error_interrupt = 0;
4067         ENGINE_WRITE(engine, RING_EMR, ~0u);
4068         ENGINE_WRITE(engine, RING_EIR, ~0u); /* clear all existing errors */
4069
4070         status = ENGINE_READ(engine, RING_ESR);
4071         if (unlikely(status)) {
4072                 drm_err(&engine->i915->drm,
4073                         "engine '%s' resumed still in error: %08x\n",
4074                         engine->name, status);
4075                 __intel_gt_reset(engine->gt, engine->mask);
4076         }
4077
4078         /*
4079          * On current gen8+, we have 2 signals to play with
4080          *
4081          * - I915_ERROR_INSTUCTION (bit 0)
4082          *
4083          *    Generate an error if the command parser encounters an invalid
4084          *    instruction
4085          *
4086          *    This is a fatal error.
4087          *
4088          * - CP_PRIV (bit 2)
4089          *
4090          *    Generate an error on privilege violation (where the CP replaces
4091          *    the instruction with a no-op). This also fires for writes into
4092          *    read-only scratch pages.
4093          *
4094          *    This is a non-fatal error, parsing continues.
4095          *
4096          * * there are a few others defined for odd HW that we do not use
4097          *
4098          * Since CP_PRIV fires for cases where we have chosen to ignore the
4099          * error (as the HW is validating and suppressing the mistakes), we
4100          * only unmask the instruction error bit.
4101          */
4102         ENGINE_WRITE(engine, RING_EMR, ~I915_ERROR_INSTRUCTION);
4103 }
4104
4105 static void enable_execlists(struct intel_engine_cs *engine)
4106 {
4107         u32 mode;
4108
4109         assert_forcewakes_active(engine->uncore, FORCEWAKE_ALL);
4110
4111         intel_engine_set_hwsp_writemask(engine, ~0u); /* HWSTAM */
4112
4113         if (INTEL_GEN(engine->i915) >= 11)
4114                 mode = _MASKED_BIT_ENABLE(GEN11_GFX_DISABLE_LEGACY_MODE);
4115         else
4116                 mode = _MASKED_BIT_ENABLE(GFX_RUN_LIST_ENABLE);
4117         ENGINE_WRITE_FW(engine, RING_MODE_GEN7, mode);
4118
4119         ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
4120
4121         ENGINE_WRITE_FW(engine,
4122                         RING_HWS_PGA,
4123                         i915_ggtt_offset(engine->status_page.vma));
4124         ENGINE_POSTING_READ(engine, RING_HWS_PGA);
4125
4126         enable_error_interrupt(engine);
4127
4128         engine->context_tag = GENMASK(BITS_PER_LONG - 2, 0);
4129 }
4130
4131 static bool unexpected_starting_state(struct intel_engine_cs *engine)
4132 {
4133         bool unexpected = false;
4134
4135         if (ENGINE_READ_FW(engine, RING_MI_MODE) & STOP_RING) {
4136                 drm_dbg(&engine->i915->drm,
4137                         "STOP_RING still set in RING_MI_MODE\n");
4138                 unexpected = true;
4139         }
4140
4141         return unexpected;
4142 }
4143
4144 static int execlists_resume(struct intel_engine_cs *engine)
4145 {
4146         intel_mocs_init_engine(engine);
4147
4148         intel_breadcrumbs_reset(engine->breadcrumbs);
4149
4150         if (GEM_SHOW_DEBUG() && unexpected_starting_state(engine)) {
4151                 struct drm_printer p = drm_debug_printer(__func__);
4152
4153                 intel_engine_dump(engine, &p, NULL);
4154         }
4155
4156         enable_execlists(engine);
4157
4158         return 0;
4159 }
4160
4161 static void execlists_reset_prepare(struct intel_engine_cs *engine)
4162 {
4163         struct intel_engine_execlists * const execlists = &engine->execlists;
4164         unsigned long flags;
4165
4166         ENGINE_TRACE(engine, "depth<-%d\n",
4167                      atomic_read(&execlists->tasklet.count));
4168
4169         /*
4170          * Prevent request submission to the hardware until we have
4171          * completed the reset in i915_gem_reset_finish(). If a request
4172          * is completed by one engine, it may then queue a request
4173          * to a second via its execlists->tasklet *just* as we are
4174          * calling engine->resume() and also writing the ELSP.
4175          * Turning off the execlists->tasklet until the reset is over
4176          * prevents the race.
4177          */
4178         __tasklet_disable_sync_once(&execlists->tasklet);
4179         GEM_BUG_ON(!reset_in_progress(execlists));
4180
4181         /* And flush any current direct submission. */
4182         spin_lock_irqsave(&engine->active.lock, flags);
4183         spin_unlock_irqrestore(&engine->active.lock, flags);
4184
4185         /*
4186          * We stop engines, otherwise we might get failed reset and a
4187          * dead gpu (on elk). Also as modern gpu as kbl can suffer
4188          * from system hang if batchbuffer is progressing when
4189          * the reset is issued, regardless of READY_TO_RESET ack.
4190          * Thus assume it is best to stop engines on all gens
4191          * where we have a gpu reset.
4192          *
4193          * WaKBLVECSSemaphoreWaitPoll:kbl (on ALL_ENGINES)
4194          *
4195          * FIXME: Wa for more modern gens needs to be validated
4196          */
4197         ring_set_paused(engine, 1);
4198         intel_engine_stop_cs(engine);
4199
4200         engine->execlists.reset_ccid = active_ccid(engine);
4201 }
4202
4203 static void __reset_stop_ring(u32 *regs, const struct intel_engine_cs *engine)
4204 {
4205         int x;
4206
4207         x = lrc_ring_mi_mode(engine);
4208         if (x != -1) {
4209                 regs[x + 1] &= ~STOP_RING;
4210                 regs[x + 1] |= STOP_RING << 16;
4211         }
4212 }
4213
4214 static void __execlists_reset_reg_state(const struct intel_context *ce,
4215                                         const struct intel_engine_cs *engine)
4216 {
4217         u32 *regs = ce->lrc_reg_state;
4218
4219         __reset_stop_ring(regs, engine);
4220 }
4221
4222 static void __execlists_reset(struct intel_engine_cs *engine, bool stalled)
4223 {
4224         struct intel_engine_execlists * const execlists = &engine->execlists;
4225         struct intel_context *ce;
4226         struct i915_request *rq;
4227         u32 head;
4228
4229         mb(); /* paranoia: read the CSB pointers from after the reset */
4230         clflush(execlists->csb_write);
4231         mb();
4232
4233         process_csb(engine); /* drain preemption events */
4234
4235         /* Following the reset, we need to reload the CSB read/write pointers */
4236         reset_csb_pointers(engine);
4237
4238         /*
4239          * Save the currently executing context, even if we completed
4240          * its request, it was still running at the time of the
4241          * reset and will have been clobbered.
4242          */
4243         rq = active_context(engine, engine->execlists.reset_ccid);
4244         if (!rq)
4245                 goto unwind;
4246
4247         ce = rq->context;
4248         GEM_BUG_ON(!i915_vma_is_pinned(ce->state));
4249
4250         if (i915_request_completed(rq)) {
4251                 /* Idle context; tidy up the ring so we can restart afresh */
4252                 head = intel_ring_wrap(ce->ring, rq->tail);
4253                 goto out_replay;
4254         }
4255
4256         /* We still have requests in-flight; the engine should be active */
4257         GEM_BUG_ON(!intel_engine_pm_is_awake(engine));
4258
4259         /* Context has requests still in-flight; it should not be idle! */
4260         GEM_BUG_ON(i915_active_is_idle(&ce->active));
4261
4262         rq = active_request(ce->timeline, rq);
4263         head = intel_ring_wrap(ce->ring, rq->head);
4264         GEM_BUG_ON(head == ce->ring->tail);
4265
4266         /*
4267          * If this request hasn't started yet, e.g. it is waiting on a
4268          * semaphore, we need to avoid skipping the request or else we
4269          * break the signaling chain. However, if the context is corrupt
4270          * the request will not restart and we will be stuck with a wedged
4271          * device. It is quite often the case that if we issue a reset
4272          * while the GPU is loading the context image, that the context
4273          * image becomes corrupt.
4274          *
4275          * Otherwise, if we have not started yet, the request should replay
4276          * perfectly and we do not need to flag the result as being erroneous.
4277          */
4278         if (!i915_request_started(rq))
4279                 goto out_replay;
4280
4281         /*
4282          * If the request was innocent, we leave the request in the ELSP
4283          * and will try to replay it on restarting. The context image may
4284          * have been corrupted by the reset, in which case we may have
4285          * to service a new GPU hang, but more likely we can continue on
4286          * without impact.
4287          *
4288          * If the request was guilty, we presume the context is corrupt
4289          * and have to at least restore the RING register in the context
4290          * image back to the expected values to skip over the guilty request.
4291          */
4292         __i915_request_reset(rq, stalled);
4293
4294         /*
4295          * We want a simple context + ring to execute the breadcrumb update.
4296          * We cannot rely on the context being intact across the GPU hang,
4297          * so clear it and rebuild just what we need for the breadcrumb.
4298          * All pending requests for this context will be zapped, and any
4299          * future request will be after userspace has had the opportunity
4300          * to recreate its own state.
4301          */
4302 out_replay:
4303         ENGINE_TRACE(engine, "replay {head:%04x, tail:%04x}\n",
4304                      head, ce->ring->tail);
4305         __execlists_reset_reg_state(ce, engine);
4306         __execlists_update_reg_state(ce, engine, head);
4307         ce->lrc.desc |= CTX_DESC_FORCE_RESTORE; /* paranoid: GPU was reset! */
4308
4309 unwind:
4310         /* Push back any incomplete requests for replay after the reset. */
4311         cancel_port_requests(execlists);
4312         __unwind_incomplete_requests(engine);
4313 }
4314
4315 static void execlists_reset_rewind(struct intel_engine_cs *engine, bool stalled)
4316 {
4317         unsigned long flags;
4318
4319         ENGINE_TRACE(engine, "\n");
4320
4321         spin_lock_irqsave(&engine->active.lock, flags);
4322
4323         __execlists_reset(engine, stalled);
4324
4325         spin_unlock_irqrestore(&engine->active.lock, flags);
4326 }
4327
4328 static void nop_submission_tasklet(unsigned long data)
4329 {
4330         struct intel_engine_cs * const engine = (struct intel_engine_cs *)data;
4331
4332         /* The driver is wedged; don't process any more events. */
4333         WRITE_ONCE(engine->execlists.queue_priority_hint, INT_MIN);
4334 }
4335
4336 static void execlists_reset_cancel(struct intel_engine_cs *engine)
4337 {
4338         struct intel_engine_execlists * const execlists = &engine->execlists;
4339         struct i915_request *rq, *rn;
4340         struct rb_node *rb;
4341         unsigned long flags;
4342
4343         ENGINE_TRACE(engine, "\n");
4344
4345         /*
4346          * Before we call engine->cancel_requests(), we should have exclusive
4347          * access to the submission state. This is arranged for us by the
4348          * caller disabling the interrupt generation, the tasklet and other
4349          * threads that may then access the same state, giving us a free hand
4350          * to reset state. However, we still need to let lockdep be aware that
4351          * we know this state may be accessed in hardirq context, so we
4352          * disable the irq around this manipulation and we want to keep
4353          * the spinlock focused on its duties and not accidentally conflate
4354          * coverage to the submission's irq state. (Similarly, although we
4355          * shouldn't need to disable irq around the manipulation of the
4356          * submission's irq state, we also wish to remind ourselves that
4357          * it is irq state.)
4358          */
4359         spin_lock_irqsave(&engine->active.lock, flags);
4360
4361         __execlists_reset(engine, true);
4362
4363         /* Mark all executing requests as skipped. */
4364         list_for_each_entry(rq, &engine->active.requests, sched.link)
4365                 mark_eio(rq);
4366
4367         /* Flush the queued requests to the timeline list (for retiring). */
4368         while ((rb = rb_first_cached(&execlists->queue))) {
4369                 struct i915_priolist *p = to_priolist(rb);
4370                 int i;
4371
4372                 priolist_for_each_request_consume(rq, rn, p, i) {
4373                         mark_eio(rq);
4374                         __i915_request_submit(rq);
4375                 }
4376
4377                 rb_erase_cached(&p->node, &execlists->queue);
4378                 i915_priolist_free(p);
4379         }
4380
4381         /* On-hold requests will be flushed to timeline upon their release */
4382         list_for_each_entry(rq, &engine->active.hold, sched.link)
4383                 mark_eio(rq);
4384
4385         /* Cancel all attached virtual engines */
4386         while ((rb = rb_first_cached(&execlists->virtual))) {
4387                 struct virtual_engine *ve =
4388                         rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
4389
4390                 rb_erase_cached(rb, &execlists->virtual);
4391                 RB_CLEAR_NODE(rb);
4392
4393                 spin_lock(&ve->base.active.lock);
4394                 rq = fetch_and_zero(&ve->request);
4395                 if (rq) {
4396                         mark_eio(rq);
4397
4398                         rq->engine = engine;
4399                         __i915_request_submit(rq);
4400                         i915_request_put(rq);
4401
4402                         ve->base.execlists.queue_priority_hint = INT_MIN;
4403                 }
4404                 spin_unlock(&ve->base.active.lock);
4405         }
4406
4407         /* Remaining _unready_ requests will be nop'ed when submitted */
4408
4409         execlists->queue_priority_hint = INT_MIN;
4410         execlists->queue = RB_ROOT_CACHED;
4411
4412         GEM_BUG_ON(__tasklet_is_enabled(&execlists->tasklet));
4413         execlists->tasklet.func = nop_submission_tasklet;
4414
4415         spin_unlock_irqrestore(&engine->active.lock, flags);
4416 }
4417
4418 static void execlists_reset_finish(struct intel_engine_cs *engine)
4419 {
4420         struct intel_engine_execlists * const execlists = &engine->execlists;
4421
4422         /*
4423          * After a GPU reset, we may have requests to replay. Do so now while
4424          * we still have the forcewake to be sure that the GPU is not allowed
4425          * to sleep before we restart and reload a context.
4426          */
4427         GEM_BUG_ON(!reset_in_progress(execlists));
4428         if (!RB_EMPTY_ROOT(&execlists->queue.rb_root))
4429                 execlists->tasklet.func(execlists->tasklet.data);
4430
4431         if (__tasklet_enable(&execlists->tasklet))
4432                 /* And kick in case we missed a new request submission. */
4433                 tasklet_hi_schedule(&execlists->tasklet);
4434         ENGINE_TRACE(engine, "depth->%d\n",
4435                      atomic_read(&execlists->tasklet.count));
4436 }
4437
4438 static int gen8_emit_bb_start_noarb(struct i915_request *rq,
4439                                     u64 offset, u32 len,
4440                                     const unsigned int flags)
4441 {
4442         u32 *cs;
4443
4444         cs = intel_ring_begin(rq, 4);
4445         if (IS_ERR(cs))
4446                 return PTR_ERR(cs);
4447
4448         /*
4449          * WaDisableCtxRestoreArbitration:bdw,chv
4450          *
4451          * We don't need to perform MI_ARB_ENABLE as often as we do (in
4452          * particular all the gen that do not need the w/a at all!), if we
4453          * took care to make sure that on every switch into this context
4454          * (both ordinary and for preemption) that arbitrartion was enabled
4455          * we would be fine.  However, for gen8 there is another w/a that
4456          * requires us to not preempt inside GPGPU execution, so we keep
4457          * arbitration disabled for gen8 batches. Arbitration will be
4458          * re-enabled before we close the request
4459          * (engine->emit_fini_breadcrumb).
4460          */
4461         *cs++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
4462
4463         /* FIXME(BDW+): Address space and security selectors. */
4464         *cs++ = MI_BATCH_BUFFER_START_GEN8 |
4465                 (flags & I915_DISPATCH_SECURE ? 0 : BIT(8));
4466         *cs++ = lower_32_bits(offset);
4467         *cs++ = upper_32_bits(offset);
4468
4469         intel_ring_advance(rq, cs);
4470
4471         return 0;
4472 }
4473
4474 static int gen8_emit_bb_start(struct i915_request *rq,
4475                               u64 offset, u32 len,
4476                               const unsigned int flags)
4477 {
4478         u32 *cs;
4479
4480         cs = intel_ring_begin(rq, 6);
4481         if (IS_ERR(cs))
4482                 return PTR_ERR(cs);
4483
4484         *cs++ = MI_ARB_ON_OFF | MI_ARB_ENABLE;
4485
4486         *cs++ = MI_BATCH_BUFFER_START_GEN8 |
4487                 (flags & I915_DISPATCH_SECURE ? 0 : BIT(8));
4488         *cs++ = lower_32_bits(offset);
4489         *cs++ = upper_32_bits(offset);
4490
4491         *cs++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
4492         *cs++ = MI_NOOP;
4493
4494         intel_ring_advance(rq, cs);
4495
4496         return 0;
4497 }
4498
4499 static void gen8_logical_ring_enable_irq(struct intel_engine_cs *engine)
4500 {
4501         ENGINE_WRITE(engine, RING_IMR,
4502                      ~(engine->irq_enable_mask | engine->irq_keep_mask));
4503         ENGINE_POSTING_READ(engine, RING_IMR);
4504 }
4505
4506 static void gen8_logical_ring_disable_irq(struct intel_engine_cs *engine)
4507 {
4508         ENGINE_WRITE(engine, RING_IMR, ~engine->irq_keep_mask);
4509 }
4510
4511 static int gen8_emit_flush(struct i915_request *request, u32 mode)
4512 {
4513         u32 cmd, *cs;
4514
4515         cs = intel_ring_begin(request, 4);
4516         if (IS_ERR(cs))
4517                 return PTR_ERR(cs);
4518
4519         cmd = MI_FLUSH_DW + 1;
4520
4521         /* We always require a command barrier so that subsequent
4522          * commands, such as breadcrumb interrupts, are strictly ordered
4523          * wrt the contents of the write cache being flushed to memory
4524          * (and thus being coherent from the CPU).
4525          */
4526         cmd |= MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
4527
4528         if (mode & EMIT_INVALIDATE) {
4529                 cmd |= MI_INVALIDATE_TLB;
4530                 if (request->engine->class == VIDEO_DECODE_CLASS)
4531                         cmd |= MI_INVALIDATE_BSD;
4532         }
4533
4534         *cs++ = cmd;
4535         *cs++ = LRC_PPHWSP_SCRATCH_ADDR;
4536         *cs++ = 0; /* upper addr */
4537         *cs++ = 0; /* value */
4538         intel_ring_advance(request, cs);
4539
4540         return 0;
4541 }
4542
4543 static int gen8_emit_flush_render(struct i915_request *request,
4544                                   u32 mode)
4545 {
4546         bool vf_flush_wa = false, dc_flush_wa = false;
4547         u32 *cs, flags = 0;
4548         int len;
4549
4550         flags |= PIPE_CONTROL_CS_STALL;
4551
4552         if (mode & EMIT_FLUSH) {
4553                 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
4554                 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
4555                 flags |= PIPE_CONTROL_DC_FLUSH_ENABLE;
4556                 flags |= PIPE_CONTROL_FLUSH_ENABLE;
4557         }
4558
4559         if (mode & EMIT_INVALIDATE) {
4560                 flags |= PIPE_CONTROL_TLB_INVALIDATE;
4561                 flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
4562                 flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
4563                 flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
4564                 flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
4565                 flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
4566                 flags |= PIPE_CONTROL_QW_WRITE;
4567                 flags |= PIPE_CONTROL_STORE_DATA_INDEX;
4568
4569                 /*
4570                  * On GEN9: before VF_CACHE_INVALIDATE we need to emit a NULL
4571                  * pipe control.
4572                  */
4573                 if (IS_GEN(request->engine->i915, 9))
4574                         vf_flush_wa = true;
4575
4576                 /* WaForGAMHang:kbl */
4577                 if (IS_KBL_GT_REVID(request->engine->i915, 0, KBL_REVID_B0))
4578                         dc_flush_wa = true;
4579         }
4580
4581         len = 6;
4582
4583         if (vf_flush_wa)
4584                 len += 6;
4585
4586         if (dc_flush_wa)
4587                 len += 12;
4588
4589         cs = intel_ring_begin(request, len);
4590         if (IS_ERR(cs))
4591                 return PTR_ERR(cs);
4592
4593         if (vf_flush_wa)
4594                 cs = gen8_emit_pipe_control(cs, 0, 0);
4595
4596         if (dc_flush_wa)
4597                 cs = gen8_emit_pipe_control(cs, PIPE_CONTROL_DC_FLUSH_ENABLE,
4598                                             0);
4599
4600         cs = gen8_emit_pipe_control(cs, flags, LRC_PPHWSP_SCRATCH_ADDR);
4601
4602         if (dc_flush_wa)
4603                 cs = gen8_emit_pipe_control(cs, PIPE_CONTROL_CS_STALL, 0);
4604
4605         intel_ring_advance(request, cs);
4606
4607         return 0;
4608 }
4609
4610 static int gen11_emit_flush_render(struct i915_request *request,
4611                                    u32 mode)
4612 {
4613         if (mode & EMIT_FLUSH) {
4614                 u32 *cs;
4615                 u32 flags = 0;
4616
4617                 flags |= PIPE_CONTROL_CS_STALL;
4618
4619                 flags |= PIPE_CONTROL_TILE_CACHE_FLUSH;
4620                 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
4621                 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
4622                 flags |= PIPE_CONTROL_DC_FLUSH_ENABLE;
4623                 flags |= PIPE_CONTROL_FLUSH_ENABLE;
4624                 flags |= PIPE_CONTROL_QW_WRITE;
4625                 flags |= PIPE_CONTROL_STORE_DATA_INDEX;
4626
4627                 cs = intel_ring_begin(request, 6);
4628                 if (IS_ERR(cs))
4629                         return PTR_ERR(cs);
4630
4631                 cs = gen8_emit_pipe_control(cs, flags, LRC_PPHWSP_SCRATCH_ADDR);
4632                 intel_ring_advance(request, cs);
4633         }
4634
4635         if (mode & EMIT_INVALIDATE) {
4636                 u32 *cs;
4637                 u32 flags = 0;
4638
4639                 flags |= PIPE_CONTROL_CS_STALL;
4640
4641                 flags |= PIPE_CONTROL_COMMAND_CACHE_INVALIDATE;
4642                 flags |= PIPE_CONTROL_TLB_INVALIDATE;
4643                 flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
4644                 flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
4645                 flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
4646                 flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
4647                 flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
4648                 flags |= PIPE_CONTROL_QW_WRITE;
4649                 flags |= PIPE_CONTROL_STORE_DATA_INDEX;
4650
4651                 cs = intel_ring_begin(request, 6);
4652                 if (IS_ERR(cs))
4653                         return PTR_ERR(cs);
4654
4655                 cs = gen8_emit_pipe_control(cs, flags, LRC_PPHWSP_SCRATCH_ADDR);
4656                 intel_ring_advance(request, cs);
4657         }
4658
4659         return 0;
4660 }
4661
4662 static u32 preparser_disable(bool state)
4663 {
4664         return MI_ARB_CHECK | 1 << 8 | state;
4665 }
4666
4667 static i915_reg_t aux_inv_reg(const struct intel_engine_cs *engine)
4668 {
4669         static const i915_reg_t vd[] = {
4670                 GEN12_VD0_AUX_NV,
4671                 GEN12_VD1_AUX_NV,
4672                 GEN12_VD2_AUX_NV,
4673                 GEN12_VD3_AUX_NV,
4674         };
4675
4676         static const i915_reg_t ve[] = {
4677                 GEN12_VE0_AUX_NV,
4678                 GEN12_VE1_AUX_NV,
4679         };
4680
4681         if (engine->class == VIDEO_DECODE_CLASS)
4682                 return vd[engine->instance];
4683
4684         if (engine->class == VIDEO_ENHANCEMENT_CLASS)
4685                 return ve[engine->instance];
4686
4687         GEM_BUG_ON("unknown aux_inv_reg\n");
4688
4689         return INVALID_MMIO_REG;
4690 }
4691
4692 static u32 *
4693 gen12_emit_aux_table_inv(const i915_reg_t inv_reg, u32 *cs)
4694 {
4695         *cs++ = MI_LOAD_REGISTER_IMM(1);
4696         *cs++ = i915_mmio_reg_offset(inv_reg);
4697         *cs++ = AUX_INV;
4698         *cs++ = MI_NOOP;
4699
4700         return cs;
4701 }
4702
4703 static int gen12_emit_flush_render(struct i915_request *request,
4704                                    u32 mode)
4705 {
4706         if (mode & EMIT_FLUSH) {
4707                 u32 flags = 0;
4708                 u32 *cs;
4709
4710                 flags |= PIPE_CONTROL_TILE_CACHE_FLUSH;
4711                 flags |= PIPE_CONTROL_FLUSH_L3;
4712                 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
4713                 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
4714                 /* Wa_1409600907:tgl */
4715                 flags |= PIPE_CONTROL_DEPTH_STALL;
4716                 flags |= PIPE_CONTROL_DC_FLUSH_ENABLE;
4717                 flags |= PIPE_CONTROL_FLUSH_ENABLE;
4718
4719                 flags |= PIPE_CONTROL_STORE_DATA_INDEX;
4720                 flags |= PIPE_CONTROL_QW_WRITE;
4721
4722                 flags |= PIPE_CONTROL_CS_STALL;
4723
4724                 cs = intel_ring_begin(request, 6);
4725                 if (IS_ERR(cs))
4726                         return PTR_ERR(cs);
4727
4728                 cs = gen12_emit_pipe_control(cs,
4729                                              PIPE_CONTROL0_HDC_PIPELINE_FLUSH,
4730                                              flags, LRC_PPHWSP_SCRATCH_ADDR);
4731                 intel_ring_advance(request, cs);
4732         }
4733
4734         if (mode & EMIT_INVALIDATE) {
4735                 u32 flags = 0;
4736                 u32 *cs;
4737
4738                 flags |= PIPE_CONTROL_COMMAND_CACHE_INVALIDATE;
4739                 flags |= PIPE_CONTROL_TLB_INVALIDATE;
4740                 flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
4741                 flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
4742                 flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
4743                 flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
4744                 flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
4745
4746                 flags |= PIPE_CONTROL_STORE_DATA_INDEX;
4747                 flags |= PIPE_CONTROL_QW_WRITE;
4748
4749                 flags |= PIPE_CONTROL_CS_STALL;
4750
4751                 cs = intel_ring_begin(request, 8 + 4);
4752                 if (IS_ERR(cs))
4753                         return PTR_ERR(cs);
4754
4755                 /*
4756                  * Prevent the pre-parser from skipping past the TLB
4757                  * invalidate and loading a stale page for the batch
4758                  * buffer / request payload.
4759                  */
4760                 *cs++ = preparser_disable(true);
4761
4762                 cs = gen8_emit_pipe_control(cs, flags, LRC_PPHWSP_SCRATCH_ADDR);
4763
4764                 /* hsdes: 1809175790 */
4765                 cs = gen12_emit_aux_table_inv(GEN12_GFX_CCS_AUX_NV, cs);
4766
4767                 *cs++ = preparser_disable(false);
4768                 intel_ring_advance(request, cs);
4769         }
4770
4771         return 0;
4772 }
4773
4774 static int gen12_emit_flush(struct i915_request *request, u32 mode)
4775 {
4776         intel_engine_mask_t aux_inv = 0;
4777         u32 cmd, *cs;
4778
4779         cmd = 4;
4780         if (mode & EMIT_INVALIDATE)
4781                 cmd += 2;
4782         if (mode & EMIT_INVALIDATE)
4783                 aux_inv = request->engine->mask & ~BIT(BCS0);
4784         if (aux_inv)
4785                 cmd += 2 * hweight8(aux_inv) + 2;
4786
4787         cs = intel_ring_begin(request, cmd);
4788         if (IS_ERR(cs))
4789                 return PTR_ERR(cs);
4790
4791         if (mode & EMIT_INVALIDATE)
4792                 *cs++ = preparser_disable(true);
4793
4794         cmd = MI_FLUSH_DW + 1;
4795
4796         /* We always require a command barrier so that subsequent
4797          * commands, such as breadcrumb interrupts, are strictly ordered
4798          * wrt the contents of the write cache being flushed to memory
4799          * (and thus being coherent from the CPU).
4800          */
4801         cmd |= MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
4802
4803         if (mode & EMIT_INVALIDATE) {
4804                 cmd |= MI_INVALIDATE_TLB;
4805                 if (request->engine->class == VIDEO_DECODE_CLASS)
4806                         cmd |= MI_INVALIDATE_BSD;
4807         }
4808
4809         *cs++ = cmd;
4810         *cs++ = LRC_PPHWSP_SCRATCH_ADDR;
4811         *cs++ = 0; /* upper addr */
4812         *cs++ = 0; /* value */
4813
4814         if (aux_inv) { /* hsdes: 1809175790 */
4815                 struct intel_engine_cs *engine;
4816                 unsigned int tmp;
4817
4818                 *cs++ = MI_LOAD_REGISTER_IMM(hweight8(aux_inv));
4819                 for_each_engine_masked(engine, request->engine->gt,
4820                                        aux_inv, tmp) {
4821                         *cs++ = i915_mmio_reg_offset(aux_inv_reg(engine));
4822                         *cs++ = AUX_INV;
4823                 }
4824                 *cs++ = MI_NOOP;
4825         }
4826
4827         if (mode & EMIT_INVALIDATE)
4828                 *cs++ = preparser_disable(false);
4829
4830         intel_ring_advance(request, cs);
4831
4832         return 0;
4833 }
4834
4835 static void assert_request_valid(struct i915_request *rq)
4836 {
4837         struct intel_ring *ring __maybe_unused = rq->ring;
4838
4839         /* Can we unwind this request without appearing to go forwards? */
4840         GEM_BUG_ON(intel_ring_direction(ring, rq->wa_tail, rq->head) <= 0);
4841 }
4842
4843 /*
4844  * Reserve space for 2 NOOPs at the end of each request to be
4845  * used as a workaround for not being allowed to do lite
4846  * restore with HEAD==TAIL (WaIdleLiteRestore).
4847  */
4848 static u32 *gen8_emit_wa_tail(struct i915_request *request, u32 *cs)
4849 {
4850         /* Ensure there's always at least one preemption point per-request. */
4851         *cs++ = MI_ARB_CHECK;
4852         *cs++ = MI_NOOP;
4853         request->wa_tail = intel_ring_offset(request, cs);
4854
4855         /* Check that entire request is less than half the ring */
4856         assert_request_valid(request);
4857
4858         return cs;
4859 }
4860
4861 static u32 *emit_preempt_busywait(struct i915_request *request, u32 *cs)
4862 {
4863         *cs++ = MI_SEMAPHORE_WAIT |
4864                 MI_SEMAPHORE_GLOBAL_GTT |
4865                 MI_SEMAPHORE_POLL |
4866                 MI_SEMAPHORE_SAD_EQ_SDD;
4867         *cs++ = 0;
4868         *cs++ = intel_hws_preempt_address(request->engine);
4869         *cs++ = 0;
4870
4871         return cs;
4872 }
4873
4874 static __always_inline u32*
4875 gen8_emit_fini_breadcrumb_tail(struct i915_request *request, u32 *cs)
4876 {
4877         *cs++ = MI_USER_INTERRUPT;
4878
4879         *cs++ = MI_ARB_ON_OFF | MI_ARB_ENABLE;
4880         if (intel_engine_has_semaphores(request->engine))
4881                 cs = emit_preempt_busywait(request, cs);
4882
4883         request->tail = intel_ring_offset(request, cs);
4884         assert_ring_tail_valid(request->ring, request->tail);
4885
4886         return gen8_emit_wa_tail(request, cs);
4887 }
4888
4889 static u32 *emit_xcs_breadcrumb(struct i915_request *request, u32 *cs)
4890 {
4891         u32 addr = i915_request_active_timeline(request)->hwsp_offset;
4892
4893         return gen8_emit_ggtt_write(cs, request->fence.seqno, addr, 0);
4894 }
4895
4896 static u32 *gen8_emit_fini_breadcrumb(struct i915_request *rq, u32 *cs)
4897 {
4898         return gen8_emit_fini_breadcrumb_tail(rq, emit_xcs_breadcrumb(rq, cs));
4899 }
4900
4901 static u32 *gen8_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs)
4902 {
4903         cs = gen8_emit_pipe_control(cs,
4904                                     PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH |
4905                                     PIPE_CONTROL_DEPTH_CACHE_FLUSH |
4906                                     PIPE_CONTROL_DC_FLUSH_ENABLE,
4907                                     0);
4908
4909         /* XXX flush+write+CS_STALL all in one upsets gem_concurrent_blt:kbl */
4910         cs = gen8_emit_ggtt_write_rcs(cs,
4911                                       request->fence.seqno,
4912                                       i915_request_active_timeline(request)->hwsp_offset,
4913                                       PIPE_CONTROL_FLUSH_ENABLE |
4914                                       PIPE_CONTROL_CS_STALL);
4915
4916         return gen8_emit_fini_breadcrumb_tail(request, cs);
4917 }
4918
4919 static u32 *
4920 gen11_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs)
4921 {
4922         cs = gen8_emit_ggtt_write_rcs(cs,
4923                                       request->fence.seqno,
4924                                       i915_request_active_timeline(request)->hwsp_offset,
4925                                       PIPE_CONTROL_CS_STALL |
4926                                       PIPE_CONTROL_TILE_CACHE_FLUSH |
4927                                       PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH |
4928                                       PIPE_CONTROL_DEPTH_CACHE_FLUSH |
4929                                       PIPE_CONTROL_DC_FLUSH_ENABLE |
4930                                       PIPE_CONTROL_FLUSH_ENABLE);
4931
4932         return gen8_emit_fini_breadcrumb_tail(request, cs);
4933 }
4934
4935 /*
4936  * Note that the CS instruction pre-parser will not stall on the breadcrumb
4937  * flush and will continue pre-fetching the instructions after it before the
4938  * memory sync is completed. On pre-gen12 HW, the pre-parser will stop at
4939  * BB_START/END instructions, so, even though we might pre-fetch the pre-amble
4940  * of the next request before the memory has been flushed, we're guaranteed that
4941  * we won't access the batch itself too early.
4942  * However, on gen12+ the parser can pre-fetch across the BB_START/END commands,
4943  * so, if the current request is modifying an instruction in the next request on
4944  * the same intel_context, we might pre-fetch and then execute the pre-update
4945  * instruction. To avoid this, the users of self-modifying code should either
4946  * disable the parser around the code emitting the memory writes, via a new flag
4947  * added to MI_ARB_CHECK, or emit the writes from a different intel_context. For
4948  * the in-kernel use-cases we've opted to use a separate context, see
4949  * reloc_gpu() as an example.
4950  * All the above applies only to the instructions themselves. Non-inline data
4951  * used by the instructions is not pre-fetched.
4952  */
4953
4954 static u32 *gen12_emit_preempt_busywait(struct i915_request *request, u32 *cs)
4955 {
4956         *cs++ = MI_SEMAPHORE_WAIT_TOKEN |
4957                 MI_SEMAPHORE_GLOBAL_GTT |
4958                 MI_SEMAPHORE_POLL |
4959                 MI_SEMAPHORE_SAD_EQ_SDD;
4960         *cs++ = 0;
4961         *cs++ = intel_hws_preempt_address(request->engine);
4962         *cs++ = 0;
4963         *cs++ = 0;
4964         *cs++ = MI_NOOP;
4965
4966         return cs;
4967 }
4968
4969 static __always_inline u32*
4970 gen12_emit_fini_breadcrumb_tail(struct i915_request *request, u32 *cs)
4971 {
4972         *cs++ = MI_USER_INTERRUPT;
4973
4974         *cs++ = MI_ARB_ON_OFF | MI_ARB_ENABLE;
4975         if (intel_engine_has_semaphores(request->engine))
4976                 cs = gen12_emit_preempt_busywait(request, cs);
4977
4978         request->tail = intel_ring_offset(request, cs);
4979         assert_ring_tail_valid(request->ring, request->tail);
4980
4981         return gen8_emit_wa_tail(request, cs);
4982 }
4983
4984 static u32 *gen12_emit_fini_breadcrumb(struct i915_request *rq, u32 *cs)
4985 {
4986         return gen12_emit_fini_breadcrumb_tail(rq, emit_xcs_breadcrumb(rq, cs));
4987 }
4988
4989 static u32 *
4990 gen12_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs)
4991 {
4992         cs = gen12_emit_ggtt_write_rcs(cs,
4993                                        request->fence.seqno,
4994                                        i915_request_active_timeline(request)->hwsp_offset,
4995                                        PIPE_CONTROL0_HDC_PIPELINE_FLUSH,
4996                                        PIPE_CONTROL_CS_STALL |
4997                                        PIPE_CONTROL_TILE_CACHE_FLUSH |
4998                                        PIPE_CONTROL_FLUSH_L3 |
4999                                        PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH |
5000                                        PIPE_CONTROL_DEPTH_CACHE_FLUSH |
5001                                        /* Wa_1409600907:tgl */
5002                                        PIPE_CONTROL_DEPTH_STALL |
5003                                        PIPE_CONTROL_DC_FLUSH_ENABLE |
5004                                        PIPE_CONTROL_FLUSH_ENABLE);
5005
5006         return gen12_emit_fini_breadcrumb_tail(request, cs);
5007 }
5008
5009 static void execlists_park(struct intel_engine_cs *engine)
5010 {
5011         cancel_timer(&engine->execlists.timer);
5012         cancel_timer(&engine->execlists.preempt);
5013 }
5014
5015 void intel_execlists_set_default_submission(struct intel_engine_cs *engine)
5016 {
5017         engine->submit_request = execlists_submit_request;
5018         engine->schedule = i915_schedule;
5019         engine->execlists.tasklet.func = execlists_submission_tasklet;
5020
5021         engine->reset.prepare = execlists_reset_prepare;
5022         engine->reset.rewind = execlists_reset_rewind;
5023         engine->reset.cancel = execlists_reset_cancel;
5024         engine->reset.finish = execlists_reset_finish;
5025
5026         engine->park = execlists_park;
5027         engine->unpark = NULL;
5028
5029         engine->flags |= I915_ENGINE_SUPPORTS_STATS;
5030         if (!intel_vgpu_active(engine->i915)) {
5031                 engine->flags |= I915_ENGINE_HAS_SEMAPHORES;
5032                 if (HAS_LOGICAL_RING_PREEMPTION(engine->i915)) {
5033                         engine->flags |= I915_ENGINE_HAS_PREEMPTION;
5034                         if (IS_ACTIVE(CONFIG_DRM_I915_TIMESLICE_DURATION))
5035                                 engine->flags |= I915_ENGINE_HAS_TIMESLICES;
5036                 }
5037         }
5038
5039         if (INTEL_GEN(engine->i915) >= 12)
5040                 engine->flags |= I915_ENGINE_HAS_RELATIVE_MMIO;
5041
5042         if (intel_engine_has_preemption(engine))
5043                 engine->emit_bb_start = gen8_emit_bb_start;
5044         else
5045                 engine->emit_bb_start = gen8_emit_bb_start_noarb;
5046 }
5047
5048 static void execlists_shutdown(struct intel_engine_cs *engine)
5049 {
5050         /* Synchronise with residual timers and any softirq they raise */
5051         del_timer_sync(&engine->execlists.timer);
5052         del_timer_sync(&engine->execlists.preempt);
5053         tasklet_kill(&engine->execlists.tasklet);
5054 }
5055
5056 static void execlists_release(struct intel_engine_cs *engine)
5057 {
5058         engine->sanitize = NULL; /* no longer in control, nothing to sanitize */
5059
5060         execlists_shutdown(engine);
5061
5062         intel_engine_cleanup_common(engine);
5063         lrc_destroy_wa_ctx(engine);
5064 }
5065
5066 static void
5067 logical_ring_default_vfuncs(struct intel_engine_cs *engine)
5068 {
5069         /* Default vfuncs which can be overriden by each engine. */
5070
5071         engine->resume = execlists_resume;
5072
5073         engine->cops = &execlists_context_ops;
5074         engine->request_alloc = execlists_request_alloc;
5075
5076         engine->emit_flush = gen8_emit_flush;
5077         engine->emit_init_breadcrumb = gen8_emit_init_breadcrumb;
5078         engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb;
5079         if (INTEL_GEN(engine->i915) >= 12) {
5080                 engine->emit_fini_breadcrumb = gen12_emit_fini_breadcrumb;
5081                 engine->emit_flush = gen12_emit_flush;
5082         }
5083         engine->set_default_submission = intel_execlists_set_default_submission;
5084
5085         if (INTEL_GEN(engine->i915) < 11) {
5086                 engine->irq_enable = gen8_logical_ring_enable_irq;
5087                 engine->irq_disable = gen8_logical_ring_disable_irq;
5088         } else {
5089                 /*
5090                  * TODO: On Gen11 interrupt masks need to be clear
5091                  * to allow C6 entry. Keep interrupts enabled at
5092                  * and take the hit of generating extra interrupts
5093                  * until a more refined solution exists.
5094                  */
5095         }
5096 }
5097
5098 static inline void
5099 logical_ring_default_irqs(struct intel_engine_cs *engine)
5100 {
5101         unsigned int shift = 0;
5102
5103         if (INTEL_GEN(engine->i915) < 11) {
5104                 const u8 irq_shifts[] = {
5105                         [RCS0]  = GEN8_RCS_IRQ_SHIFT,
5106                         [BCS0]  = GEN8_BCS_IRQ_SHIFT,
5107                         [VCS0]  = GEN8_VCS0_IRQ_SHIFT,
5108                         [VCS1]  = GEN8_VCS1_IRQ_SHIFT,
5109                         [VECS0] = GEN8_VECS_IRQ_SHIFT,
5110                 };
5111
5112                 shift = irq_shifts[engine->id];
5113         }
5114
5115         engine->irq_enable_mask = GT_RENDER_USER_INTERRUPT << shift;
5116         engine->irq_keep_mask = GT_CONTEXT_SWITCH_INTERRUPT << shift;
5117         engine->irq_keep_mask |= GT_CS_MASTER_ERROR_INTERRUPT << shift;
5118         engine->irq_keep_mask |= GT_WAIT_SEMAPHORE_INTERRUPT << shift;
5119 }
5120
5121 static void rcs_submission_override(struct intel_engine_cs *engine)
5122 {
5123         switch (INTEL_GEN(engine->i915)) {
5124         case 12:
5125                 engine->emit_flush = gen12_emit_flush_render;
5126                 engine->emit_fini_breadcrumb = gen12_emit_fini_breadcrumb_rcs;
5127                 break;
5128         case 11:
5129                 engine->emit_flush = gen11_emit_flush_render;
5130                 engine->emit_fini_breadcrumb = gen11_emit_fini_breadcrumb_rcs;
5131                 break;
5132         default:
5133                 engine->emit_flush = gen8_emit_flush_render;
5134                 engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb_rcs;
5135                 break;
5136         }
5137 }
5138
5139 int intel_execlists_submission_setup(struct intel_engine_cs *engine)
5140 {
5141         struct intel_engine_execlists * const execlists = &engine->execlists;
5142         struct drm_i915_private *i915 = engine->i915;
5143         struct intel_uncore *uncore = engine->uncore;
5144         u32 base = engine->mmio_base;
5145
5146         tasklet_init(&engine->execlists.tasklet,
5147                      execlists_submission_tasklet, (unsigned long)engine);
5148         timer_setup(&engine->execlists.timer, execlists_timeslice, 0);
5149         timer_setup(&engine->execlists.preempt, execlists_preempt, 0);
5150
5151         logical_ring_default_vfuncs(engine);
5152         logical_ring_default_irqs(engine);
5153
5154         if (engine->class == RENDER_CLASS)
5155                 rcs_submission_override(engine);
5156
5157         if (intel_init_workaround_bb(engine))
5158                 /*
5159                  * We continue even if we fail to initialize WA batch
5160                  * because we only expect rare glitches but nothing
5161                  * critical to prevent us from using GPU
5162                  */
5163                 drm_err(&i915->drm, "WA batch buffer initialization failed\n");
5164
5165         if (HAS_LOGICAL_RING_ELSQ(i915)) {
5166                 execlists->submit_reg = uncore->regs +
5167                         i915_mmio_reg_offset(RING_EXECLIST_SQ_CONTENTS(base));
5168                 execlists->ctrl_reg = uncore->regs +
5169                         i915_mmio_reg_offset(RING_EXECLIST_CONTROL(base));
5170         } else {
5171                 execlists->submit_reg = uncore->regs +
5172                         i915_mmio_reg_offset(RING_ELSP(base));
5173         }
5174
5175         execlists->csb_status =
5176                 (u64 *)&engine->status_page.addr[I915_HWS_CSB_BUF0_INDEX];
5177
5178         execlists->csb_write =
5179                 &engine->status_page.addr[intel_hws_csb_write_index(i915)];
5180
5181         if (INTEL_GEN(i915) < 11)
5182                 execlists->csb_size = GEN8_CSB_ENTRIES;
5183         else
5184                 execlists->csb_size = GEN11_CSB_ENTRIES;
5185
5186         if (INTEL_GEN(engine->i915) >= 11) {
5187                 execlists->ccid |= engine->instance << (GEN11_ENGINE_INSTANCE_SHIFT - 32);
5188                 execlists->ccid |= engine->class << (GEN11_ENGINE_CLASS_SHIFT - 32);
5189         }
5190
5191         /* Finally, take ownership and responsibility for cleanup! */
5192         engine->sanitize = execlists_sanitize;
5193         engine->release = execlists_release;
5194
5195         return 0;
5196 }
5197
5198 static void init_common_reg_state(u32 * const regs,
5199                                   const struct intel_engine_cs *engine,
5200                                   const struct intel_ring *ring,
5201                                   bool inhibit)
5202 {
5203         u32 ctl;
5204
5205         ctl = _MASKED_BIT_ENABLE(CTX_CTRL_INHIBIT_SYN_CTX_SWITCH);
5206         ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT);
5207         if (inhibit)
5208                 ctl |= CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT;
5209         if (INTEL_GEN(engine->i915) < 11)
5210                 ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT |
5211                                            CTX_CTRL_RS_CTX_ENABLE);
5212         regs[CTX_CONTEXT_CONTROL] = ctl;
5213
5214         regs[CTX_RING_CTL] = RING_CTL_SIZE(ring->size) | RING_VALID;
5215         regs[CTX_TIMESTAMP] = 0;
5216 }
5217
5218 static void init_wa_bb_reg_state(u32 * const regs,
5219                                  const struct intel_engine_cs *engine)
5220 {
5221         const struct i915_ctx_workarounds * const wa_ctx = &engine->wa_ctx;
5222
5223         if (wa_ctx->per_ctx.size) {
5224                 const u32 ggtt_offset = i915_ggtt_offset(wa_ctx->vma);
5225
5226                 GEM_BUG_ON(lrc_ring_wa_bb_per_ctx(engine) == -1);
5227                 regs[lrc_ring_wa_bb_per_ctx(engine) + 1] =
5228                         (ggtt_offset + wa_ctx->per_ctx.offset) | 0x01;
5229         }
5230
5231         if (wa_ctx->indirect_ctx.size) {
5232                 lrc_ring_setup_indirect_ctx(regs, engine,
5233                                             i915_ggtt_offset(wa_ctx->vma) +
5234                                             wa_ctx->indirect_ctx.offset,
5235                                             wa_ctx->indirect_ctx.size);
5236         }
5237 }
5238
5239 static void init_ppgtt_reg_state(u32 *regs, const struct i915_ppgtt *ppgtt)
5240 {
5241         if (i915_vm_is_4lvl(&ppgtt->vm)) {
5242                 /* 64b PPGTT (48bit canonical)
5243                  * PDP0_DESCRIPTOR contains the base address to PML4 and
5244                  * other PDP Descriptors are ignored.
5245                  */
5246                 ASSIGN_CTX_PML4(ppgtt, regs);
5247         } else {
5248                 ASSIGN_CTX_PDP(ppgtt, regs, 3);
5249                 ASSIGN_CTX_PDP(ppgtt, regs, 2);
5250                 ASSIGN_CTX_PDP(ppgtt, regs, 1);
5251                 ASSIGN_CTX_PDP(ppgtt, regs, 0);
5252         }
5253 }
5254
5255 static struct i915_ppgtt *vm_alias(struct i915_address_space *vm)
5256 {
5257         if (i915_is_ggtt(vm))
5258                 return i915_vm_to_ggtt(vm)->alias;
5259         else
5260                 return i915_vm_to_ppgtt(vm);
5261 }
5262
5263 static void execlists_init_reg_state(u32 *regs,
5264                                      const struct intel_context *ce,
5265                                      const struct intel_engine_cs *engine,
5266                                      const struct intel_ring *ring,
5267                                      bool inhibit)
5268 {
5269         /*
5270          * A context is actually a big batch buffer with several
5271          * MI_LOAD_REGISTER_IMM commands followed by (reg, value) pairs. The
5272          * values we are setting here are only for the first context restore:
5273          * on a subsequent save, the GPU will recreate this batchbuffer with new
5274          * values (including all the missing MI_LOAD_REGISTER_IMM commands that
5275          * we are not initializing here).
5276          *
5277          * Must keep consistent with virtual_update_register_offsets().
5278          */
5279         set_offsets(regs, reg_offsets(engine), engine, inhibit);
5280
5281         init_common_reg_state(regs, engine, ring, inhibit);
5282         init_ppgtt_reg_state(regs, vm_alias(ce->vm));
5283
5284         init_wa_bb_reg_state(regs, engine);
5285
5286         __reset_stop_ring(regs, engine);
5287 }
5288
5289 static int
5290 populate_lr_context(struct intel_context *ce,
5291                     struct drm_i915_gem_object *ctx_obj,
5292                     struct intel_engine_cs *engine,
5293                     struct intel_ring *ring)
5294 {
5295         bool inhibit = true;
5296         void *vaddr;
5297
5298         vaddr = i915_gem_object_pin_map(ctx_obj, I915_MAP_WB);
5299         if (IS_ERR(vaddr)) {
5300                 drm_dbg(&engine->i915->drm, "Could not map object pages!\n");
5301                 return PTR_ERR(vaddr);
5302         }
5303
5304         set_redzone(vaddr, engine);
5305
5306         if (engine->default_state) {
5307                 shmem_read(engine->default_state, 0,
5308                            vaddr, engine->context_size);
5309                 __set_bit(CONTEXT_VALID_BIT, &ce->flags);
5310                 inhibit = false;
5311         }
5312
5313         /* Clear the ppHWSP (inc. per-context counters) */
5314         memset(vaddr, 0, PAGE_SIZE);
5315
5316         /*
5317          * The second page of the context object contains some registers which
5318          * must be set up prior to the first execution.
5319          */
5320         execlists_init_reg_state(vaddr + LRC_STATE_OFFSET,
5321                                  ce, engine, ring, inhibit);
5322
5323         __i915_gem_object_flush_map(ctx_obj, 0, engine->context_size);
5324         i915_gem_object_unpin_map(ctx_obj);
5325         return 0;
5326 }
5327
5328 static struct intel_timeline *pinned_timeline(struct intel_context *ce)
5329 {
5330         struct intel_timeline *tl = fetch_and_zero(&ce->timeline);
5331
5332         return intel_timeline_create_from_engine(ce->engine,
5333                                                  page_unmask_bits(tl));
5334 }
5335
5336 static int __execlists_context_alloc(struct intel_context *ce,
5337                                      struct intel_engine_cs *engine)
5338 {
5339         struct drm_i915_gem_object *ctx_obj;
5340         struct intel_ring *ring;
5341         struct i915_vma *vma;
5342         u32 context_size;
5343         int ret;
5344
5345         GEM_BUG_ON(ce->state);
5346         context_size = round_up(engine->context_size, I915_GTT_PAGE_SIZE);
5347
5348         if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
5349                 context_size += I915_GTT_PAGE_SIZE; /* for redzone */
5350
5351         if (INTEL_GEN(engine->i915) == 12) {
5352                 ce->wa_bb_page = context_size / PAGE_SIZE;
5353                 context_size += PAGE_SIZE;
5354         }
5355
5356         ctx_obj = i915_gem_object_create_shmem(engine->i915, context_size);
5357         if (IS_ERR(ctx_obj))
5358                 return PTR_ERR(ctx_obj);
5359
5360         vma = i915_vma_instance(ctx_obj, &engine->gt->ggtt->vm, NULL);
5361         if (IS_ERR(vma)) {
5362                 ret = PTR_ERR(vma);
5363                 goto error_deref_obj;
5364         }
5365
5366         if (!page_mask_bits(ce->timeline)) {
5367                 struct intel_timeline *tl;
5368
5369                 /*
5370                  * Use the static global HWSP for the kernel context, and
5371                  * a dynamically allocated cacheline for everyone else.
5372                  */
5373                 if (unlikely(ce->timeline))
5374                         tl = pinned_timeline(ce);
5375                 else
5376                         tl = intel_timeline_create(engine->gt);
5377                 if (IS_ERR(tl)) {
5378                         ret = PTR_ERR(tl);
5379                         goto error_deref_obj;
5380                 }
5381
5382                 ce->timeline = tl;
5383         }
5384
5385         ring = intel_engine_create_ring(engine, (unsigned long)ce->ring);
5386         if (IS_ERR(ring)) {
5387                 ret = PTR_ERR(ring);
5388                 goto error_deref_obj;
5389         }
5390
5391         ret = populate_lr_context(ce, ctx_obj, engine, ring);
5392         if (ret) {
5393                 drm_dbg(&engine->i915->drm,
5394                         "Failed to populate LRC: %d\n", ret);
5395                 goto error_ring_free;
5396         }
5397
5398         ce->ring = ring;
5399         ce->state = vma;
5400
5401         return 0;
5402
5403 error_ring_free:
5404         intel_ring_put(ring);
5405 error_deref_obj:
5406         i915_gem_object_put(ctx_obj);
5407         return ret;
5408 }
5409
5410 static struct list_head *virtual_queue(struct virtual_engine *ve)
5411 {
5412         return &ve->base.execlists.default_priolist.requests[0];
5413 }
5414
5415 static void virtual_context_destroy(struct kref *kref)
5416 {
5417         struct virtual_engine *ve =
5418                 container_of(kref, typeof(*ve), context.ref);
5419         unsigned int n;
5420
5421         GEM_BUG_ON(!list_empty(virtual_queue(ve)));
5422         GEM_BUG_ON(ve->request);
5423         GEM_BUG_ON(ve->context.inflight);
5424
5425         for (n = 0; n < ve->num_siblings; n++) {
5426                 struct intel_engine_cs *sibling = ve->siblings[n];
5427                 struct rb_node *node = &ve->nodes[sibling->id].rb;
5428                 unsigned long flags;
5429
5430                 if (RB_EMPTY_NODE(node))
5431                         continue;
5432
5433                 spin_lock_irqsave(&sibling->active.lock, flags);
5434
5435                 /* Detachment is lazily performed in the execlists tasklet */
5436                 if (!RB_EMPTY_NODE(node))
5437                         rb_erase_cached(node, &sibling->execlists.virtual);
5438
5439                 spin_unlock_irqrestore(&sibling->active.lock, flags);
5440         }
5441         GEM_BUG_ON(__tasklet_is_scheduled(&ve->base.execlists.tasklet));
5442
5443         if (ve->context.state)
5444                 __execlists_context_fini(&ve->context);
5445         intel_context_fini(&ve->context);
5446
5447         intel_engine_free_request_pool(&ve->base);
5448
5449         kfree(ve->bonds);
5450         kfree(ve);
5451 }
5452
5453 static void virtual_engine_initial_hint(struct virtual_engine *ve)
5454 {
5455         int swp;
5456
5457         /*
5458          * Pick a random sibling on starting to help spread the load around.
5459          *
5460          * New contexts are typically created with exactly the same order
5461          * of siblings, and often started in batches. Due to the way we iterate
5462          * the array of sibling when submitting requests, sibling[0] is
5463          * prioritised for dequeuing. If we make sure that sibling[0] is fairly
5464          * randomised across the system, we also help spread the load by the
5465          * first engine we inspect being different each time.
5466          *
5467          * NB This does not force us to execute on this engine, it will just
5468          * typically be the first we inspect for submission.
5469          */
5470         swp = prandom_u32_max(ve->num_siblings);
5471         if (swp)
5472                 swap(ve->siblings[swp], ve->siblings[0]);
5473 }
5474
5475 static int virtual_context_alloc(struct intel_context *ce)
5476 {
5477         struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
5478
5479         return __execlists_context_alloc(ce, ve->siblings[0]);
5480 }
5481
5482 static int virtual_context_pin(struct intel_context *ce, void *vaddr)
5483 {
5484         struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
5485
5486         /* Note: we must use a real engine class for setting up reg state */
5487         return __execlists_context_pin(ce, ve->siblings[0], vaddr);
5488 }
5489
5490 static void virtual_context_enter(struct intel_context *ce)
5491 {
5492         struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
5493         unsigned int n;
5494
5495         for (n = 0; n < ve->num_siblings; n++)
5496                 intel_engine_pm_get(ve->siblings[n]);
5497
5498         intel_timeline_enter(ce->timeline);
5499 }
5500
5501 static void virtual_context_exit(struct intel_context *ce)
5502 {
5503         struct virtual_engine *ve = container_of(ce, typeof(*ve), context);
5504         unsigned int n;
5505
5506         intel_timeline_exit(ce->timeline);
5507
5508         for (n = 0; n < ve->num_siblings; n++)
5509                 intel_engine_pm_put(ve->siblings[n]);
5510 }
5511
5512 static const struct intel_context_ops virtual_context_ops = {
5513         .alloc = virtual_context_alloc,
5514
5515         .pre_pin = execlists_context_pre_pin,
5516         .pin = virtual_context_pin,
5517         .unpin = execlists_context_unpin,
5518         .post_unpin = execlists_context_post_unpin,
5519
5520         .enter = virtual_context_enter,
5521         .exit = virtual_context_exit,
5522
5523         .destroy = virtual_context_destroy,
5524 };
5525
5526 static intel_engine_mask_t virtual_submission_mask(struct virtual_engine *ve)
5527 {
5528         struct i915_request *rq;
5529         intel_engine_mask_t mask;
5530
5531         rq = READ_ONCE(ve->request);
5532         if (!rq)
5533                 return 0;
5534
5535         /* The rq is ready for submission; rq->execution_mask is now stable. */
5536         mask = rq->execution_mask;
5537         if (unlikely(!mask)) {
5538                 /* Invalid selection, submit to a random engine in error */
5539                 i915_request_set_error_once(rq, -ENODEV);
5540                 mask = ve->siblings[0]->mask;
5541         }
5542
5543         ENGINE_TRACE(&ve->base, "rq=%llx:%lld, mask=%x, prio=%d\n",
5544                      rq->fence.context, rq->fence.seqno,
5545                      mask, ve->base.execlists.queue_priority_hint);
5546
5547         return mask;
5548 }
5549
5550 static void virtual_submission_tasklet(unsigned long data)
5551 {
5552         struct virtual_engine * const ve = (struct virtual_engine *)data;
5553         const int prio = READ_ONCE(ve->base.execlists.queue_priority_hint);
5554         intel_engine_mask_t mask;
5555         unsigned int n;
5556
5557         rcu_read_lock();
5558         mask = virtual_submission_mask(ve);
5559         rcu_read_unlock();
5560         if (unlikely(!mask))
5561                 return;
5562
5563         local_irq_disable();
5564         for (n = 0; n < ve->num_siblings; n++) {
5565                 struct intel_engine_cs *sibling = READ_ONCE(ve->siblings[n]);
5566                 struct ve_node * const node = &ve->nodes[sibling->id];
5567                 struct rb_node **parent, *rb;
5568                 bool first;
5569
5570                 if (!READ_ONCE(ve->request))
5571                         break; /* already handled by a sibling's tasklet */
5572
5573                 if (unlikely(!(mask & sibling->mask))) {
5574                         if (!RB_EMPTY_NODE(&node->rb)) {
5575                                 spin_lock(&sibling->active.lock);
5576                                 rb_erase_cached(&node->rb,
5577                                                 &sibling->execlists.virtual);
5578                                 RB_CLEAR_NODE(&node->rb);
5579                                 spin_unlock(&sibling->active.lock);
5580                         }
5581                         continue;
5582                 }
5583
5584                 spin_lock(&sibling->active.lock);
5585
5586                 if (!RB_EMPTY_NODE(&node->rb)) {
5587                         /*
5588                          * Cheat and avoid rebalancing the tree if we can
5589                          * reuse this node in situ.
5590                          */
5591                         first = rb_first_cached(&sibling->execlists.virtual) ==
5592                                 &node->rb;
5593                         if (prio == node->prio || (prio > node->prio && first))
5594                                 goto submit_engine;
5595
5596                         rb_erase_cached(&node->rb, &sibling->execlists.virtual);
5597                 }
5598
5599                 rb = NULL;
5600                 first = true;
5601                 parent = &sibling->execlists.virtual.rb_root.rb_node;
5602                 while (*parent) {
5603                         struct ve_node *other;
5604
5605                         rb = *parent;
5606                         other = rb_entry(rb, typeof(*other), rb);
5607                         if (prio > other->prio) {
5608                                 parent = &rb->rb_left;
5609                         } else {
5610                                 parent = &rb->rb_right;
5611                                 first = false;
5612                         }
5613                 }
5614
5615                 rb_link_node(&node->rb, rb, parent);
5616                 rb_insert_color_cached(&node->rb,
5617                                        &sibling->execlists.virtual,
5618                                        first);
5619
5620 submit_engine:
5621                 GEM_BUG_ON(RB_EMPTY_NODE(&node->rb));
5622                 node->prio = prio;
5623                 if (first && prio > sibling->execlists.queue_priority_hint)
5624                         tasklet_hi_schedule(&sibling->execlists.tasklet);
5625
5626                 spin_unlock(&sibling->active.lock);
5627         }
5628         local_irq_enable();
5629 }
5630
5631 static void virtual_submit_request(struct i915_request *rq)
5632 {
5633         struct virtual_engine *ve = to_virtual_engine(rq->engine);
5634         struct i915_request *old;
5635         unsigned long flags;
5636
5637         ENGINE_TRACE(&ve->base, "rq=%llx:%lld\n",
5638                      rq->fence.context,
5639                      rq->fence.seqno);
5640
5641         GEM_BUG_ON(ve->base.submit_request != virtual_submit_request);
5642
5643         spin_lock_irqsave(&ve->base.active.lock, flags);
5644
5645         old = ve->request;
5646         if (old) { /* background completion event from preempt-to-busy */
5647                 GEM_BUG_ON(!i915_request_completed(old));
5648                 __i915_request_submit(old);
5649                 i915_request_put(old);
5650         }
5651
5652         if (i915_request_completed(rq)) {
5653                 __i915_request_submit(rq);
5654
5655                 ve->base.execlists.queue_priority_hint = INT_MIN;
5656                 ve->request = NULL;
5657         } else {
5658                 ve->base.execlists.queue_priority_hint = rq_prio(rq);
5659                 ve->request = i915_request_get(rq);
5660
5661                 GEM_BUG_ON(!list_empty(virtual_queue(ve)));
5662                 list_move_tail(&rq->sched.link, virtual_queue(ve));
5663
5664                 tasklet_hi_schedule(&ve->base.execlists.tasklet);
5665         }
5666
5667         spin_unlock_irqrestore(&ve->base.active.lock, flags);
5668 }
5669
5670 static struct ve_bond *
5671 virtual_find_bond(struct virtual_engine *ve,
5672                   const struct intel_engine_cs *master)
5673 {
5674         int i;
5675
5676         for (i = 0; i < ve->num_bonds; i++) {
5677                 if (ve->bonds[i].master == master)
5678                         return &ve->bonds[i];
5679         }
5680
5681         return NULL;
5682 }
5683
5684 static void
5685 virtual_bond_execute(struct i915_request *rq, struct dma_fence *signal)
5686 {
5687         struct virtual_engine *ve = to_virtual_engine(rq->engine);
5688         intel_engine_mask_t allowed, exec;
5689         struct ve_bond *bond;
5690
5691         allowed = ~to_request(signal)->engine->mask;
5692
5693         bond = virtual_find_bond(ve, to_request(signal)->engine);
5694         if (bond)
5695                 allowed &= bond->sibling_mask;
5696
5697         /* Restrict the bonded request to run on only the available engines */
5698         exec = READ_ONCE(rq->execution_mask);
5699         while (!try_cmpxchg(&rq->execution_mask, &exec, exec & allowed))
5700                 ;
5701
5702         /* Prevent the master from being re-run on the bonded engines */
5703         to_request(signal)->execution_mask &= ~allowed;
5704 }
5705
5706 struct intel_context *
5707 intel_execlists_create_virtual(struct intel_engine_cs **siblings,
5708                                unsigned int count)
5709 {
5710         struct virtual_engine *ve;
5711         unsigned int n;
5712         int err;
5713
5714         if (count == 0)
5715                 return ERR_PTR(-EINVAL);
5716
5717         if (count == 1)
5718                 return intel_context_create(siblings[0]);
5719
5720         ve = kzalloc(struct_size(ve, siblings, count), GFP_KERNEL);
5721         if (!ve)
5722                 return ERR_PTR(-ENOMEM);
5723
5724         ve->base.i915 = siblings[0]->i915;
5725         ve->base.gt = siblings[0]->gt;
5726         ve->base.uncore = siblings[0]->uncore;
5727         ve->base.id = -1;
5728
5729         ve->base.class = OTHER_CLASS;
5730         ve->base.uabi_class = I915_ENGINE_CLASS_INVALID;
5731         ve->base.instance = I915_ENGINE_CLASS_INVALID_VIRTUAL;
5732         ve->base.uabi_instance = I915_ENGINE_CLASS_INVALID_VIRTUAL;
5733
5734         /*
5735          * The decision on whether to submit a request using semaphores
5736          * depends on the saturated state of the engine. We only compute
5737          * this during HW submission of the request, and we need for this
5738          * state to be globally applied to all requests being submitted
5739          * to this engine. Virtual engines encompass more than one physical
5740          * engine and so we cannot accurately tell in advance if one of those
5741          * engines is already saturated and so cannot afford to use a semaphore
5742          * and be pessimized in priority for doing so -- if we are the only
5743          * context using semaphores after all other clients have stopped, we
5744          * will be starved on the saturated system. Such a global switch for
5745          * semaphores is less than ideal, but alas is the current compromise.
5746          */
5747         ve->base.saturated = ALL_ENGINES;
5748
5749         snprintf(ve->base.name, sizeof(ve->base.name), "virtual");
5750
5751         intel_engine_init_active(&ve->base, ENGINE_VIRTUAL);
5752         intel_engine_init_execlists(&ve->base);
5753
5754         ve->base.cops = &virtual_context_ops;
5755         ve->base.request_alloc = execlists_request_alloc;
5756
5757         ve->base.schedule = i915_schedule;
5758         ve->base.submit_request = virtual_submit_request;
5759         ve->base.bond_execute = virtual_bond_execute;
5760
5761         INIT_LIST_HEAD(virtual_queue(ve));
5762         ve->base.execlists.queue_priority_hint = INT_MIN;
5763         tasklet_init(&ve->base.execlists.tasklet,
5764                      virtual_submission_tasklet,
5765                      (unsigned long)ve);
5766
5767         intel_context_init(&ve->context, &ve->base);
5768
5769         ve->base.breadcrumbs = intel_breadcrumbs_create(NULL);
5770         if (!ve->base.breadcrumbs) {
5771                 err = -ENOMEM;
5772                 goto err_put;
5773         }
5774
5775         for (n = 0; n < count; n++) {
5776                 struct intel_engine_cs *sibling = siblings[n];
5777
5778                 GEM_BUG_ON(!is_power_of_2(sibling->mask));
5779                 if (sibling->mask & ve->base.mask) {
5780                         DRM_DEBUG("duplicate %s entry in load balancer\n",
5781                                   sibling->name);
5782                         err = -EINVAL;
5783                         goto err_put;
5784                 }
5785
5786                 /*
5787                  * The virtual engine implementation is tightly coupled to
5788                  * the execlists backend -- we push out request directly
5789                  * into a tree inside each physical engine. We could support
5790                  * layering if we handle cloning of the requests and
5791                  * submitting a copy into each backend.
5792                  */
5793                 if (sibling->execlists.tasklet.func !=
5794                     execlists_submission_tasklet) {
5795                         err = -ENODEV;
5796                         goto err_put;
5797                 }
5798
5799                 GEM_BUG_ON(RB_EMPTY_NODE(&ve->nodes[sibling->id].rb));
5800                 RB_CLEAR_NODE(&ve->nodes[sibling->id].rb);
5801
5802                 ve->siblings[ve->num_siblings++] = sibling;
5803                 ve->base.mask |= sibling->mask;
5804
5805                 /*
5806                  * All physical engines must be compatible for their emission
5807                  * functions (as we build the instructions during request
5808                  * construction and do not alter them before submission
5809                  * on the physical engine). We use the engine class as a guide
5810                  * here, although that could be refined.
5811                  */
5812                 if (ve->base.class != OTHER_CLASS) {
5813                         if (ve->base.class != sibling->class) {
5814                                 DRM_DEBUG("invalid mixing of engine class, sibling %d, already %d\n",
5815                                           sibling->class, ve->base.class);
5816                                 err = -EINVAL;
5817                                 goto err_put;
5818                         }
5819                         continue;
5820                 }
5821
5822                 ve->base.class = sibling->class;
5823                 ve->base.uabi_class = sibling->uabi_class;
5824                 snprintf(ve->base.name, sizeof(ve->base.name),
5825                          "v%dx%d", ve->base.class, count);
5826                 ve->base.context_size = sibling->context_size;
5827
5828                 ve->base.emit_bb_start = sibling->emit_bb_start;
5829                 ve->base.emit_flush = sibling->emit_flush;
5830                 ve->base.emit_init_breadcrumb = sibling->emit_init_breadcrumb;
5831                 ve->base.emit_fini_breadcrumb = sibling->emit_fini_breadcrumb;
5832                 ve->base.emit_fini_breadcrumb_dw =
5833                         sibling->emit_fini_breadcrumb_dw;
5834
5835                 ve->base.flags = sibling->flags;
5836         }
5837
5838         ve->base.flags |= I915_ENGINE_IS_VIRTUAL;
5839
5840         virtual_engine_initial_hint(ve);
5841         return &ve->context;
5842
5843 err_put:
5844         intel_context_put(&ve->context);
5845         return ERR_PTR(err);
5846 }
5847
5848 struct intel_context *
5849 intel_execlists_clone_virtual(struct intel_engine_cs *src)
5850 {
5851         struct virtual_engine *se = to_virtual_engine(src);
5852         struct intel_context *dst;
5853
5854         dst = intel_execlists_create_virtual(se->siblings,
5855                                              se->num_siblings);
5856         if (IS_ERR(dst))
5857                 return dst;
5858
5859         if (se->num_bonds) {
5860                 struct virtual_engine *de = to_virtual_engine(dst->engine);
5861
5862                 de->bonds = kmemdup(se->bonds,
5863                                     sizeof(*se->bonds) * se->num_bonds,
5864                                     GFP_KERNEL);
5865                 if (!de->bonds) {
5866                         intel_context_put(dst);
5867                         return ERR_PTR(-ENOMEM);
5868                 }
5869
5870                 de->num_bonds = se->num_bonds;
5871         }
5872
5873         return dst;
5874 }
5875
5876 int intel_virtual_engine_attach_bond(struct intel_engine_cs *engine,
5877                                      const struct intel_engine_cs *master,
5878                                      const struct intel_engine_cs *sibling)
5879 {
5880         struct virtual_engine *ve = to_virtual_engine(engine);
5881         struct ve_bond *bond;
5882         int n;
5883
5884         /* Sanity check the sibling is part of the virtual engine */
5885         for (n = 0; n < ve->num_siblings; n++)
5886                 if (sibling == ve->siblings[n])
5887                         break;
5888         if (n == ve->num_siblings)
5889                 return -EINVAL;
5890
5891         bond = virtual_find_bond(ve, master);
5892         if (bond) {
5893                 bond->sibling_mask |= sibling->mask;
5894                 return 0;
5895         }
5896
5897         bond = krealloc(ve->bonds,
5898                         sizeof(*bond) * (ve->num_bonds + 1),
5899                         GFP_KERNEL);
5900         if (!bond)
5901                 return -ENOMEM;
5902
5903         bond[ve->num_bonds].master = master;
5904         bond[ve->num_bonds].sibling_mask = sibling->mask;
5905
5906         ve->bonds = bond;
5907         ve->num_bonds++;
5908
5909         return 0;
5910 }
5911
5912 struct intel_engine_cs *
5913 intel_virtual_engine_get_sibling(struct intel_engine_cs *engine,
5914                                  unsigned int sibling)
5915 {
5916         struct virtual_engine *ve = to_virtual_engine(engine);
5917
5918         if (sibling >= ve->num_siblings)
5919                 return NULL;
5920
5921         return ve->siblings[sibling];
5922 }
5923
5924 void intel_execlists_show_requests(struct intel_engine_cs *engine,
5925                                    struct drm_printer *m,
5926                                    void (*show_request)(struct drm_printer *m,
5927                                                         struct i915_request *rq,
5928                                                         const char *prefix),
5929                                    unsigned int max)
5930 {
5931         const struct intel_engine_execlists *execlists = &engine->execlists;
5932         struct i915_request *rq, *last;
5933         unsigned long flags;
5934         unsigned int count;
5935         struct rb_node *rb;
5936
5937         spin_lock_irqsave(&engine->active.lock, flags);
5938
5939         last = NULL;
5940         count = 0;
5941         list_for_each_entry(rq, &engine->active.requests, sched.link) {
5942                 if (count++ < max - 1)
5943                         show_request(m, rq, "\t\tE ");
5944                 else
5945                         last = rq;
5946         }
5947         if (last) {
5948                 if (count > max) {
5949                         drm_printf(m,
5950                                    "\t\t...skipping %d executing requests...\n",
5951                                    count - max);
5952                 }
5953                 show_request(m, last, "\t\tE ");
5954         }
5955
5956         if (execlists->switch_priority_hint != INT_MIN)
5957                 drm_printf(m, "\t\tSwitch priority hint: %d\n",
5958                            READ_ONCE(execlists->switch_priority_hint));
5959         if (execlists->queue_priority_hint != INT_MIN)
5960                 drm_printf(m, "\t\tQueue priority hint: %d\n",
5961                            READ_ONCE(execlists->queue_priority_hint));
5962
5963         last = NULL;
5964         count = 0;
5965         for (rb = rb_first_cached(&execlists->queue); rb; rb = rb_next(rb)) {
5966                 struct i915_priolist *p = rb_entry(rb, typeof(*p), node);
5967                 int i;
5968
5969                 priolist_for_each_request(rq, p, i) {
5970                         if (count++ < max - 1)
5971                                 show_request(m, rq, "\t\tQ ");
5972                         else
5973                                 last = rq;
5974                 }
5975         }
5976         if (last) {
5977                 if (count > max) {
5978                         drm_printf(m,
5979                                    "\t\t...skipping %d queued requests...\n",
5980                                    count - max);
5981                 }
5982                 show_request(m, last, "\t\tQ ");
5983         }
5984
5985         last = NULL;
5986         count = 0;
5987         for (rb = rb_first_cached(&execlists->virtual); rb; rb = rb_next(rb)) {
5988                 struct virtual_engine *ve =
5989                         rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
5990                 struct i915_request *rq = READ_ONCE(ve->request);
5991
5992                 if (rq) {
5993                         if (count++ < max - 1)
5994                                 show_request(m, rq, "\t\tV ");
5995                         else
5996                                 last = rq;
5997                 }
5998         }
5999         if (last) {
6000                 if (count > max) {
6001                         drm_printf(m,
6002                                    "\t\t...skipping %d virtual requests...\n",
6003                                    count - max);
6004                 }
6005                 show_request(m, last, "\t\tV ");
6006         }
6007
6008         spin_unlock_irqrestore(&engine->active.lock, flags);
6009 }
6010
6011 void intel_lr_context_reset(struct intel_engine_cs *engine,
6012                             struct intel_context *ce,
6013                             u32 head,
6014                             bool scrub)
6015 {
6016         GEM_BUG_ON(!intel_context_is_pinned(ce));
6017
6018         /*
6019          * We want a simple context + ring to execute the breadcrumb update.
6020          * We cannot rely on the context being intact across the GPU hang,
6021          * so clear it and rebuild just what we need for the breadcrumb.
6022          * All pending requests for this context will be zapped, and any
6023          * future request will be after userspace has had the opportunity
6024          * to recreate its own state.
6025          */
6026         if (scrub)
6027                 restore_default_state(ce, engine);
6028
6029         /* Rerun the request; its payload has been neutered (if guilty). */
6030         __execlists_update_reg_state(ce, engine, head);
6031 }
6032
6033 bool
6034 intel_engine_in_execlists_submission_mode(const struct intel_engine_cs *engine)
6035 {
6036         return engine->set_default_submission ==
6037                intel_execlists_set_default_submission;
6038 }
6039
6040 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
6041 #include "selftest_lrc.c"
6042 #endif