From 6f63bc38e768b35f472d99d7a6275e288c025681 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 7 Jul 2021 00:13:06 -0700 Subject: [PATCH] intel/perf: add OA A counter type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On Gfx12.5 products, we'll need to capture a couple of A counters that are not captured in MI_RPC reports. Those are actually global, previously all A counters were per context. Signed-off-by: Lionel Landwerlin Reviewed-by: Marcin Ĺšlusarz Part-of: --- src/intel/perf/intel_perf.c | 5 +++++ src/intel/perf/intel_perf.h | 1 + src/intel/perf/intel_perf_query.c | 1 + src/intel/vulkan/anv_perf.c | 3 +++ src/intel/vulkan/genX_query.c | 3 +++ 5 files changed, 13 insertions(+) diff --git a/src/intel/perf/intel_perf.c b/src/intel/perf/intel_perf.c index a33520f2076..f40385304b2 100644 --- a/src/intel/perf/intel_perf.c +++ b/src/intel/perf/intel_perf.c @@ -1151,6 +1151,8 @@ query_accumulator_offset(const struct intel_perf_query_info *query, switch (type) { case INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT: return query->perfcnt_offset + index; + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: + return query->a_offset + index; case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: return query->b_offset + index; case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C: @@ -1238,6 +1240,9 @@ intel_perf_query_result_print_fields(const struct intel_perf_query_info *query, fprintf(stderr, " TS: 0x%08x\n", *(value32 + 1)); fprintf(stderr, " CLK: 0x%08x\n", *(value32 + 3)); break; + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: + fprintf(stderr, "A%u: 0x%08x\n", field->index, *value32); + break; case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: fprintf(stderr, "B%u: 0x%08x\n", field->index, *value32); break; diff --git a/src/intel/perf/intel_perf.h b/src/intel/perf/intel_perf.h index 194be876417..ba90a660190 100644 --- a/src/intel/perf/intel_perf.h +++ b/src/intel/perf/intel_perf.h @@ -277,6 +277,7 @@ struct intel_perf_query_field_layout { INTEL_PERF_QUERY_FIELD_TYPE_MI_RPC, INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT, INTEL_PERF_QUERY_FIELD_TYPE_SRM_RPSTAT, + INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A, INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B, INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C, } type; diff --git a/src/intel/perf/intel_perf_query.c b/src/intel/perf/intel_perf_query.c index 0066de8159c..03bad5854e3 100644 --- a/src/intel/perf/intel_perf_query.c +++ b/src/intel/perf/intel_perf_query.c @@ -735,6 +735,7 @@ snapshot_query_layout(struct intel_perf_context *perf_ctx, break; case INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_RPSTAT: + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C: perf_cfg->vtbl.store_register_mem(perf_ctx->ctx, query->oa.bo, diff --git a/src/intel/vulkan/anv_perf.c b/src/intel/vulkan/anv_perf.c index 0af1dd41d41..cdea955b082 100644 --- a/src/intel/vulkan/anv_perf.c +++ b/src/intel/vulkan/anv_perf.c @@ -89,10 +89,13 @@ anv_physical_device_init_perf(struct anv_physical_device *device, int fd) break; case INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_RPSTAT: + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C: device->n_perf_query_commands += field->size / 4; break; + default: + unreachable("Unhandled register type"); } } device->n_perf_query_commands *= 2; /* Begin & End */ diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index e302c4fe163..ad781d003f8 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -884,6 +884,7 @@ emit_perf_intel_query(struct anv_cmd_buffer *cmd_buffer, case INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_RPSTAT: + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C: { struct anv_address addr = anv_address_add(data_addr, field->location); @@ -1042,6 +1043,7 @@ void genX(CmdBeginQueryIndexedEXT)( case INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_RPSTAT: + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C: dws = @@ -1193,6 +1195,7 @@ void genX(CmdEndQueryIndexedEXT)( case INTEL_PERF_QUERY_FIELD_TYPE_SRM_PERFCNT: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_RPSTAT: + case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_A: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_B: case INTEL_PERF_QUERY_FIELD_TYPE_SRM_OA_C: dws =