mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 22:10:10 +01:00
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
3 changed files with 88 additions and 12 deletions
|
|
@ -50,12 +50,24 @@
|
||||||
#define SUBOPCODE_BMP 0x1e
|
#define SUBOPCODE_BMP 0x1e
|
||||||
|
|
||||||
/* Newer version AUB opcode */
|
/* Newer version AUB opcode */
|
||||||
#define OPCODE_NEW_AUB 0x2e
|
#define OPCODE_NEW_AUB 0x2e
|
||||||
#define SUBOPCODE_REG_POLL 0x02
|
#define SUBOPCODE_VERSION 0x00
|
||||||
#define SUBOPCODE_REG_WRITE 0x03
|
#define SUBOPCODE_REG_CMP 0x01
|
||||||
#define SUBOPCODE_MEM_POLL 0x05
|
#define SUBOPCODE_REG_POLL 0x02
|
||||||
#define SUBOPCODE_MEM_WRITE 0x06
|
#define SUBOPCODE_REG_WRITE 0x03
|
||||||
#define SUBOPCODE_VERSION 0x0e
|
#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
|
static PRINTFLIKE(3, 4) void
|
||||||
parse_error(struct aub_read *read, const uint32_t *p, const char *fmt, ...)
|
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
|
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;
|
if (0)
|
||||||
uint64_t addr = intel_48b_address(*(uint64_t*)&p[1]);
|
fprintf(stderr, "*0x%lx = *0x%p (%d)\n", addr, data, size);
|
||||||
uint32_t size = p[4];
|
|
||||||
uint32_t address_space = p[3] >> 28;
|
|
||||||
|
|
||||||
switch (address_space) {
|
switch (address_space) {
|
||||||
case 0: /* GGTT */
|
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
|
int
|
||||||
aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
|
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;
|
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) {
|
switch (h & 0xffff0000) {
|
||||||
case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_HEADER):
|
case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_HEADER):
|
||||||
if (!handle_trace_header(read, p))
|
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;
|
break;
|
||||||
case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_BMP):
|
case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_BMP):
|
||||||
break;
|
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))
|
if (!handle_memtrace_version(read, p))
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
@ -348,6 +398,23 @@ aub_read_command(struct aub_read *read, const void *data, uint32_t data_len)
|
||||||
break;
|
break;
|
||||||
case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_REG_POLL):
|
case MAKE_HEADER(TYPE_AUB, OPCODE_NEW_AUB, SUBOPCODE_REG_POLL):
|
||||||
break;
|
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:
|
default:
|
||||||
parse_error(read, p,
|
parse_error(read, p,
|
||||||
"unknown block type=0x%x, opcode=0x%x, subopcode=0x%x (%08x)\n",
|
"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 (*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 (*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 (*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);
|
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);
|
fprintf(stderr, "%s", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
aubinator_comment(void *user_data, const char *str)
|
||||||
|
{
|
||||||
|
fprintf(outfile, "%s\n", str);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
aubinator_init(void *user_data, int aub_pci_id, const char *app_name)
|
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,
|
.user_data = &mem,
|
||||||
.error = aubinator_error,
|
.error = aubinator_error,
|
||||||
.info = aubinator_init,
|
.info = aubinator_init,
|
||||||
|
.comment = aubinator_comment,
|
||||||
|
|
||||||
.local_write = aub_mem_local_write,
|
.local_write = aub_mem_local_write,
|
||||||
.phys_write = aub_mem_phys_write,
|
.phys_write = aub_mem_phys_write,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue