Mesa (main): radeonsi: add helpers to deal with spm counters
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Apr 22 12:19:05 UTC 2022
Module: Mesa
Branch: main
Commit: bb16154d948ad3d1933fc3d26e9c681d3dab1c3e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bb16154d948ad3d1933fc3d26e9c681d3dab1c3e
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date: Tue Mar 29 14:14:34 2022 +0200
radeonsi: add helpers to deal with spm counters
Based on radv_perfcounter.c
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15646>
---
src/gallium/drivers/radeonsi/si_perfcounter.c | 45 +++++++++++++++++++++++++++
src/gallium/drivers/radeonsi/si_pipe.h | 3 ++
2 files changed, 48 insertions(+)
diff --git a/src/gallium/drivers/radeonsi/si_perfcounter.c b/src/gallium/drivers/radeonsi/si_perfcounter.c
index d6f46abcd75..0fb56718935 100644
--- a/src/gallium/drivers/radeonsi/si_perfcounter.c
+++ b/src/gallium/drivers/radeonsi/si_perfcounter.c
@@ -163,6 +163,51 @@ static void si_pc_emit_stop(struct si_context *sctx, struct si_resource *buffer,
radeon_end();
}
+void si_pc_emit_spm_start(struct radeon_cmdbuf *cs)
+{
+ radeon_begin(cs);
+
+ /* Start SPM counters. */
+ radeon_set_uconfig_reg(R_036020_CP_PERFMON_CNTL,
+ S_036020_PERFMON_STATE(V_036020_CP_PERFMON_STATE_DISABLE_AND_RESET) |
+ S_036020_SPM_PERFMON_STATE(V_036020_STRM_PERFMON_STATE_START_COUNTING));
+ /* Start windowed performance counters. */
+ radeon_emit(PKT3(PKT3_EVENT_WRITE, 0, 0));
+ radeon_emit(EVENT_TYPE(V_028A90_PERFCOUNTER_START) | EVENT_INDEX(0));
+ radeon_set_sh_reg(R_00B82C_COMPUTE_PERFCOUNT_ENABLE, S_00B82C_PERFCOUNT_ENABLE(1));
+
+ radeon_end();
+}
+
+void si_pc_emit_spm_stop(struct radeon_cmdbuf *cs, bool never_stop_sq_perf_counters)
+{
+ radeon_begin(cs);
+
+ /* Stop windowed performance counters. */
+ radeon_emit(PKT3(PKT3_EVENT_WRITE, 0, 0));
+ radeon_emit(EVENT_TYPE(V_028A90_PERFCOUNTER_STOP) | EVENT_INDEX(0));
+ radeon_set_sh_reg(R_00B82C_COMPUTE_PERFCOUNT_ENABLE, S_00B82C_PERFCOUNT_ENABLE(0));
+
+ /* Stop SPM counters. */
+ radeon_set_uconfig_reg(R_036020_CP_PERFMON_CNTL,
+ S_036020_PERFMON_STATE(V_036020_CP_PERFMON_STATE_DISABLE_AND_RESET) |
+ S_036020_SPM_PERFMON_STATE(never_stop_sq_perf_counters ?
+ V_036020_STRM_PERFMON_STATE_START_COUNTING :
+ V_036020_STRM_PERFMON_STATE_STOP_COUNTING));
+
+ radeon_end();
+}
+
+void si_pc_emit_spm_reset(struct radeon_cmdbuf *cs)
+{
+ radeon_begin(cs);
+ radeon_set_uconfig_reg(R_036020_CP_PERFMON_CNTL,
+ S_036020_PERFMON_STATE(V_036020_CP_PERFMON_STATE_DISABLE_AND_RESET) |
+ S_036020_SPM_PERFMON_STATE(V_036020_STRM_PERFMON_STATE_DISABLE_AND_RESET));
+ radeon_end();
+}
+
+
static void si_pc_emit_read(struct si_context *sctx, struct ac_pc_block *block, unsigned count,
uint64_t va)
{
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index 45390f57854..82075cf9e4d 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -1509,6 +1509,9 @@ void si_init_perfcounters(struct si_screen *screen);
void si_destroy_perfcounters(struct si_screen *screen);
void si_inhibit_clockgating(struct si_context *sctx, struct radeon_cmdbuf *cs, bool inhibit);
void si_pc_emit_shaders(struct radeon_cmdbuf *cs, unsigned shaders);
+void si_pc_emit_spm_start(struct radeon_cmdbuf *cs);
+void si_pc_emit_spm_stop(struct radeon_cmdbuf *cs, bool never_stop_sq_perf_counters);
+void si_pc_emit_spm_reset(struct radeon_cmdbuf *cs);
/* si_query.c */
void si_init_screen_query_functions(struct si_screen *sscreen);
More information about the mesa-commit
mailing list