* \param ib_ptr IB
* \param num_dw size of the IB
* \param gfx_level gfx level
+ * \param family chip family
+ * \param ip_type IP type
* \param trace_ids the last trace IDs that are known to have been reached
* and executed by the CP, typically read from a buffer
* \param trace_id_count The number of entries in the trace_ids array.
*/
void ac_parse_ib_chunk(FILE *f, uint32_t *ib_ptr, int num_dw, const int *trace_ids,
unsigned trace_id_count, enum amd_gfx_level gfx_level,
- enum radeon_family family,
+ enum radeon_family family, enum amd_ip_type ip_type,
ac_debug_addr_callback addr_callback, void *addr_callback_data)
{
struct ac_ib_parser ib = {0};
* \param ib IB
* \param num_dw size of the IB
* \param gfx_level gfx level
+ * \param family chip family
+ * \param ip_type IP type
* \param trace_ids the last trace IDs that are known to have been reached
* and executed by the CP, typically read from a buffer
* \param trace_id_count The number of entries in the trace_ids array.
*/
void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, const int *trace_ids, unsigned trace_id_count,
const char *name, enum amd_gfx_level gfx_level, enum radeon_family family,
- ac_debug_addr_callback addr_callback, void *addr_callback_data)
+ enum amd_ip_type ip_type, ac_debug_addr_callback addr_callback, void *addr_callback_data)
{
fprintf(f, "------------------ %s begin ------------------\n", name);
- ac_parse_ib_chunk(f, ib, num_dw, trace_ids, trace_id_count, gfx_level, family, addr_callback,
- addr_callback_data);
+ ac_parse_ib_chunk(f, ib, num_dw, trace_ids, trace_id_count, gfx_level, family, ip_type,
+ addr_callback, addr_callback_data);
fprintf(f, "------------------- %s end -------------------\n\n", name);
}
unsigned offset, uint32_t value, uint32_t field_mask);
void ac_parse_ib_chunk(FILE *f, uint32_t *ib, int num_dw, const int *trace_ids,
unsigned trace_id_count, enum amd_gfx_level gfx_level,
- enum radeon_family family,
+ enum radeon_family family, enum amd_ip_type ip_type,
ac_debug_addr_callback addr_callback, void *addr_callback_data);
void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, const int *trace_ids, unsigned trace_id_count,
const char *name, enum amd_gfx_level gfx_level, enum radeon_family family,
- ac_debug_addr_callback addr_callback, void *addr_callback_data);
+ enum amd_ip_type ip_type, ac_debug_addr_callback addr_callback, void *addr_callback_data);
bool ac_vm_fault_occurred(enum amd_gfx_level gfx_level, uint64_t *old_dmesg_timestamp,
uint64_t *out_addr);
}
ac_parse_ib(stdout, ib, size / 4, NULL, 0, "IB", info->gfx_level, info->family,
- NULL, NULL);
+ AMD_IP_GFX, NULL, NULL);
free(ib);
exit(0);
}
}
fclose(f);
- ac_parse_ib(stdout, ib, size / 4, NULL, 0, filename, gfx_level, family, NULL, NULL);
+ ac_parse_ib(stdout, ib, size / 4, NULL, 0, filename, gfx_level, family, AMD_IP_GFX, NULL, NULL);
free(ib);
}
void *ib = radv_amdgpu_winsys_get_cpu_addr(cs, ib_info.ib_mc_address);
assert(ib);
ac_parse_ib(file, ib, cs->ib_buffers[0].cdw, trace_ids, trace_id_count, "main IB", ws->info.gfx_level,
- ws->info.family, radv_amdgpu_winsys_get_cpu_addr, cs);
+ ws->info.family, cs->hw_ip, radv_amdgpu_winsys_get_cpu_addr, cs);
} else {
for (unsigned i = 0; i < cs->num_ib_buffers; i++) {
struct radv_amdgpu_ib *ib = &cs->ib_buffers[i];
snprintf(name, sizeof(name), "main IB");
}
- ac_parse_ib(file, mapped, ib->cdw, trace_ids, trace_id_count, name, ws->info.gfx_level, ws->info.family, NULL,
- NULL);
+ ac_parse_ib(file, mapped, ib->cdw, trace_ids, trace_id_count, name, ws->info.gfx_level, ws->info.family,
+ cs->hw_ip, NULL, NULL);
}
}
}
if (begin < chunk->cdw) {
ac_parse_ib_chunk(f, chunk->buf + begin, MIN2(end, chunk->cdw) - begin, last_trace_id,
- trace_id_count, gfx_level, family, NULL, NULL);
+ trace_id_count, gfx_level, family, AMD_IP_GFX, NULL, NULL);
}
if (end <= chunk->cdw)
assert(end <= cs->current.cdw);
ac_parse_ib_chunk(f, cs->current.buf + begin, end - begin, last_trace_id, trace_id_count,
- gfx_level, family, NULL, NULL);
+ gfx_level, family, AMD_IP_GFX, NULL, NULL);
fprintf(f, "------------------- %s end (dw = %u) -------------------\n\n", name, orig_end);
}
if (chunk->gfx_begin == 0) {
if (ctx->cs_preamble_state)
ac_parse_ib(f, ctx->cs_preamble_state->pm4, ctx->cs_preamble_state->ndw, NULL, 0,
- "IB2: Init config", ctx->gfx_level, ctx->family, NULL, NULL);
+ "IB2: Init config", ctx->gfx_level, ctx->family, AMD_IP_GFX, NULL, NULL);
}
if (scs->flushed) {
ac_parse_ib(f, scs->gfx.ib + chunk->gfx_begin, chunk->gfx_end - chunk->gfx_begin,
- &last_trace_id, map ? 1 : 0, "IB", ctx->gfx_level, ctx->family, NULL, NULL);
+ &last_trace_id, map ? 1 : 0, "IB", ctx->gfx_level, ctx->family, AMD_IP_GFX, NULL, NULL);
} else {
si_parse_current_ib(f, &ctx->gfx_cs, chunk->gfx_begin, chunk->gfx_end, &last_trace_id,
map ? 1 : 0, "IB", ctx->gfx_level, ctx->family);