From: Tom St Denis <[email protected]>

Add support for the debugfs wave reader.

Signed-off-by: Tom St Denis <[email protected]>
Reviewed-by: Alex Deucher <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 36 +++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index f655559..2017cee 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -2806,9 +2806,45 @@ static void gfx_v6_ring_emit_cntxcntl(struct amdgpu_ring 
*ring, uint32_t flags)
        amdgpu_ring_write(ring, 0);
 }
 
+
+static uint32_t wave_read_ind(struct amdgpu_device *adev, uint32_t simd, 
uint32_t wave, uint32_t address)
+{
+       WREG32(mmSQ_IND_INDEX,
+               (wave << SQ_IND_INDEX__WAVE_ID__SHIFT) |
+               (simd << SQ_IND_INDEX__SIMD_ID__SHIFT) |
+               (address << SQ_IND_INDEX__INDEX__SHIFT) |
+               (SQ_IND_INDEX__FORCE_READ_MASK));
+       return RREG32(mmSQ_IND_DATA);
+}
+
+static void gfx_v6_0_read_wave_data(struct amdgpu_device *adev, uint32_t simd, 
uint32_t wave, uint32_t *dst, int *no_fields)
+{
+       /* type 0 wave data */
+       dst[(*no_fields)++] = 0;
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_STATUS);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_PC_LO);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_PC_HI);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_EXEC_LO);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_EXEC_HI);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_HW_ID);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_INST_DW0);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_INST_DW1);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_GPR_ALLOC);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_LDS_ALLOC);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_TRAPSTS);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_IB_STS);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_TBA_LO);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_TBA_HI);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_TMA_LO);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_TMA_HI);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, 
ixSQ_WAVE_IB_DBG0);
+       dst[(*no_fields)++] = wave_read_ind(adev, simd, wave, ixSQ_WAVE_M0);
+}
+
 static const struct amdgpu_gfx_funcs gfx_v6_0_gfx_funcs = {
        .get_gpu_clock_counter = &gfx_v6_0_get_gpu_clock_counter,
        .select_se_sh = &gfx_v6_0_select_se_sh,
+       .read_wave_data = &gfx_v6_0_read_wave_data,
 };
 
 static int gfx_v6_0_early_init(void *handle)
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to