Show the decoded HEAD value, as well as print the calculated head offset per ringbuffer. This will be superceded in the next commit, but I think more info is better. Signed-off-by: Ben Widawsky <ben at bwidawsk.net> --- tools/intel_error_decode.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c index f554d57..e29ee1e 100644 --- a/tools/intel_error_decode.c +++ b/tools/intel_error_decode.c @@ -55,6 +55,13 @@ #include "intel_gpu_tools.h" #include "instdone.h" +static uint32_t +print_head(unsigned int reg) +{ + printf(" head = 0x%08x, wraps = %d\n", reg & (0x7ffff<<2), reg >> 21); + return reg & (0x7ffff<<2); +} + static void print_instdone(uint32_t devid, unsigned int instdone, unsigned int instdone1) { @@ -288,6 +295,8 @@ read_data_file(FILE *file) const char *buffer_type[2] = { "ringbuffer", "batchbuffer" }; char *ring_name = NULL; int is_batch = 1; + uint32_t head[3] = {-1, -1, -1}; + int i = 0, num_rings = -1; while (getline(&line, &line_size, file) > 0) { char *dashes; @@ -299,6 +308,9 @@ read_data_file(FILE *file) strncpy(new_ring_name, line, dashes - line); new_ring_name[dashes - line - 1] = '\0'; + if (num_rings == -1) + num_rings = i; + matched = sscanf(dashes, "--- gtt_offset = 0x%08x\n", &new_gtt_offset); if (matched == 1) { @@ -324,10 +336,11 @@ read_data_file(FILE *file) &new_gtt_offset); if (matched == 1) { if (count) { - printf("%s (%s) at 0x%08x:\n", + printf("%s (%s) at 0x%08x; HEAD points to 0x%08x:\n", buffer_type[is_batch], ring_name, - gtt_offset); + gtt_offset, + head[i++ % num_rings] + gtt_offset); drm_intel_decode_set_batch_pointer(decode_ctx, data, gtt_offset, count); @@ -377,6 +390,11 @@ read_data_file(FILE *file) decode_ctx = drm_intel_decode_context_alloc(devid); } + matched = sscanf(line, " HEAD: 0x%08x\n", ®); + if (matched == 1) { + head[i++] = print_head(reg); + } + matched = sscanf(line, " ACTHD: 0x%08x\n", ®); if (matched == 1) drm_intel_decode_set_head_tail(decode_ctx, reg, 0xffffffff); -- 1.8.2.1