[PATCH] Allow reading all of ring buffer and decode partial ranges
Tom St Denis
tstdenis82 at gmail.com
Mon Feb 6 16:29:15 UTC 2017
Fixes bug where say "-R gfx" would not actually dump the full
ring contents.
Adds feature where if you specify start and stop, e.g.,
"-R gfx[0:16]" will enable the decoder.
Signed-off-by: Tom St Denis <tom.stdenis at amd.com>
---
src/app/ring_read.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/src/app/ring_read.c b/src/app/ring_read.c
index 1726573a0396..970310b9bf52 100644
--- a/src/app/ring_read.c
+++ b/src/app/ring_read.c
@@ -78,13 +78,14 @@ void umr_read_ring(struct umr_asic *asic, char *ringpath)
drv_wptr = ring_data[2]<<2;
/* default to reading entire ring */
+ use_decoder = 0;
if (!from[0]) {
start = 0;
- end = ringsize;
+ end = ringsize-4;
} else {
if (from[0] == '.' || !to[0] || to[0] == '.') {
/* start from 32 words prior to rptr up to wptr */
- end = wptr+4;
+ end = wptr;
if (rptr < (31*4)) {
start = rptr - 31*4;
start += ringsize;
@@ -95,6 +96,7 @@ void umr_read_ring(struct umr_asic *asic, char *ringpath)
} else {
sscanf(from, "%"SCNu32, &start);
sscanf(to, "%"SCNu32, &end);
+ use_decoder = 1;
}
}
end %= ringsize;
@@ -106,8 +108,7 @@ void umr_read_ring(struct umr_asic *asic, char *ringpath)
asic->asicname, ringname, (unsigned long)wptr >> 2,
asic->asicname, ringname, (unsigned long)drv_wptr >> 2);
- use_decoder = 0;
- while (start != end) {
+ do {
value = ring_data[(start+12)>>2];
printf("%s.%s.ring[%4lu] == 0x%08lx ", asic->asicname, ringname, (unsigned long)start >> 2, (unsigned long)value);
if (enable_decoder && start == rptr && start != wptr) {
@@ -123,7 +124,7 @@ void umr_read_ring(struct umr_asic *asic, char *ringpath)
printf("\n");
start += 4;
start %= ringsize;
- }
+ } while (start != ((end + 4) % ringsize));
free(ring_data);
printf("\n");
--
2.11.0
More information about the amd-gfx
mailing list