intel/perf: add OA A counter type

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 <lionel.g.landwerlin@intel.com>
Reviewed-by: Marcin Ślusarz <marcin.slusarz@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16144>
This commit is contained in:
Lionel Landwerlin
2021-07-07 00:13:06 -07:00
committed by Marge Bot
parent 376e420abb
commit 6f63bc38e7
5 changed files with 13 additions and 0 deletions
+5
View File
@@ -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;
+1
View File
@@ -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;
+1
View File
@@ -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,
+3
View File
@@ -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 */
+3
View File
@@ -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 =