Lines Matching refs:engine

255 static void __sprint_engine_name(struct intel_engine_cs *engine)  in __sprint_engine_name()  argument
262 GEM_WARN_ON(snprintf(engine->name, sizeof(engine->name), "%s'%u", in __sprint_engine_name()
263 intel_engine_class_repr(engine->class), in __sprint_engine_name()
264 engine->instance) >= sizeof(engine->name)); in __sprint_engine_name()
267 void intel_engine_set_hwsp_writemask(struct intel_engine_cs *engine, u32 mask) in intel_engine_set_hwsp_writemask() argument
273 if (GRAPHICS_VER(engine->i915) < 6 && engine->class != RENDER_CLASS) in intel_engine_set_hwsp_writemask()
276 if (GRAPHICS_VER(engine->i915) >= 3) in intel_engine_set_hwsp_writemask()
277 ENGINE_WRITE(engine, RING_HWSTAM, mask); in intel_engine_set_hwsp_writemask()
279 ENGINE_WRITE16(engine, RING_HWSTAM, mask); in intel_engine_set_hwsp_writemask()
282 static void intel_engine_sanitize_mmio(struct intel_engine_cs *engine) in intel_engine_sanitize_mmio() argument
285 intel_engine_set_hwsp_writemask(engine, ~0u); in intel_engine_sanitize_mmio()
288 static void nop_irq_handler(struct intel_engine_cs *engine, u16 iir) in nop_irq_handler() argument
298 struct intel_engine_cs *engine; in intel_engine_setup() local
306 if (GEM_DEBUG_WARN_ON(id >= ARRAY_SIZE(gt->engine))) in intel_engine_setup()
318 engine = kzalloc(sizeof(*engine), GFP_KERNEL); in intel_engine_setup()
319 if (!engine) in intel_engine_setup()
322 BUILD_BUG_ON(BITS_PER_TYPE(engine->mask) < I915_NUM_ENGINES); in intel_engine_setup()
324 INIT_LIST_HEAD(&engine->pinned_contexts_list); in intel_engine_setup()
325 engine->id = id; in intel_engine_setup()
326 engine->legacy_idx = INVALID_ENGINE; in intel_engine_setup()
327 engine->mask = BIT(id); in intel_engine_setup()
328 engine->i915 = i915; in intel_engine_setup()
329 engine->gt = gt; in intel_engine_setup()
330 engine->uncore = gt->uncore; in intel_engine_setup()
332 engine->guc_id = MAKE_GUC_ID(guc_class, info->instance); in intel_engine_setup()
333 engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases); in intel_engine_setup()
335 engine->irq_handler = nop_irq_handler; in intel_engine_setup()
337 engine->class = info->class; in intel_engine_setup()
338 engine->instance = info->instance; in intel_engine_setup()
339 engine->logical_mask = BIT(logical_instance); in intel_engine_setup()
340 __sprint_engine_name(engine); in intel_engine_setup()
342 engine->props.heartbeat_interval_ms = in intel_engine_setup()
344 engine->props.max_busywait_duration_ns = in intel_engine_setup()
346 engine->props.preempt_timeout_ms = in intel_engine_setup()
348 engine->props.stop_timeout_ms = in intel_engine_setup()
350 engine->props.timeslice_duration_ms = in intel_engine_setup()
354 if (GRAPHICS_VER(i915) == 12 && engine->class == RENDER_CLASS) in intel_engine_setup()
355 engine->props.preempt_timeout_ms = 0; in intel_engine_setup()
357 engine->defaults = engine->props; /* never to change again */ in intel_engine_setup()
359 engine->context_size = intel_engine_context_size(gt, engine->class); in intel_engine_setup()
360 if (WARN_ON(engine->context_size > BIT(20))) in intel_engine_setup()
361 engine->context_size = 0; in intel_engine_setup()
362 if (engine->context_size) in intel_engine_setup()
365 ewma__engine_latency_init(&engine->latency); in intel_engine_setup()
366 seqcount_init(&engine->stats.lock); in intel_engine_setup()
368 ATOMIC_INIT_NOTIFIER_HEAD(&engine->context_status_notifier); in intel_engine_setup()
371 intel_engine_sanitize_mmio(engine); in intel_engine_setup()
373 gt->engine_class[info->class][info->instance] = engine; in intel_engine_setup()
374 gt->engine[id] = engine; in intel_engine_setup()
379 static void __setup_engine_capabilities(struct intel_engine_cs *engine) in __setup_engine_capabilities() argument
381 struct drm_i915_private *i915 = engine->i915; in __setup_engine_capabilities()
383 if (engine->class == VIDEO_DECODE_CLASS) { in __setup_engine_capabilities()
389 (GRAPHICS_VER(i915) >= 9 && engine->instance == 0)) in __setup_engine_capabilities()
390 engine->uabi_capabilities |= in __setup_engine_capabilities()
398 (engine->gt->info.vdbox_sfc_access & in __setup_engine_capabilities()
399 BIT(engine->instance))) || in __setup_engine_capabilities()
400 (GRAPHICS_VER(i915) >= 9 && engine->instance == 0)) in __setup_engine_capabilities()
401 engine->uabi_capabilities |= in __setup_engine_capabilities()
403 } else if (engine->class == VIDEO_ENHANCEMENT_CLASS) { in __setup_engine_capabilities()
405 engine->gt->info.sfc_mask & BIT(engine->instance)) in __setup_engine_capabilities()
406 engine->uabi_capabilities |= in __setup_engine_capabilities()
413 struct intel_engine_cs *engine; in intel_setup_engine_capabilities() local
416 for_each_engine(engine, gt, id) in intel_setup_engine_capabilities()
417 __setup_engine_capabilities(engine); in intel_setup_engine_capabilities()
426 struct intel_engine_cs *engine; in intel_engines_release() local
443 for_each_engine(engine, gt, id) { in intel_engines_release()
444 if (!engine->release) in intel_engines_release()
447 intel_wakeref_wait_for_idle(&engine->wakeref); in intel_engines_release()
448 GEM_BUG_ON(intel_engine_pm_is_awake(engine)); in intel_engines_release()
450 engine->release(engine); in intel_engines_release()
451 engine->release = NULL; in intel_engines_release()
453 memset(&engine->reset, 0, sizeof(engine->reset)); in intel_engines_release()
457 void intel_engine_free_request_pool(struct intel_engine_cs *engine) in intel_engine_free_request_pool() argument
459 if (!engine->request_pool) in intel_engine_free_request_pool()
462 kmem_cache_free(i915_request_slab_cache(), engine->request_pool); in intel_engine_free_request_pool()
467 struct intel_engine_cs *engine; in intel_engines_free() local
473 for_each_engine(engine, gt, id) { in intel_engines_free()
474 intel_engine_free_request_pool(engine); in intel_engines_free()
475 kfree(engine); in intel_engines_free()
476 gt->engine[id] = NULL; in intel_engines_free()
688 void intel_engine_init_execlists(struct intel_engine_cs *engine) in intel_engine_init_execlists() argument
690 struct intel_engine_execlists * const execlists = &engine->execlists; in intel_engine_init_execlists()
701 static void cleanup_status_page(struct intel_engine_cs *engine) in cleanup_status_page() argument
706 intel_engine_set_hwsp_writemask(engine, ~0u); in cleanup_status_page()
708 vma = fetch_and_zero(&engine->status_page.vma); in cleanup_status_page()
712 if (!HWS_NEEDS_PHYSICAL(engine->i915)) in cleanup_status_page()
719 static int pin_ggtt_status_page(struct intel_engine_cs *engine, in pin_ggtt_status_page() argument
725 if (!HAS_LLC(engine->i915) && i915_ggtt_has_aperture(engine->gt->ggtt)) in pin_ggtt_status_page()
744 static int init_status_page(struct intel_engine_cs *engine) in init_status_page() argument
752 INIT_LIST_HEAD(&engine->status_page.timelines); in init_status_page()
761 obj = i915_gem_object_create_internal(engine->i915, PAGE_SIZE); in init_status_page()
763 drm_err(&engine->i915->drm, in init_status_page()
770 vma = i915_vma_instance(obj, &engine->gt->ggtt->vm, NULL); in init_status_page()
779 if (!ret && !HWS_NEEDS_PHYSICAL(engine->i915)) in init_status_page()
780 ret = pin_ggtt_status_page(engine, &ww, vma); in init_status_page()
790 engine->status_page.addr = memset(vaddr, 0, PAGE_SIZE); in init_status_page()
791 engine->status_page.vma = vma; in init_status_page()
809 static int engine_setup_common(struct intel_engine_cs *engine) in engine_setup_common() argument
813 init_llist_head(&engine->barrier_tasks); in engine_setup_common()
815 err = init_status_page(engine); in engine_setup_common()
819 engine->breadcrumbs = intel_breadcrumbs_create(engine); in engine_setup_common()
820 if (!engine->breadcrumbs) { in engine_setup_common()
825 engine->sched_engine = i915_sched_engine_create(ENGINE_PHYSICAL); in engine_setup_common()
826 if (!engine->sched_engine) { in engine_setup_common()
830 engine->sched_engine->private_data = engine; in engine_setup_common()
832 err = intel_engine_init_cmd_parser(engine); in engine_setup_common()
836 intel_engine_init_execlists(engine); in engine_setup_common()
837 intel_engine_init__pm(engine); in engine_setup_common()
838 intel_engine_init_retire(engine); in engine_setup_common()
841 engine->sseu = in engine_setup_common()
842 intel_sseu_from_device_info(&engine->gt->info.sseu); in engine_setup_common()
844 intel_engine_init_workarounds(engine); in engine_setup_common()
845 intel_engine_init_whitelist(engine); in engine_setup_common()
846 intel_engine_init_ctx_wa(engine); in engine_setup_common()
848 if (GRAPHICS_VER(engine->i915) >= 12) in engine_setup_common()
849 engine->flags |= I915_ENGINE_HAS_RELATIVE_MMIO; in engine_setup_common()
854 i915_sched_engine_put(engine->sched_engine); in engine_setup_common()
856 intel_breadcrumbs_put(engine->breadcrumbs); in engine_setup_common()
858 cleanup_status_page(engine); in engine_setup_common()
870 struct intel_engine_cs *engine = ce->engine; in measure_breadcrumb_dw() local
874 GEM_BUG_ON(!engine->gt->scratch); in measure_breadcrumb_dw()
880 frame->rq.engine = engine; in measure_breadcrumb_dw()
894 spin_lock_irq(&engine->sched_engine->lock); in measure_breadcrumb_dw()
896 dw = engine->emit_fini_breadcrumb(&frame->rq, frame->cs) - frame->cs; in measure_breadcrumb_dw()
898 spin_unlock_irq(&engine->sched_engine->lock); in measure_breadcrumb_dw()
908 intel_engine_create_pinned_context(struct intel_engine_cs *engine, in intel_engine_create_pinned_context() argument
918 ce = intel_context_create(engine); in intel_engine_create_pinned_context()
936 list_add_tail(&ce->pinned_contexts_link, &engine->pinned_contexts_list); in intel_engine_create_pinned_context()
951 struct intel_engine_cs *engine = ce->engine; in intel_engine_destroy_pinned_context() local
952 struct i915_vma *hwsp = engine->status_page.vma; in intel_engine_destroy_pinned_context()
966 create_kernel_context(struct intel_engine_cs *engine) in create_kernel_context() argument
970 return intel_engine_create_pinned_context(engine, engine->gt->vm, SZ_4K, in create_kernel_context()
986 static int engine_init_common(struct intel_engine_cs *engine) in engine_init_common() argument
991 engine->set_default_submission(engine); in engine_init_common()
1001 ce = create_kernel_context(engine); in engine_init_common()
1009 engine->emit_fini_breadcrumb_dw = ret; in engine_init_common()
1010 engine->kernel_context = ce; in engine_init_common()
1021 int (*setup)(struct intel_engine_cs *engine); in intel_engines_init()
1022 struct intel_engine_cs *engine; in intel_engines_init() local
1037 for_each_engine(engine, gt, id) { in intel_engines_init()
1038 err = engine_setup_common(engine); in intel_engines_init()
1042 err = setup(engine); in intel_engines_init()
1046 err = engine_init_common(engine); in intel_engines_init()
1050 intel_engine_add_user(engine); in intel_engines_init()
1063 void intel_engine_cleanup_common(struct intel_engine_cs *engine) in intel_engine_cleanup_common() argument
1065 GEM_BUG_ON(!list_empty(&engine->sched_engine->requests)); in intel_engine_cleanup_common()
1067 i915_sched_engine_put(engine->sched_engine); in intel_engine_cleanup_common()
1068 intel_breadcrumbs_put(engine->breadcrumbs); in intel_engine_cleanup_common()
1070 intel_engine_fini_retire(engine); in intel_engine_cleanup_common()
1071 intel_engine_cleanup_cmd_parser(engine); in intel_engine_cleanup_common()
1073 if (engine->default_state) in intel_engine_cleanup_common()
1074 fput(engine->default_state); in intel_engine_cleanup_common()
1076 if (engine->kernel_context) in intel_engine_cleanup_common()
1077 intel_engine_destroy_pinned_context(engine->kernel_context); in intel_engine_cleanup_common()
1079 GEM_BUG_ON(!llist_empty(&engine->barrier_tasks)); in intel_engine_cleanup_common()
1080 cleanup_status_page(engine); in intel_engine_cleanup_common()
1082 intel_wa_list_free(&engine->ctx_wa_list); in intel_engine_cleanup_common()
1083 intel_wa_list_free(&engine->wa_list); in intel_engine_cleanup_common()
1084 intel_wa_list_free(&engine->whitelist); in intel_engine_cleanup_common()
1093 int intel_engine_resume(struct intel_engine_cs *engine) in intel_engine_resume() argument
1095 intel_engine_apply_workarounds(engine); in intel_engine_resume()
1096 intel_engine_apply_whitelist(engine); in intel_engine_resume()
1098 return engine->resume(engine); in intel_engine_resume()
1101 u64 intel_engine_get_active_head(const struct intel_engine_cs *engine) in intel_engine_get_active_head() argument
1103 struct drm_i915_private *i915 = engine->i915; in intel_engine_get_active_head()
1108 acthd = ENGINE_READ64(engine, RING_ACTHD, RING_ACTHD_UDW); in intel_engine_get_active_head()
1110 acthd = ENGINE_READ(engine, RING_ACTHD); in intel_engine_get_active_head()
1112 acthd = ENGINE_READ(engine, ACTHD); in intel_engine_get_active_head()
1117 u64 intel_engine_get_last_batch_head(const struct intel_engine_cs *engine) in intel_engine_get_last_batch_head() argument
1121 if (GRAPHICS_VER(engine->i915) >= 8) in intel_engine_get_last_batch_head()
1122 bbaddr = ENGINE_READ64(engine, RING_BBADDR, RING_BBADDR_UDW); in intel_engine_get_last_batch_head()
1124 bbaddr = ENGINE_READ(engine, RING_BBADDR); in intel_engine_get_last_batch_head()
1129 static unsigned long stop_timeout(const struct intel_engine_cs *engine) in stop_timeout() argument
1141 return READ_ONCE(engine->props.stop_timeout_ms); in stop_timeout()
1144 static int __intel_engine_stop_cs(struct intel_engine_cs *engine, in __intel_engine_stop_cs() argument
1148 struct intel_uncore *uncore = engine->uncore; in __intel_engine_stop_cs()
1149 const i915_reg_t mode = RING_MI_MODE(engine->mmio_base); in __intel_engine_stop_cs()
1153 err = __intel_wait_for_register_fw(engine->uncore, mode, in __intel_engine_stop_cs()
1164 int intel_engine_stop_cs(struct intel_engine_cs *engine) in intel_engine_stop_cs() argument
1168 if (GRAPHICS_VER(engine->i915) < 3) in intel_engine_stop_cs()
1171 ENGINE_TRACE(engine, "\n"); in intel_engine_stop_cs()
1172 if (__intel_engine_stop_cs(engine, 1000, stop_timeout(engine))) { in intel_engine_stop_cs()
1173 ENGINE_TRACE(engine, in intel_engine_stop_cs()
1175 ENGINE_READ_FW(engine, RING_HEAD) & HEAD_ADDR, in intel_engine_stop_cs()
1176 ENGINE_READ_FW(engine, RING_TAIL) & TAIL_ADDR); in intel_engine_stop_cs()
1183 if ((ENGINE_READ_FW(engine, RING_HEAD) & HEAD_ADDR) != in intel_engine_stop_cs()
1184 (ENGINE_READ_FW(engine, RING_TAIL) & TAIL_ADDR)) in intel_engine_stop_cs()
1191 void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine) in intel_engine_cancel_stop_cs() argument
1193 ENGINE_TRACE(engine, "\n"); in intel_engine_cancel_stop_cs()
1195 ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING)); in intel_engine_cancel_stop_cs()
1210 read_subslice_reg(const struct intel_engine_cs *engine, in read_subslice_reg() argument
1213 return intel_uncore_read_with_mcr_steering(engine->uncore, reg, in read_subslice_reg()
1218 void intel_engine_get_instdone(const struct intel_engine_cs *engine, in intel_engine_get_instdone() argument
1221 struct drm_i915_private *i915 = engine->i915; in intel_engine_get_instdone()
1222 const struct sseu_dev_info *sseu = &engine->gt->info.sseu; in intel_engine_get_instdone()
1223 struct intel_uncore *uncore = engine->uncore; in intel_engine_get_instdone()
1224 u32 mmio_base = engine->mmio_base; in intel_engine_get_instdone()
1235 if (engine->id != RCS0) in intel_engine_get_instdone()
1250 read_subslice_reg(engine, slice, subslice, in intel_engine_get_instdone()
1253 read_subslice_reg(engine, slice, subslice, in intel_engine_get_instdone()
1259 read_subslice_reg(engine, slice, subslice, in intel_engine_get_instdone()
1262 read_subslice_reg(engine, slice, subslice, in intel_engine_get_instdone()
1270 read_subslice_reg(engine, slice, subslice, in intel_engine_get_instdone()
1277 if (engine->id != RCS0) in intel_engine_get_instdone()
1289 if (engine->id == RCS0) in intel_engine_get_instdone()
1298 static bool ring_is_idle(struct intel_engine_cs *engine) in ring_is_idle() argument
1302 if (I915_SELFTEST_ONLY(!engine->mmio_base)) in ring_is_idle()
1305 if (!intel_engine_pm_get_if_awake(engine)) in ring_is_idle()
1309 if ((ENGINE_READ(engine, RING_HEAD) & HEAD_ADDR) != in ring_is_idle()
1310 (ENGINE_READ(engine, RING_TAIL) & TAIL_ADDR)) in ring_is_idle()
1314 if (GRAPHICS_VER(engine->i915) > 2 && in ring_is_idle()
1315 !(ENGINE_READ(engine, RING_MI_MODE) & MODE_IDLE)) in ring_is_idle()
1318 intel_engine_pm_put(engine); in ring_is_idle()
1323 void __intel_engine_flush_submission(struct intel_engine_cs *engine, bool sync) in __intel_engine_flush_submission() argument
1325 struct tasklet_struct *t = &engine->sched_engine->tasklet; in __intel_engine_flush_submission()
1351 bool intel_engine_is_idle(struct intel_engine_cs *engine) in intel_engine_is_idle() argument
1354 if (intel_gt_is_wedged(engine->gt)) in intel_engine_is_idle()
1357 if (!intel_engine_pm_is_awake(engine)) in intel_engine_is_idle()
1361 intel_synchronize_hardirq(engine->i915); in intel_engine_is_idle()
1362 intel_engine_flush_submission(engine); in intel_engine_is_idle()
1365 if (!i915_sched_engine_is_empty(engine->sched_engine)) in intel_engine_is_idle()
1369 return ring_is_idle(engine); in intel_engine_is_idle()
1374 struct intel_engine_cs *engine; in intel_engines_are_idle() local
1388 for_each_engine(engine, gt, id) { in intel_engines_are_idle()
1389 if (!intel_engine_is_idle(engine)) in intel_engines_are_idle()
1396 bool intel_engine_irq_enable(struct intel_engine_cs *engine) in intel_engine_irq_enable() argument
1398 if (!engine->irq_enable) in intel_engine_irq_enable()
1402 spin_lock(&engine->gt->irq_lock); in intel_engine_irq_enable()
1403 engine->irq_enable(engine); in intel_engine_irq_enable()
1404 spin_unlock(&engine->gt->irq_lock); in intel_engine_irq_enable()
1409 void intel_engine_irq_disable(struct intel_engine_cs *engine) in intel_engine_irq_disable() argument
1411 if (!engine->irq_disable) in intel_engine_irq_disable()
1415 spin_lock(&engine->gt->irq_lock); in intel_engine_irq_disable()
1416 engine->irq_disable(engine); in intel_engine_irq_disable()
1417 spin_unlock(&engine->gt->irq_lock); in intel_engine_irq_disable()
1422 struct intel_engine_cs *engine; in intel_engines_reset_default_submission() local
1425 for_each_engine(engine, gt, id) { in intel_engines_reset_default_submission()
1426 if (engine->sanitize) in intel_engines_reset_default_submission()
1427 engine->sanitize(engine); in intel_engines_reset_default_submission()
1429 engine->set_default_submission(engine); in intel_engines_reset_default_submission()
1433 bool intel_engine_can_store_dword(struct intel_engine_cs *engine) in intel_engine_can_store_dword() argument
1435 switch (GRAPHICS_VER(engine->i915)) { in intel_engine_can_store_dword()
1440 return !(IS_I915G(engine->i915) || IS_I915GM(engine->i915)); in intel_engine_can_store_dword()
1442 return !IS_I965G(engine->i915); /* who knows! */ in intel_engine_can_store_dword()
1444 return engine->class != VIDEO_DECODE_CLASS; /* b0rked */ in intel_engine_can_store_dword()
1533 static void intel_engine_print_registers(struct intel_engine_cs *engine, in intel_engine_print_registers() argument
1536 struct drm_i915_private *dev_priv = engine->i915; in intel_engine_print_registers()
1537 struct intel_engine_execlists * const execlists = &engine->execlists; in intel_engine_print_registers()
1540 if (engine->id == RENDER_CLASS && IS_GRAPHICS_VER(dev_priv, 4, 7)) in intel_engine_print_registers()
1541 drm_printf(m, "\tCCID: 0x%08x\n", ENGINE_READ(engine, CCID)); in intel_engine_print_registers()
1544 ENGINE_READ(engine, RING_EXECLIST_STATUS_HI)); in intel_engine_print_registers()
1546 ENGINE_READ(engine, RING_EXECLIST_STATUS_LO)); in intel_engine_print_registers()
1549 ENGINE_READ(engine, RING_START)); in intel_engine_print_registers()
1551 ENGINE_READ(engine, RING_HEAD) & HEAD_ADDR); in intel_engine_print_registers()
1553 ENGINE_READ(engine, RING_TAIL) & TAIL_ADDR); in intel_engine_print_registers()
1555 ENGINE_READ(engine, RING_CTL), in intel_engine_print_registers()
1556 ENGINE_READ(engine, RING_CTL) & (RING_WAIT | RING_WAIT_SEMAPHORE) ? " [waiting]" : ""); in intel_engine_print_registers()
1557 if (GRAPHICS_VER(engine->i915) > 2) { in intel_engine_print_registers()
1559 ENGINE_READ(engine, RING_MI_MODE), in intel_engine_print_registers()
1560 ENGINE_READ(engine, RING_MI_MODE) & (MODE_IDLE) ? " [idle]" : ""); in intel_engine_print_registers()
1565 ENGINE_READ(engine, RING_IMR)); in intel_engine_print_registers()
1567 ENGINE_READ(engine, RING_ESR)); in intel_engine_print_registers()
1569 ENGINE_READ(engine, RING_EMR)); in intel_engine_print_registers()
1571 ENGINE_READ(engine, RING_EIR)); in intel_engine_print_registers()
1574 addr = intel_engine_get_active_head(engine); in intel_engine_print_registers()
1577 addr = intel_engine_get_last_batch_head(engine); in intel_engine_print_registers()
1581 addr = ENGINE_READ64(engine, RING_DMA_FADD, RING_DMA_FADD_UDW); in intel_engine_print_registers()
1583 addr = ENGINE_READ(engine, RING_DMA_FADD); in intel_engine_print_registers()
1585 addr = ENGINE_READ(engine, DMA_FADD_I8XX); in intel_engine_print_registers()
1590 ENGINE_READ(engine, RING_IPEIR)); in intel_engine_print_registers()
1592 ENGINE_READ(engine, RING_IPEHR)); in intel_engine_print_registers()
1594 drm_printf(m, "\tIPEIR: 0x%08x\n", ENGINE_READ(engine, IPEIR)); in intel_engine_print_registers()
1595 drm_printf(m, "\tIPEHR: 0x%08x\n", ENGINE_READ(engine, IPEHR)); in intel_engine_print_registers()
1598 if (intel_engine_uses_guc(engine)) { in intel_engine_print_registers()
1603 &engine->status_page.addr[I915_HWS_CSB_BUF0_INDEX]; in intel_engine_print_registers()
1610 &engine->sched_engine->tasklet.state)), in intel_engine_print_registers()
1611 enableddisabled(!atomic_read(&engine->sched_engine->tasklet.count)), in intel_engine_print_registers()
1612 repr_timer(&engine->execlists.preempt), in intel_engine_print_registers()
1613 repr_timer(&engine->execlists.timer)); in intel_engine_print_registers()
1619 ENGINE_READ(engine, RING_EXECLIST_STATUS_LO), in intel_engine_print_registers()
1620 ENGINE_READ(engine, RING_EXECLIST_STATUS_HI), in intel_engine_print_registers()
1635 i915_sched_engine_active_lock_bh(engine->sched_engine); in intel_engine_print_registers()
1666 i915_sched_engine_active_unlock_bh(engine->sched_engine); in intel_engine_print_registers()
1669 ENGINE_READ(engine, RING_PP_DIR_BASE)); in intel_engine_print_registers()
1671 ENGINE_READ(engine, RING_PP_DIR_BASE_READ)); in intel_engine_print_registers()
1673 ENGINE_READ(engine, RING_PP_DIR_DCLV)); in intel_engine_print_registers()
1726 static void print_properties(struct intel_engine_cs *engine, in print_properties() argument
1734 .offset = offsetof(typeof(engine->props), x), \ in print_properties()
1752 read_ul(&engine->props, p->offset), in print_properties()
1753 read_ul(&engine->defaults, p->offset)); in print_properties()
1812 static void engine_dump_active_requests(struct intel_engine_cs *engine, struct drm_printer *m) in engine_dump_active_requests() argument
1825 lockdep_assert_held(&engine->sched_engine->lock); in engine_dump_active_requests()
1829 guc = intel_uc_uses_guc_submission(&engine->gt->uc); in engine_dump_active_requests()
1831 ce = intel_engine_get_hung_context(engine); in engine_dump_active_requests()
1835 hung_rq = intel_engine_execlist_find_hung_request(engine); in engine_dump_active_requests()
1842 intel_guc_dump_active_requests(engine, hung_rq, m); in engine_dump_active_requests()
1844 intel_engine_dump_active_requests(&engine->sched_engine->requests, in engine_dump_active_requests()
1848 void intel_engine_dump(struct intel_engine_cs *engine, in intel_engine_dump() argument
1852 struct i915_gpu_error * const error = &engine->i915->gpu_error; in intel_engine_dump()
1866 if (intel_gt_is_wedged(engine->gt)) in intel_engine_dump()
1869 drm_printf(m, "\tAwake? %d\n", atomic_read(&engine->wakeref.count)); in intel_engine_dump()
1871 yesno(!llist_empty(&engine->barrier_tasks))); in intel_engine_dump()
1873 ewma__engine_latency_read(&engine->latency)); in intel_engine_dump()
1874 if (intel_engine_supports_stats(engine)) in intel_engine_dump()
1876 ktime_to_ms(intel_engine_get_busy_time(engine, in intel_engine_dump()
1879 engine->fw_domain, READ_ONCE(engine->fw_active)); in intel_engine_dump()
1882 rq = READ_ONCE(engine->heartbeat.systole); in intel_engine_dump()
1888 i915_reset_engine_count(error, engine), in intel_engine_dump()
1890 print_properties(engine, m); in intel_engine_dump()
1892 spin_lock_irqsave(&engine->sched_engine->lock, flags); in intel_engine_dump()
1893 engine_dump_active_requests(engine, m); in intel_engine_dump()
1896 list_count(&engine->sched_engine->hold)); in intel_engine_dump()
1897 spin_unlock_irqrestore(&engine->sched_engine->lock, flags); in intel_engine_dump()
1899 drm_printf(m, "\tMMIO base: 0x%08x\n", engine->mmio_base); in intel_engine_dump()
1900 wakeref = intel_runtime_pm_get_if_in_use(engine->uncore->rpm); in intel_engine_dump()
1902 intel_engine_print_registers(engine, m); in intel_engine_dump()
1903 intel_runtime_pm_put(engine->uncore->rpm, wakeref); in intel_engine_dump()
1908 intel_execlists_show_requests(engine, m, i915_request_show, 8); in intel_engine_dump()
1911 hexdump(m, engine->status_page.addr, PAGE_SIZE); in intel_engine_dump()
1913 drm_printf(m, "Idle? %s\n", yesno(intel_engine_is_idle(engine))); in intel_engine_dump()
1915 intel_engine_print_breadcrumbs(engine, m); in intel_engine_dump()
1918 static ktime_t __intel_engine_get_busy_time(struct intel_engine_cs *engine, in __intel_engine_get_busy_time() argument
1921 ktime_t total = engine->stats.total; in __intel_engine_get_busy_time()
1928 if (READ_ONCE(engine->stats.active)) in __intel_engine_get_busy_time()
1929 total = ktime_add(total, ktime_sub(*now, engine->stats.start)); in __intel_engine_get_busy_time()
1941 ktime_t intel_engine_get_busy_time(struct intel_engine_cs *engine, ktime_t *now) in intel_engine_get_busy_time() argument
1947 seq = read_seqcount_begin(&engine->stats.lock); in intel_engine_get_busy_time()
1948 total = __intel_engine_get_busy_time(engine, now); in intel_engine_get_busy_time()
1949 } while (read_seqcount_retry(&engine->stats.lock, seq)); in intel_engine_get_busy_time()
1969 intel_engine_execlist_find_hung_request(struct intel_engine_cs *engine) in intel_engine_execlist_find_hung_request() argument
1978 GEM_BUG_ON(intel_uc_uses_guc_submission(&engine->gt->uc)); in intel_engine_execlist_find_hung_request()
1991 lockdep_assert_held(&engine->sched_engine->lock); in intel_engine_execlist_find_hung_request()
1994 request = execlists_active(&engine->execlists); in intel_engine_execlist_find_hung_request()
2009 list_for_each_entry(request, &engine->sched_engine->requests, in intel_engine_execlist_find_hung_request()