[PATCH 2/4] intel_error_decode: HEAD stuff

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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", &reg);
+			if (matched == 1) {
+				head[i++] = print_head(reg);
+			}
+
 			matched = sscanf(line, "  ACTHD: 0x%08x\n", &reg);
 			if (matched == 1)
 				drm_intel_decode_set_head_tail(decode_ctx, reg, 0xffffffff);
-- 
1.8.2.1



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux