Lines Matching refs:ring
38 static const char *ring_str(int ring) in ring_str() argument
40 switch (ring) { in ring_str()
209 err_puts(m, err->ring != -1 ? " " : ""); in print_error_buffers()
210 err_puts(m, ring_str(err->ring)); in print_error_buffers()
248 struct drm_i915_error_ring *ring = &error->ring[ring_idx]; in i915_ring_error_state() local
250 if (!ring->valid) in i915_ring_error_state()
254 err_printf(m, " HEAD: 0x%08x\n", ring->head); in i915_ring_error_state()
255 err_printf(m, " TAIL: 0x%08x\n", ring->tail); in i915_ring_error_state()
256 err_printf(m, " CTL: 0x%08x\n", ring->ctl); in i915_ring_error_state()
257 err_printf(m, " HWS: 0x%08x\n", ring->hws); in i915_ring_error_state()
258 err_printf(m, " ACTHD: 0x%08x %08x\n", (u32)(ring->acthd>>32), (u32)ring->acthd); in i915_ring_error_state()
259 err_printf(m, " IPEIR: 0x%08x\n", ring->ipeir); in i915_ring_error_state()
260 err_printf(m, " IPEHR: 0x%08x\n", ring->ipehr); in i915_ring_error_state()
261 err_printf(m, " INSTDONE: 0x%08x\n", ring->instdone); in i915_ring_error_state()
263 err_printf(m, " BBADDR: 0x%08x %08x\n", (u32)(ring->bbaddr>>32), (u32)ring->bbaddr); in i915_ring_error_state()
264 err_printf(m, " BB_STATE: 0x%08x\n", ring->bbstate); in i915_ring_error_state()
265 err_printf(m, " INSTPS: 0x%08x\n", ring->instps); in i915_ring_error_state()
267 err_printf(m, " INSTPM: 0x%08x\n", ring->instpm); in i915_ring_error_state()
268 err_printf(m, " FADDR: 0x%08x %08x\n", upper_32_bits(ring->faddr), in i915_ring_error_state()
269 lower_32_bits(ring->faddr)); in i915_ring_error_state()
271 err_printf(m, " RC PSMI: 0x%08x\n", ring->rc_psmi); in i915_ring_error_state()
272 err_printf(m, " FAULT_REG: 0x%08x\n", ring->fault_reg); in i915_ring_error_state()
274 ring->semaphore_mboxes[0], in i915_ring_error_state()
275 ring->semaphore_seqno[0]); in i915_ring_error_state()
277 ring->semaphore_mboxes[1], in i915_ring_error_state()
278 ring->semaphore_seqno[1]); in i915_ring_error_state()
281 ring->semaphore_mboxes[2], in i915_ring_error_state()
282 ring->semaphore_seqno[2]); in i915_ring_error_state()
286 err_printf(m, " GFX_MODE: 0x%08x\n", ring->vm_info.gfx_mode); in i915_ring_error_state()
292 i, ring->vm_info.pdp[i]); in i915_ring_error_state()
295 ring->vm_info.pp_dir_base); in i915_ring_error_state()
298 err_printf(m, " seqno: 0x%08x\n", ring->seqno); in i915_ring_error_state()
299 err_printf(m, " waiting: %s\n", yesno(ring->waiting)); in i915_ring_error_state()
300 err_printf(m, " ring->head: 0x%08x\n", ring->cpu_ring_head); in i915_ring_error_state()
301 err_printf(m, " ring->tail: 0x%08x\n", ring->cpu_ring_tail); in i915_ring_error_state()
303 hangcheck_action_to_str(ring->hangcheck_action), in i915_ring_error_state()
304 ring->hangcheck_score); in i915_ring_error_state()
350 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
351 if (error->ring[i].hangcheck_score > max_hangcheck_score) in i915_error_state_to_str()
352 max_hangcheck_score = error->ring[i].hangcheck_score; in i915_error_state_to_str()
354 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
355 if (error->ring[i].hangcheck_score == max_hangcheck_score && in i915_error_state_to_str()
356 error->ring[i].pid != -1) { in i915_error_state_to_str()
359 error->ring[i].comm, in i915_error_state_to_str()
360 error->ring[i].pid); in i915_error_state_to_str()
400 for (i = 0; i < ARRAY_SIZE(error->ring); i++) in i915_error_state_to_str()
415 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
416 obj = error->ring[i].batchbuffer; in i915_error_state_to_str()
418 err_puts(m, dev_priv->ring[i].name); in i915_error_state_to_str()
419 if (error->ring[i].pid != -1) in i915_error_state_to_str()
421 error->ring[i].comm, in i915_error_state_to_str()
422 error->ring[i].pid); in i915_error_state_to_str()
428 obj = error->ring[i].wa_batchbuffer; in i915_error_state_to_str()
431 dev_priv->ring[i].name, obj->gtt_offset); in i915_error_state_to_str()
435 if (error->ring[i].num_requests) { in i915_error_state_to_str()
437 dev_priv->ring[i].name, in i915_error_state_to_str()
438 error->ring[i].num_requests); in i915_error_state_to_str()
439 for (j = 0; j < error->ring[i].num_requests; j++) { in i915_error_state_to_str()
441 error->ring[i].requests[j].seqno, in i915_error_state_to_str()
442 error->ring[i].requests[j].jiffies, in i915_error_state_to_str()
443 error->ring[i].requests[j].tail); in i915_error_state_to_str()
447 if ((obj = error->ring[i].ringbuffer)) { in i915_error_state_to_str()
449 dev_priv->ring[i].name, in i915_error_state_to_str()
454 if ((obj = error->ring[i].hws_page)) { in i915_error_state_to_str()
456 dev_priv->ring[i].name, in i915_error_state_to_str()
470 if ((obj = error->ring[i].ctx)) { in i915_error_state_to_str()
472 dev_priv->ring[i].name, in i915_error_state_to_str()
554 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_free()
555 i915_error_object_free(error->ring[i].batchbuffer); in i915_error_state_free()
556 i915_error_object_free(error->ring[i].ringbuffer); in i915_error_state_free()
557 i915_error_object_free(error->ring[i].hws_page); in i915_error_state_free()
558 i915_error_object_free(error->ring[i].ctx); in i915_error_state_free()
559 kfree(error->ring[i].requests); in i915_error_state_free()
698 err->ring = obj->last_read_req ? in capture_bo()
762 if (error->ring[i].hangcheck_action == HANGCHECK_HUNG) { in i915_error_generate_code()
766 return error->ring[i].ipehr ^ error->ring[i].instdone; in i915_error_generate_code()
799 struct intel_engine_cs *ring, in gen8_record_semaphore_state() argument
818 if (ring == to) in gen8_record_semaphore_state()
821 signal_offset = (GEN8_SIGNAL_OFFSET(ring, i) & (PAGE_SIZE - 1)) in gen8_record_semaphore_state()
824 idx = intel_ring_sync_index(ring, to); in gen8_record_semaphore_state()
827 ering->semaphore_seqno[idx] = ring->semaphore.sync_seqno[idx]; in gen8_record_semaphore_state()
832 struct intel_engine_cs *ring, in gen6_record_semaphore_state() argument
835 ering->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(ring->mmio_base)); in gen6_record_semaphore_state()
836 ering->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(ring->mmio_base)); in gen6_record_semaphore_state()
837 ering->semaphore_seqno[0] = ring->semaphore.sync_seqno[0]; in gen6_record_semaphore_state()
838 ering->semaphore_seqno[1] = ring->semaphore.sync_seqno[1]; in gen6_record_semaphore_state()
842 I915_READ(RING_SYNC_2(ring->mmio_base)); in gen6_record_semaphore_state()
843 ering->semaphore_seqno[2] = ring->semaphore.sync_seqno[2]; in gen6_record_semaphore_state()
849 struct intel_engine_cs *ring, in i915_record_ring_state() argument
855 ering->rc_psmi = I915_READ(ring->mmio_base + 0x50); in i915_record_ring_state()
856 ering->fault_reg = I915_READ(RING_FAULT_REG(ring)); in i915_record_ring_state()
858 gen8_record_semaphore_state(dev_priv, error, ring, ering); in i915_record_ring_state()
860 gen6_record_semaphore_state(dev_priv, ring, ering); in i915_record_ring_state()
864 ering->faddr = I915_READ(RING_DMA_FADD(ring->mmio_base)); in i915_record_ring_state()
865 ering->ipeir = I915_READ(RING_IPEIR(ring->mmio_base)); in i915_record_ring_state()
866 ering->ipehr = I915_READ(RING_IPEHR(ring->mmio_base)); in i915_record_ring_state()
867 ering->instdone = I915_READ(RING_INSTDONE(ring->mmio_base)); in i915_record_ring_state()
868 ering->instps = I915_READ(RING_INSTPS(ring->mmio_base)); in i915_record_ring_state()
869 ering->bbaddr = I915_READ(RING_BBADDR(ring->mmio_base)); in i915_record_ring_state()
871 ering->faddr |= (u64) I915_READ(RING_DMA_FADD_UDW(ring->mmio_base)) << 32; in i915_record_ring_state()
872 ering->bbaddr |= (u64) I915_READ(RING_BBADDR_UDW(ring->mmio_base)) << 32; in i915_record_ring_state()
874 ering->bbstate = I915_READ(RING_BBSTATE(ring->mmio_base)); in i915_record_ring_state()
882 ering->waiting = waitqueue_active(&ring->irq_queue); in i915_record_ring_state()
883 ering->instpm = I915_READ(RING_INSTPM(ring->mmio_base)); in i915_record_ring_state()
884 ering->seqno = ring->get_seqno(ring, false); in i915_record_ring_state()
885 ering->acthd = intel_ring_get_active_head(ring); in i915_record_ring_state()
886 ering->head = I915_READ_HEAD(ring); in i915_record_ring_state()
887 ering->tail = I915_READ_TAIL(ring); in i915_record_ring_state()
888 ering->ctl = I915_READ_CTL(ring); in i915_record_ring_state()
894 switch (ring->id) { in i915_record_ring_state()
909 } else if (IS_GEN6(ring->dev)) { in i915_record_ring_state()
910 mmio = RING_HWS_PGA_GEN6(ring->mmio_base); in i915_record_ring_state()
913 mmio = RING_HWS_PGA(ring->mmio_base); in i915_record_ring_state()
919 ering->hangcheck_score = ring->hangcheck.score; in i915_record_ring_state()
920 ering->hangcheck_action = ring->hangcheck.action; in i915_record_ring_state()
925 ering->vm_info.gfx_mode = I915_READ(RING_MODE_GEN7(ring)); in i915_record_ring_state()
929 I915_READ(RING_PP_DIR_BASE_READ(ring)); in i915_record_ring_state()
932 I915_READ(RING_PP_DIR_BASE(ring)); in i915_record_ring_state()
936 I915_READ(GEN8_RING_PDP_UDW(ring, i)); in i915_record_ring_state()
939 I915_READ(GEN8_RING_PDP_LDW(ring, i)); in i915_record_ring_state()
945 static void i915_gem_record_active_context(struct intel_engine_cs *ring, in i915_gem_record_active_context() argument
949 struct drm_i915_private *dev_priv = ring->dev->dev_private; in i915_gem_record_active_context()
953 if (ring->id != RCS || !error->ccid) in i915_gem_record_active_context()
975 struct intel_engine_cs *ring = &dev_priv->ring[i]; in i915_gem_record_rings() local
978 error->ring[i].pid = -1; in i915_gem_record_rings()
980 if (ring->dev == NULL) in i915_gem_record_rings()
983 error->ring[i].valid = true; in i915_gem_record_rings()
985 i915_record_ring_state(dev, error, ring, &error->ring[i]); in i915_gem_record_rings()
987 request = i915_gem_find_active_request(ring); in i915_gem_record_rings()
999 error->ring[i].batchbuffer = in i915_gem_record_rings()
1005 error->ring[i].wa_batchbuffer = in i915_gem_record_rings()
1007 ring->scratch.obj); in i915_gem_record_rings()
1015 strcpy(error->ring[i].comm, task->comm); in i915_gem_record_rings()
1016 error->ring[i].pid = task->pid; in i915_gem_record_rings()
1029 rbuf = request->ctx->engine[ring->id].ringbuf; in i915_gem_record_rings()
1031 rbuf = ring->default_context->engine[ring->id].ringbuf; in i915_gem_record_rings()
1033 rbuf = ring->buffer; in i915_gem_record_rings()
1035 error->ring[i].cpu_ring_head = rbuf->head; in i915_gem_record_rings()
1036 error->ring[i].cpu_ring_tail = rbuf->tail; in i915_gem_record_rings()
1038 error->ring[i].ringbuffer = in i915_gem_record_rings()
1041 error->ring[i].hws_page = in i915_gem_record_rings()
1042 i915_error_ggtt_object_create(dev_priv, ring->status_page.obj); in i915_gem_record_rings()
1044 i915_gem_record_active_context(ring, error, &error->ring[i]); in i915_gem_record_rings()
1047 list_for_each_entry(request, &ring->request_list, list) in i915_gem_record_rings()
1050 error->ring[i].num_requests = count; in i915_gem_record_rings()
1051 error->ring[i].requests = in i915_gem_record_rings()
1052 kcalloc(count, sizeof(*error->ring[i].requests), in i915_gem_record_rings()
1054 if (error->ring[i].requests == NULL) { in i915_gem_record_rings()
1055 error->ring[i].num_requests = 0; in i915_gem_record_rings()
1060 list_for_each_entry(request, &ring->request_list, list) { in i915_gem_record_rings()
1063 erq = &error->ring[i].requests[count++]; in i915_gem_record_rings()
1243 if (ring_id != -1 && error->ring[ring_id].pid != -1) in i915_error_capture_msg()
1247 error->ring[ring_id].comm, in i915_error_capture_msg()
1248 error->ring[ring_id].pid); in i915_error_capture_msg()