diff options
author | Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com> | 2015-08-10 15:37:47 -0700 |
---|---|---|
committer | Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com> | 2015-08-12 08:58:00 -0700 |
commit | 3156305aceb790d410580ea44f145119359292e6 (patch) | |
tree | d90d770238b19557bbb21be6cd32172f28984f8d /tools | |
parent | 8a7c386f0a302be1c099804ab67f32c6965d3c7d (diff) |
aubdump: Handle 48 bit ppgtt dumping
Put 48 bit block offsets in the AUB file and track the bo offsets with
uint64_t.
Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/aubdump.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/tools/aubdump.c b/tools/aubdump.c index 73334a30..df56724f 100644 --- a/tools/aubdump.c +++ b/tools/aubdump.c @@ -58,7 +58,7 @@ static uint32_t device; struct bo { uint32_t size; - uint32_t offset; + uint64_t offset; void *map; }; @@ -115,6 +115,12 @@ align_u32(uint32_t v, uint32_t a) return (v + a - 1) & ~(a - 1); } +static inline uint64_t +align_u64(uint64_t v, uint64_t a) +{ + return (v + a - 1) & ~(a - 1); +} + static void dword_out(uint32_t data) { @@ -162,7 +168,7 @@ write_header(void) * everything goes badly after that. */ static void -aub_write_trace_block(uint32_t type, void *virtual, uint32_t size, uint32_t gtt_offset) +aub_write_trace_block(uint32_t type, void *virtual, uint32_t size, uint64_t gtt_offset) { uint32_t block_size; uint32_t subtype = 0; @@ -182,7 +188,7 @@ aub_write_trace_block(uint32_t type, void *virtual, uint32_t size, uint32_t gtt_ dword_out(gtt_offset + offset); dword_out(align_u32(block_size, 4)); if (gen >= 8) - dword_out(0); + dword_out((gtt_offset + offset) >> 32); if (virtual) data_out(GET_PTR(virtual) + offset, block_size); @@ -195,7 +201,7 @@ aub_write_trace_block(uint32_t type, void *virtual, uint32_t size, uint32_t gtt_ } static void -aub_dump_ringbuffer(uint32_t batch_offset, uint32_t offset, int ring_flag) +aub_dump_ringbuffer(uint64_t batch_offset, uint64_t offset, int ring_flag) { uint32_t ringbuffer[4096]; int ring = AUB_TRACE_TYPE_RING_PRB0; /* The default ring */ @@ -211,7 +217,7 @@ aub_dump_ringbuffer(uint32_t batch_offset, uint32_t offset, int ring_flag) if (gen >= 8) { ringbuffer[ring_count++] = AUB_MI_BATCH_BUFFER_START | (3 - 2); ringbuffer[ring_count++] = batch_offset; - ringbuffer[ring_count++] = 0; + ringbuffer[ring_count++] = batch_offset >> 32; } else { ringbuffer[ring_count++] = AUB_MI_BATCH_BUFFER_START; ringbuffer[ring_count++] = batch_offset; @@ -227,7 +233,7 @@ aub_dump_ringbuffer(uint32_t batch_offset, uint32_t offset, int ring_flag) dword_out(offset); dword_out(ring_count * 4); if (gen >= 8) - dword_out(0); + dword_out(offset >> 32); data_out(ringbuffer, ring_count * 4); } |