Output a hex dump of each instruction we dump from the ring buffer to aid more complex debugging situations. --- drivers/gpu/drm/i915/i915_gem_debugfs.c | 25 ++++++++++++++++--------- 1 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem_debugfs.c b/drivers/gpu/drm/i915/i915_gem_debugfs.c index 1386605..65eecdf 100644 --- a/drivers/gpu/drm/i915/i915_gem_debugfs.c +++ b/drivers/gpu/drm/i915/i915_gem_debugfs.c @@ -569,11 +569,13 @@ static int valid_command(uint32_t cmd) return count; } -static int dump_cmd(struct seq_file *m, uint32_t cmd, int count) +static int dump_cmd(struct seq_file *m, volatile uint32_t *ptr, int count) { + uint32_t cmd = *ptr; uint32_t type = (cmd >> 29) & 0x7; uint32_t opcode, subopcode; uint32_t pipeline_type; + int i; int ret = 1; seq_printf(m, "\t"); @@ -582,9 +584,9 @@ static int dump_cmd(struct seq_file *m, uint32_t cmd, int count) case 0: opcode = (cmd >> 23) & 0x3f; if (mi_cmds[opcode]) - seq_printf(m, "%-40.40s %d\n", mi_cmds[opcode], count); + seq_printf(m, "%-40.40s %d", mi_cmds[opcode], count); else - seq_printf(m, "Memory Interface Reserved\n"); + seq_printf(m, "Memory Interface Reserved"); break; case 1: @@ -594,9 +596,9 @@ static int dump_cmd(struct seq_file *m, uint32_t cmd, int count) case 2: opcode = (cmd >> 22) & 0x7f; if (_2d_cmds[opcode]) - seq_printf(m, "%-40.40s %d\n", _2d_cmds[opcode], count); + seq_printf(m, "%-40.40s %d", _2d_cmds[opcode], count); else - seq_printf(m, "2D Reserved\n"); + seq_printf(m, "2D Reserved"); break; /* 3D */ @@ -605,19 +607,24 @@ static int dump_cmd(struct seq_file *m, uint32_t cmd, int count) opcode = (cmd >> 24) & 0x7; subopcode = (cmd >> 16) & 0xff; if (_3d_cmds[pipeline_type][opcode][subopcode].name) { - seq_printf(m, "%-40.40s %d\n", + seq_printf(m, "%-40.40s %d", _3d_cmds[pipeline_type][opcode][subopcode].name, count); } else { - seq_printf(m, "3D/Media Reserved (pipe %d op %d sub %d)\n", + seq_printf(m, "3D/Media Reserved (pipe %d op %d sub %d)", pipeline_type, opcode, subopcode); } break; default: - seq_printf(m, "Reserved\n"); + seq_printf(m, "Reserved"); break; } + + seq_printf(m, " ["); + for (i=0; i < count; i++) + seq_printf(m, " %04x %04x ", ptr[i] & 0xff00, ptr[i] & 0x00ff); + seq_printf(m, "]\n"); return ret; } @@ -679,7 +686,7 @@ static void dump_cmds (struct seq_file *m, ptr = (volatile uint32_t *) (virt + ring); data = *ptr; count = valid_command(data); - dump_cmd(m, data, count); + dump_cmd(m, ptr, count); /* check for MI_BATCH_BUFFER_END */ if (data == (0x0a << 23)) -- 1.6.0.6 ------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword -- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel