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@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16664>
This commit is contained in:
parent
43ad5fd9b7
commit
0aac3b1009
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue