drm/i915/debugfs: Display the contents of the BLT and BSD status pages
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / i915 / i915_debugfs.c
index 2e5961139326cbebf43a70eb8a8805a144104f44..58cf60d89f6850839471f609b5ef21b0d4ed0a5e 100644 (file)
@@ -130,7 +130,8 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
        if (obj->fence_reg != I915_FENCE_REG_NONE)
                seq_printf(m, " (fence: %d)", obj->fence_reg);
        if (obj->gtt_space != NULL)
-               seq_printf(m, " (gtt_offset: %08x)", obj->gtt_offset);
+               seq_printf(m, " (gtt offset: %08x, size: %08x)",
+                          obj->gtt_offset, (unsigned int)obj->gtt_space->size);
        if (obj->pin_mappable || obj->fault_mappable)
                seq_printf(m, " (mappable)");
        if (obj->ring != NULL)
@@ -444,10 +445,18 @@ static int i915_hws_info(struct seq_file *m, void *data)
        struct drm_info_node *node = (struct drm_info_node *) m->private;
        struct drm_device *dev = node->minor->dev;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       int i;
+       struct intel_ring_buffer *ring;
        volatile u32 *hws;
+       int i;
 
-       hws = (volatile u32 *)dev_priv->render_ring.status_page.page_addr;
+       switch ((uintptr_t)node->info_ent->data) {
+       case RENDER_RING: ring = &dev_priv->render_ring; break;
+       case BSD_RING: ring = &dev_priv->bsd_ring; break;
+       case BLT_RING: ring = &dev_priv->blt_ring; break;
+       default: return -EINVAL;
+       }
+
+       hws = (volatile u32 *)ring->status_page.page_addr;
        if (hws == NULL)
                return 0;
 
@@ -616,17 +625,27 @@ static int i915_error_state(struct seq_file *m, void *unused)
                   error->time.tv_usec);
        seq_printf(m, "PCI ID: 0x%04x\n", dev->pci_device);
        seq_printf(m, "EIR: 0x%08x\n", error->eir);
-       seq_printf(m, "  PGTBL_ER: 0x%08x\n", error->pgtbl_er);
-       seq_printf(m, "  INSTPM: 0x%08x\n", error->instpm);
+       seq_printf(m, "PGTBL_ER: 0x%08x\n", error->pgtbl_er);
+       if (INTEL_INFO(dev)->gen >= 6) {
+               seq_printf(m, "ERROR: 0x%08x\n", error->error);
+               seq_printf(m, "Blitter command stream:\n");
+               seq_printf(m, "  ACTHD:    0x%08x\n", error->bcs_acthd);
+               seq_printf(m, "  IPEHR:    0x%08x\n", error->bcs_ipehr);
+               seq_printf(m, "  IPEIR:    0x%08x\n", error->bcs_ipeir);
+               seq_printf(m, "  INSTDONE: 0x%08x\n", error->bcs_instdone);
+               seq_printf(m, "  seqno:    0x%08x\n", error->bcs_seqno);
+       }
+       seq_printf(m, "Render command stream:\n");
+       seq_printf(m, "  ACTHD: 0x%08x\n", error->acthd);
        seq_printf(m, "  IPEIR: 0x%08x\n", error->ipeir);
        seq_printf(m, "  IPEHR: 0x%08x\n", error->ipehr);
        seq_printf(m, "  INSTDONE: 0x%08x\n", error->instdone);
-       seq_printf(m, "  ACTHD: 0x%08x\n", error->acthd);
        if (INTEL_INFO(dev)->gen >= 4) {
-               seq_printf(m, "  INSTPS: 0x%08x\n", error->instps);
                seq_printf(m, "  INSTDONE1: 0x%08x\n", error->instdone1);
+               seq_printf(m, "  INSTPS: 0x%08x\n", error->instps);
        }
-       seq_printf(m, "seqno: 0x%08x\n", error->seqno);
+       seq_printf(m, "  INSTPM: 0x%08x\n", error->instpm);
+       seq_printf(m, "  seqno: 0x%08x\n", error->seqno);
 
        if (error->active_bo_count) {
                seq_printf(m, "Buffers [%d]:\n", error->active_bo_count);
@@ -1076,7 +1095,9 @@ static struct drm_info_list i915_debugfs_list[] = {
        {"i915_gem_seqno", i915_gem_seqno_info, 0},
        {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
        {"i915_gem_interrupt", i915_interrupt_info, 0},
-       {"i915_gem_hws", i915_hws_info, 0},
+       {"i915_gem_hws", i915_hws_info, 0, (void *)RENDER_RING},
+       {"i915_gem_hws_blt", i915_hws_info, 0, (void *)BLT_RING},
+       {"i915_gem_hws_bsd", i915_hws_info, 0, (void *)BSD_RING},
        {"i915_ringbuffer_data", i915_ringbuffer_data, 0, (void *)RENDER_RING},
        {"i915_ringbuffer_info", i915_ringbuffer_info, 0, (void *)RENDER_RING},
        {"i915_bsd_ringbuffer_data", i915_ringbuffer_data, 0, (void *)BSD_RING},