From: Dave Gordon <david.s.gor...@intel.com>

Also decode and output CSB entries, in time order

For: VIZ-2021
Signed-off-by: Dave Gordon <david.s.gor...@intel.com>
Signed-off-by: Arun Siluvery <arun.siluv...@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h       |  1 +
 drivers/gpu/drm/i915/i915_gpu_error.c | 37 +++++++++++++++++++++++++++--------
 2 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 84bbd98..cb8de49 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -568,6 +568,7 @@ struct drm_i915_error_state {
                } *req_ringbuffer, *hw_ringbuffer, *batchbuffer, 
*wa_batchbuffer, *ctx, *hws_page;
 
                struct drm_i915_error_request {
+                       uint64_t ctx_desc;
                        long jiffies;
                        u32 seqno;
                        u32 tail;
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
index d4d46ac..ac83f91 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -312,9 +312,25 @@ static void i915_ring_error_state(struct 
drm_i915_error_state_buf *m,
                err_printf(m, "  EXECLIST_CSB_WR: 0x%08x\n", 
ring->execlist_csb_write_pointer);
                err_printf(m, "  EXECLIST_CSB_RD: 0x%08x\n", 
ring->execlist_csb_read_pointer);
 
-               for (i = 0; i < 6; i++) {
-                       err_printf(m, "  EXECLIST_CSB[%d]: 0x%08x\n", i, 
ring->execlist_csb[i]);
-                       err_printf(m, "  EXECLIST_CTX[%d]: 0x%08x\n", i, 
ring->execlist_ctx[i]);
+#define GEN8_CTX_STATUS_IDLE_ACTIVE    (1 << 0)
+#define GEN8_CTX_STATUS_PREEMPTED      (1 << 1)
+#define GEN8_CTX_STATUS_ELEMENT_SWITCH (1 << 2)
+#define GEN8_CTX_STATUS_ACTIVE_IDLE    (1 << 3)
+#define GEN8_CTX_STATUS_COMPLETE       (1 << 4)
+#define GEN8_CTX_STATUS_LITE_RESTORE   (1 << 15)
+
+               for (i = 1; i <= GEN8_CSB_ENTRIES; ++i) {
+                       int n = (ring->execlist_csb_write_pointer + i) % 
GEN8_CSB_ENTRIES;
+                       u32 csb = ring->execlist_csb[n];
+                       err_printf(m, "  EXECLIST_CTX/CSB[%d]:  0x%08x  0x%08x  
",
+                                  n, ring->execlist_ctx[n], csb);
+                       err_printf(m, "%s %s %s %s %s %s\n",
+                                  csb & GEN8_CTX_STATUS_IDLE_ACTIVE    ? 
"I->A" : "    ",
+                                  csb & GEN8_CTX_STATUS_PREEMPTED              
? "PRMT" : "    ",
+                                  csb & GEN8_CTX_STATUS_ELEMENT_SWITCH ? 
"ELSW" : "    ",
+                                  csb & GEN8_CTX_STATUS_ACTIVE_IDLE    ? 
"A->I" : "    ",
+                                  csb & GEN8_CTX_STATUS_COMPLETE               
? "DONE" : "    ",
+                                  csb & GEN8_CTX_STATUS_LITE_RESTORE   ? 
"LITE" : "    ");
                }
        }
 }
@@ -470,10 +486,13 @@ int i915_error_state_to_str(struct 
drm_i915_error_state_buf *m,
                                   dev_priv->ring[i].name,
                                   error->ring[i].num_requests);
                        for (j = 0; j < error->ring[i].num_requests; j++) {
-                               err_printf(m, "  seqno 0x%08x, emitted %ld, 
tail 0x%08x\n",
-                                          error->ring[i].requests[j].seqno,
-                                          error->ring[i].requests[j].jiffies,
-                                          error->ring[i].requests[j].tail);
+                               struct drm_i915_error_request *erq;
+                               erq = &error->ring[i].requests[j];
+                               err_printf(m, "  seqno 0x%08x, tail 0x%08x, "
+                                       "emitted %ld, ctx_desc 0x%08x_%08x\n",
+                                       erq->seqno, erq->tail, erq->jiffies,
+                                       upper_32_bits(erq->ctx_desc),
+                                       lower_32_bits(erq->ctx_desc));
                        }
                }
 
@@ -1132,6 +1151,7 @@ static void i915_gem_record_rings(struct drm_device *dev,
 
                count = 0;
                list_for_each_entry(request, &ring->request_list, list) {
+                       struct intel_context *ctx = request->ctx;
                        struct drm_i915_error_request *erq;
 
                        if (count >= error->ring[i].num_requests) {
@@ -1154,8 +1174,9 @@ static void i915_gem_record_rings(struct drm_device *dev,
                        }
 
                        erq = &error->ring[i].requests[count++];
-                       erq->seqno = request->seqno;
+                       erq->ctx_desc = intel_lr_context_descriptor(ctx, ring);
                        erq->jiffies = request->emitted_jiffies;
+                       erq->seqno = request->seqno;
                        erq->tail = request->postfix;
                }
        }
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to