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