drm/i915: Add i915 register dumping debugfs file
authorBen Gamari <bgamari.foss@gmail.com>
Thu, 2 Jul 2009 02:26:53 +0000 (22:26 -0400)
committerEric Anholt <eric@anholt.net>
Fri, 4 Sep 2009 20:05:09 +0000 (13:05 -0700)
Add a debugfs file to dump the entire register range. Here we
assume that reading write-only/reserved registers won't make the chip
angry. Seems to hold true, thankfully.

Signed-off-by: Ben Gamari <bgamari.foss@gmail.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
drivers/gpu/drm/i915/i915_debugfs.c

index b4f2d6bce15bf51c1dab7f832968a39a6efce36c..49e0d870f49347990bb0c12984798937b074c9dd 100644 (file)
@@ -363,7 +363,37 @@ out:
        return 0;
 }
 
+static int i915_registers_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;
+       uint32_t reg;
+
+#define DUMP_RANGE(start, end) \
+       for (reg=start; reg < end; reg += 4) \
+       seq_printf(m, "%08x\t%08x\n", reg, I915_READ(reg));
+
+       DUMP_RANGE(0x00000, 0x00fff);   /* VGA registers */
+       DUMP_RANGE(0x02000, 0x02fff);   /* instruction, memory, interrupt control registers */
+       DUMP_RANGE(0x03000, 0x031ff);   /* FENCE and PPGTT control registers */
+       DUMP_RANGE(0x03200, 0x03fff);   /* frame buffer compression registers */
+       DUMP_RANGE(0x05000, 0x05fff);   /* I/O control registers */
+       DUMP_RANGE(0x06000, 0x06fff);   /* clock control registers */
+       DUMP_RANGE(0x07000, 0x07fff);   /* 3D internal debug registers */
+       DUMP_RANGE(0x07400, 0x088ff);   /* GPE debug registers */
+       DUMP_RANGE(0x0a000, 0x0afff);   /* display palette registers */
+       DUMP_RANGE(0x10000, 0x13fff);   /* MMIO MCHBAR */
+       DUMP_RANGE(0x30000, 0x3ffff);   /* overlay registers */
+       DUMP_RANGE(0x60000, 0x6ffff);   /* display engine pipeline registers */
+       DUMP_RANGE(0x70000, 0x72fff);   /* display and cursor registers */
+       DUMP_RANGE(0x73000, 0x73fff);   /* performance counters */
+
+       return 0;
+}
+
+
 static struct drm_info_list i915_debugfs_list[] = {
+       {"i915_regs", i915_registers_info, 0},
        {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST},
        {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST},
        {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST},