Lines Matching refs:ring
33 static const char *ring_str(int ring) in ring_str() argument
35 switch (ring) { in ring_str()
210 err_puts(m, err->ring != -1 ? " " : ""); in print_error_buffers()
211 err_puts(m, ring_str(err->ring)); in print_error_buffers()
249 struct drm_i915_error_ring *ring = &error->ring[ring_idx]; in i915_ring_error_state() local
251 if (!ring->valid) in i915_ring_error_state()
255 err_printf(m, " START: 0x%08x\n", ring->start); in i915_ring_error_state()
256 err_printf(m, " HEAD: 0x%08x\n", ring->head); in i915_ring_error_state()
257 err_printf(m, " TAIL: 0x%08x\n", ring->tail); in i915_ring_error_state()
258 err_printf(m, " CTL: 0x%08x\n", ring->ctl); in i915_ring_error_state()
259 err_printf(m, " HWS: 0x%08x\n", ring->hws); in i915_ring_error_state()
260 err_printf(m, " ACTHD: 0x%08x %08x\n", (u32)(ring->acthd>>32), (u32)ring->acthd); in i915_ring_error_state()
261 err_printf(m, " IPEIR: 0x%08x\n", ring->ipeir); in i915_ring_error_state()
262 err_printf(m, " IPEHR: 0x%08x\n", ring->ipehr); in i915_ring_error_state()
263 err_printf(m, " INSTDONE: 0x%08x\n", ring->instdone); in i915_ring_error_state()
265 err_printf(m, " BBADDR: 0x%08x %08x\n", (u32)(ring->bbaddr>>32), (u32)ring->bbaddr); in i915_ring_error_state()
266 err_printf(m, " BB_STATE: 0x%08x\n", ring->bbstate); in i915_ring_error_state()
267 err_printf(m, " INSTPS: 0x%08x\n", ring->instps); in i915_ring_error_state()
269 err_printf(m, " INSTPM: 0x%08x\n", ring->instpm); in i915_ring_error_state()
270 err_printf(m, " FADDR: 0x%08x %08x\n", upper_32_bits(ring->faddr), in i915_ring_error_state()
271 lower_32_bits(ring->faddr)); in i915_ring_error_state()
273 err_printf(m, " RC PSMI: 0x%08x\n", ring->rc_psmi); in i915_ring_error_state()
274 err_printf(m, " FAULT_REG: 0x%08x\n", ring->fault_reg); in i915_ring_error_state()
276 ring->semaphore_mboxes[0], in i915_ring_error_state()
277 ring->semaphore_seqno[0]); in i915_ring_error_state()
279 ring->semaphore_mboxes[1], in i915_ring_error_state()
280 ring->semaphore_seqno[1]); in i915_ring_error_state()
283 ring->semaphore_mboxes[2], in i915_ring_error_state()
284 ring->semaphore_seqno[2]); in i915_ring_error_state()
288 err_printf(m, " GFX_MODE: 0x%08x\n", ring->vm_info.gfx_mode); in i915_ring_error_state()
294 i, ring->vm_info.pdp[i]); in i915_ring_error_state()
297 ring->vm_info.pp_dir_base); in i915_ring_error_state()
300 err_printf(m, " seqno: 0x%08x\n", ring->seqno); in i915_ring_error_state()
301 err_printf(m, " waiting: %s\n", yesno(ring->waiting)); in i915_ring_error_state()
302 err_printf(m, " ring->head: 0x%08x\n", ring->cpu_ring_head); in i915_ring_error_state()
303 err_printf(m, " ring->tail: 0x%08x\n", ring->cpu_ring_tail); in i915_ring_error_state()
305 hangcheck_action_to_str(ring->hangcheck_action), in i915_ring_error_state()
306 ring->hangcheck_score); in i915_ring_error_state()
352 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
353 if (error->ring[i].hangcheck_score > max_hangcheck_score) in i915_error_state_to_str()
354 max_hangcheck_score = error->ring[i].hangcheck_score; in i915_error_state_to_str()
356 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
357 if (error->ring[i].hangcheck_score == max_hangcheck_score && in i915_error_state_to_str()
358 error->ring[i].pid != -1) { in i915_error_state_to_str()
361 error->ring[i].comm, in i915_error_state_to_str()
362 error->ring[i].pid); in i915_error_state_to_str()
403 for (i = 0; i < ARRAY_SIZE(error->ring); i++) in i915_error_state_to_str()
418 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
419 obj = error->ring[i].batchbuffer; in i915_error_state_to_str()
421 err_puts(m, dev_priv->ring[i].name); in i915_error_state_to_str()
422 if (error->ring[i].pid != -1) in i915_error_state_to_str()
424 error->ring[i].comm, in i915_error_state_to_str()
425 error->ring[i].pid); in i915_error_state_to_str()
432 obj = error->ring[i].wa_batchbuffer; in i915_error_state_to_str()
435 dev_priv->ring[i].name, in i915_error_state_to_str()
440 if (error->ring[i].num_requests) { in i915_error_state_to_str()
442 dev_priv->ring[i].name, in i915_error_state_to_str()
443 error->ring[i].num_requests); in i915_error_state_to_str()
444 for (j = 0; j < error->ring[i].num_requests; j++) { in i915_error_state_to_str()
446 error->ring[i].requests[j].seqno, in i915_error_state_to_str()
447 error->ring[i].requests[j].jiffies, in i915_error_state_to_str()
448 error->ring[i].requests[j].tail); in i915_error_state_to_str()
452 if ((obj = error->ring[i].ringbuffer)) { in i915_error_state_to_str()
454 dev_priv->ring[i].name, in i915_error_state_to_str()
459 if ((obj = error->ring[i].hws_page)) { in i915_error_state_to_str()
468 dev_priv->ring[i].name, hws_offset); in i915_error_state_to_str()
481 if ((obj = error->ring[i].ctx)) { in i915_error_state_to_str()
483 dev_priv->ring[i].name, in i915_error_state_to_str()
566 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_free()
567 i915_error_object_free(error->ring[i].batchbuffer); in i915_error_state_free()
568 i915_error_object_free(error->ring[i].wa_batchbuffer); in i915_error_state_free()
569 i915_error_object_free(error->ring[i].ringbuffer); in i915_error_state_free()
570 i915_error_object_free(error->ring[i].hws_page); in i915_error_state_free()
571 i915_error_object_free(error->ring[i].ctx); in i915_error_state_free()
572 kfree(error->ring[i].requests); in i915_error_state_free()
713 err->ring = obj->last_write_req ? in capture_bo()
777 if (error->ring[i].hangcheck_action == HANGCHECK_HUNG) { in i915_error_generate_code()
781 return error->ring[i].ipehr ^ error->ring[i].instdone; in i915_error_generate_code()
809 struct intel_engine_cs *ring, in gen8_record_semaphore_state() argument
828 if (ring == to) in gen8_record_semaphore_state()
831 signal_offset = (GEN8_SIGNAL_OFFSET(ring, i) & (PAGE_SIZE - 1)) in gen8_record_semaphore_state()
834 idx = intel_ring_sync_index(ring, to); in gen8_record_semaphore_state()
837 ering->semaphore_seqno[idx] = ring->semaphore.sync_seqno[idx]; in gen8_record_semaphore_state()
842 struct intel_engine_cs *ring, in gen6_record_semaphore_state() argument
845 ering->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(ring->mmio_base)); in gen6_record_semaphore_state()
846 ering->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(ring->mmio_base)); in gen6_record_semaphore_state()
847 ering->semaphore_seqno[0] = ring->semaphore.sync_seqno[0]; in gen6_record_semaphore_state()
848 ering->semaphore_seqno[1] = ring->semaphore.sync_seqno[1]; in gen6_record_semaphore_state()
852 I915_READ(RING_SYNC_2(ring->mmio_base)); in gen6_record_semaphore_state()
853 ering->semaphore_seqno[2] = ring->semaphore.sync_seqno[2]; in gen6_record_semaphore_state()
859 struct intel_engine_cs *ring, in i915_record_ring_state() argument
865 ering->rc_psmi = I915_READ(ring->mmio_base + 0x50); in i915_record_ring_state()
866 ering->fault_reg = I915_READ(RING_FAULT_REG(ring)); in i915_record_ring_state()
868 gen8_record_semaphore_state(dev_priv, error, ring, ering); in i915_record_ring_state()
870 gen6_record_semaphore_state(dev_priv, ring, ering); in i915_record_ring_state()
874 ering->faddr = I915_READ(RING_DMA_FADD(ring->mmio_base)); in i915_record_ring_state()
875 ering->ipeir = I915_READ(RING_IPEIR(ring->mmio_base)); in i915_record_ring_state()
876 ering->ipehr = I915_READ(RING_IPEHR(ring->mmio_base)); in i915_record_ring_state()
877 ering->instdone = I915_READ(RING_INSTDONE(ring->mmio_base)); in i915_record_ring_state()
878 ering->instps = I915_READ(RING_INSTPS(ring->mmio_base)); in i915_record_ring_state()
879 ering->bbaddr = I915_READ(RING_BBADDR(ring->mmio_base)); in i915_record_ring_state()
881 ering->faddr |= (u64) I915_READ(RING_DMA_FADD_UDW(ring->mmio_base)) << 32; in i915_record_ring_state()
882 ering->bbaddr |= (u64) I915_READ(RING_BBADDR_UDW(ring->mmio_base)) << 32; in i915_record_ring_state()
884 ering->bbstate = I915_READ(RING_BBSTATE(ring->mmio_base)); in i915_record_ring_state()
892 ering->waiting = waitqueue_active(&ring->irq_queue); in i915_record_ring_state()
893 ering->instpm = I915_READ(RING_INSTPM(ring->mmio_base)); in i915_record_ring_state()
894 ering->seqno = ring->get_seqno(ring, false); in i915_record_ring_state()
895 ering->acthd = intel_ring_get_active_head(ring); in i915_record_ring_state()
896 ering->start = I915_READ_START(ring); in i915_record_ring_state()
897 ering->head = I915_READ_HEAD(ring); in i915_record_ring_state()
898 ering->tail = I915_READ_TAIL(ring); in i915_record_ring_state()
899 ering->ctl = I915_READ_CTL(ring); in i915_record_ring_state()
905 switch (ring->id) { in i915_record_ring_state()
920 } else if (IS_GEN6(ring->dev)) { in i915_record_ring_state()
921 mmio = RING_HWS_PGA_GEN6(ring->mmio_base); in i915_record_ring_state()
924 mmio = RING_HWS_PGA(ring->mmio_base); in i915_record_ring_state()
930 ering->hangcheck_score = ring->hangcheck.score; in i915_record_ring_state()
931 ering->hangcheck_action = ring->hangcheck.action; in i915_record_ring_state()
936 ering->vm_info.gfx_mode = I915_READ(RING_MODE_GEN7(ring)); in i915_record_ring_state()
940 I915_READ(RING_PP_DIR_BASE_READ(ring)); in i915_record_ring_state()
943 I915_READ(RING_PP_DIR_BASE(ring)); in i915_record_ring_state()
947 I915_READ(GEN8_RING_PDP_UDW(ring, i)); in i915_record_ring_state()
950 I915_READ(GEN8_RING_PDP_LDW(ring, i)); in i915_record_ring_state()
956 static void i915_gem_record_active_context(struct intel_engine_cs *ring, in i915_gem_record_active_context() argument
960 struct drm_i915_private *dev_priv = ring->dev->dev_private; in i915_gem_record_active_context()
964 if (ring->id != RCS || !error->ccid) in i915_gem_record_active_context()
986 struct intel_engine_cs *ring = &dev_priv->ring[i]; in i915_gem_record_rings() local
989 error->ring[i].pid = -1; in i915_gem_record_rings()
991 if (ring->dev == NULL) in i915_gem_record_rings()
994 error->ring[i].valid = true; in i915_gem_record_rings()
996 i915_record_ring_state(dev, error, ring, &error->ring[i]); in i915_gem_record_rings()
998 request = i915_gem_find_active_request(ring); in i915_gem_record_rings()
1010 error->ring[i].batchbuffer = in i915_gem_record_rings()
1016 error->ring[i].wa_batchbuffer = in i915_gem_record_rings()
1018 ring->scratch.obj); in i915_gem_record_rings()
1026 strcpy(error->ring[i].comm, task->comm); in i915_gem_record_rings()
1027 error->ring[i].pid = task->pid; in i915_gem_record_rings()
1040 rbuf = request->ctx->engine[ring->id].ringbuf; in i915_gem_record_rings()
1042 rbuf = ring->default_context->engine[ring->id].ringbuf; in i915_gem_record_rings()
1044 rbuf = ring->buffer; in i915_gem_record_rings()
1046 error->ring[i].cpu_ring_head = rbuf->head; in i915_gem_record_rings()
1047 error->ring[i].cpu_ring_tail = rbuf->tail; in i915_gem_record_rings()
1049 error->ring[i].ringbuffer = in i915_gem_record_rings()
1052 error->ring[i].hws_page = in i915_gem_record_rings()
1053 i915_error_ggtt_object_create(dev_priv, ring->status_page.obj); in i915_gem_record_rings()
1055 i915_gem_record_active_context(ring, error, &error->ring[i]); in i915_gem_record_rings()
1058 list_for_each_entry(request, &ring->request_list, list) in i915_gem_record_rings()
1061 error->ring[i].num_requests = count; in i915_gem_record_rings()
1062 error->ring[i].requests = in i915_gem_record_rings()
1063 kcalloc(count, sizeof(*error->ring[i].requests), in i915_gem_record_rings()
1065 if (error->ring[i].requests == NULL) { in i915_gem_record_rings()
1066 error->ring[i].num_requests = 0; in i915_gem_record_rings()
1071 list_for_each_entry(request, &ring->request_list, list) { in i915_gem_record_rings()
1074 erq = &error->ring[i].requests[count++]; in i915_gem_record_rings()
1254 if (ring_id != -1 && error->ring[ring_id].pid != -1) in i915_error_capture_msg()
1258 error->ring[ring_id].comm, in i915_error_capture_msg()
1259 error->ring[ring_id].pid); in i915_error_capture_msg()