Mesa (main): intel/tools/aubinator: add support for 2 "new" subopcodes
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue May 24 08:31:58 UTC 2022
Module: Mesa
Branch: main
Commit: 0aac3b1009df6b3068c1203624c32de97aafc746
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0aac3b1009df6b3068c1203624c32de97aafc746
Author: Marcin Ślusarz <marcin.slusarz at intel.com>
Date: Thu May 19 17:06:48 2022 +0200
intel/tools/aubinator: add support for 2 "new" subopcodes
... and add macros for subopcodes we haven't seen yet
Acked-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16664>
---
src/intel/tools/aub_read.c | 91 +++++++++++++++++++++++++++++++++++++++------
src/intel/tools/aub_read.h | 2 +
src/intel/tools/aubinator.c | 7 ++++
3 files changed, 88 insertions(+), 12 deletions(-)
diff --git a/src/intel/tools/aub_read.c b/src/intel/tools/aub_read.c
index 02da00dea8f..0c40242c90f 100644
--- a/src/intel/tools/aub_read.c
+++ b/src/intel/tools/aub_read.c
@@ -50,12 +50,24 @@
#define SUBOPCODE_BMP 0x1e
/* Newer version AUB opcode */
-#define OPCODE_NEW_AUB 0x2e
-#define SUBOPCODE_REG_POLL 0x02
-#define SUBOPCODE_REG_WRITE 0x03
-#define SUBOPCODE_MEM_POLL 0x05
-#define SUBOPCODE_MEM_WRITE 0x06
-#define SUBOPCODE_VERSION 0x0e
+#define OPCODE_NEW_AUB 0x2e
+#define SUBOPCODE_VERSION 0x00
+#define SUBOPCODE_REG_CMP 0x01
+#define SUBOPCODE_REG_POLL 0x02
+#define SUBOPCODE_REG_WRITE 0x03
+#define SUBOPCODE_MEM_CMP 0x04
+#define SUBOPCODE_MEM_POLL 0x05
+#define SUBOPCODE_MEM_WRITE 0x06
+#define SUBOPCODE_FRAME_BEGIN 0x07
+#define SUBOPCODE_COMMENT 0x08
+#define SUBOPCODE_TRACE_DELAY 0x09
+#define SUBOPCODE_MEM_DUMP 0x0a
+#define SUBOPCODE_MEM_WRITE_DISCONT 0x0b
+#define SUBOPCODE_TEST_PHASE_MARKER 0x0c
+#define SUBOPCODE_MEM_CONT_REGION 0x0d
+#define SUBOPCODE_VERSION_EXT 0x0e
+#define SUBOPCODE_PREDICATE 0x0f
+#define SUBOPCODE_DUMP_COMPRESS 0x10
static PRINTFLIKE(3, 4) void
parse_error(struct aub_read *read, const uint32_t *p, const char *fmt, ...)
@@ -257,12 +269,10 @@ handle_memtrace_reg_write(struct aub_read *read, const uint32_t *p)
}
static void
-handle_memtrace_mem_write(struct aub_read *read, const uint32_t *p)
+do_write(struct aub_read *read, uint32_t address_space, uint64_t addr, const void *data, uint32_t size)
{
- const void *data = p + 5;
- uint64_t addr = intel_48b_address(*(uint64_t*)&p[1]);
- uint32_t size = p[4];
- uint32_t address_space = p[3] >> 28;
+ if (0)
+ fprintf(stderr, "*0x%lx = *0x%p (%d)\n", addr, data, size);
switch (address_space) {
case 0: /* GGTT */
@@ -284,6 +294,38 @@ handle_memtrace_mem_write(struct aub_read *read, const uint32_t *p)
}
}
+static void
+handle_memtrace_mem_write(struct aub_read *read, const uint32_t *p)
+{
+ const void *data = p + 5;
+ uint64_t addr = intel_48b_address(*(uint64_t*)&p[1]);
+ uint32_t size = p[4];
+ uint32_t address_space = p[3] >> 28;
+
+ do_write(read, address_space, addr, data, size);
+}
+
+static void
+handle_memtrace_mem_write_discont(struct aub_read *read, const uint32_t *p)
+{
+ uint32_t address_space = p[1] >> 28;
+ const struct {
+ uint64_t address;
+ uint32_t size;
+ } __attribute__((packed)) *cur = (const void *)(p + 2);
+ const void *data = p + 2 + 3 * 63;
+
+ for (unsigned i = 0; i < 63; ++i, ++cur) {
+ uint64_t addr = intel_48b_address(cur->address);
+ uint32_t size = cur->size;
+
+ if (size == 0)
+ continue;
+
+ do_write(read, address_space, addr, data, size);
+ }
+}
+
int
aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
{
@@ -322,6 +364,14 @@ aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
return -1;
}
+ if (0) {
+ fprintf(stderr, "0x%x, 0x%x, 0x%x, len: %d\n",
+ TYPE(h), OPCODE(h), SUBOPCODE(h), header_length);
+ for (const uint32_t *cur = p; cur < next; ++cur)
+ fprintf(stderr, "0x%08x ", *cur);
+ fprintf(stderr, "\n");
+ }
+
switch (h & 0xffff0000) {
case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_HEADER):
if (!handle_trace_header(read, p))
@@ -333,7 +383,7 @@ aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
break;
case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_BMP):
break;
- case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_VERSION):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_VERSION_EXT):
if (!handle_memtrace_version(read, p))
return -1;
break;
@@ -348,6 +398,23 @@ aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
break;
case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_REG_POLL):
break;
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_COMMENT):
+ if (read->comment)
+ read->comment(read->user_data, (const char *)(p + 2));
+ break;
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_MEM_WRITE_DISCONT):
+ handle_memtrace_mem_write_discont(read, p);
+ break;
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_VERSION):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_REG_CMP):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_MEM_CMP):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_FRAME_BEGIN):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_TRACE_DELAY):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_MEM_DUMP):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_TEST_PHASE_MARKER):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_MEM_CONT_REGION):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_PREDICATE):
+ case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_DUMP_COMPRESS):
default:
parse_error(read, p,
"unknown block type=0x%x, opcode=0x%x, subopcode=0x%x (%08x)\n",
diff --git a/src/intel/tools/aub_read.h b/src/intel/tools/aub_read.h
index 4b815d1f6af..6f2c38db2f8 100644
--- a/src/intel/tools/aub_read.h
+++ b/src/intel/tools/aub_read.h
@@ -42,6 +42,8 @@ struct aub_read {
void (*info)(void *user_data, int pci_id, const char *app_name);
+ void (*comment)(void *user_data, const char *msg);
+
void (*local_write)(void *user_data, uint64_t phys_addr, const void *data, uint32_t data_len);
void (*phys_write)(void *user_data, uint64_t phys_addr, const void *data, uint32_t data_len);
void (*ggtt_write)(void *user_data, uint64_t phys_addr, const void *data, uint32_t data_len);
diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c
index fb0a9528f77..7baa2e65dfd 100644
--- a/src/intel/tools/aubinator.c
+++ b/src/intel/tools/aubinator.c
@@ -72,6 +72,12 @@ aubinator_error(void *user_data, const void *aub_data, const char *msg)
fprintf(stderr, "%s", msg);
}
+static void
+aubinator_comment(void *user_data, const char *str)
+{
+ fprintf(outfile, "%s\n", str);
+}
+
static void
aubinator_init(void *user_data, int aub_pci_id, const char *app_name)
{
@@ -373,6 +379,7 @@ int main(int argc, char *argv[])
.user_data = &mem,
.error = aubinator_error,
.info = aubinator_init,
+ .comment = aubinator_comment,
.local_write = aub_mem_local_write,
.phys_write = aub_mem_phys_write,
More information about the mesa-commit
mailing list