drm/amdgpu: add reset register dump trace on GPU
Dump the list of register values to trace event on GPU reset. Signed-off-by: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
5ce5a584cb
commit
15fd09a05a
@@ -4638,6 +4638,22 @@ int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int amdgpu_reset_reg_dumps(struct amdgpu_device *adev)
|
||||||
|
{
|
||||||
|
uint32_t reg_value;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
lockdep_assert_held(&adev->reset_sem);
|
||||||
|
dump_stack();
|
||||||
|
|
||||||
|
for (i = 0; i < adev->num_regs; i++) {
|
||||||
|
reg_value = RREG32(adev->reset_dump_reg_list[i]);
|
||||||
|
trace_amdgpu_reset_reg_dumps(adev->reset_dump_reg_list[i], reg_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int amdgpu_do_asic_reset(struct list_head *device_list_handle,
|
int amdgpu_do_asic_reset(struct list_head *device_list_handle,
|
||||||
struct amdgpu_reset_context *reset_context)
|
struct amdgpu_reset_context *reset_context)
|
||||||
{
|
{
|
||||||
@@ -4648,6 +4664,7 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
|
|||||||
/* Try reset handler method first */
|
/* Try reset handler method first */
|
||||||
tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
|
tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
|
||||||
reset_list);
|
reset_list);
|
||||||
|
amdgpu_reset_reg_dumps(tmp_adev);
|
||||||
r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
|
r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
|
||||||
/* If reset handler not implemented, continue; otherwise return */
|
/* If reset handler not implemented, continue; otherwise return */
|
||||||
if (r == -ENOSYS)
|
if (r == -ENOSYS)
|
||||||
|
|||||||
@@ -536,6 +536,22 @@ TRACE_EVENT(amdgpu_ib_pipe_sync,
|
|||||||
__entry->seqno)
|
__entry->seqno)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TRACE_EVENT(amdgpu_reset_reg_dumps,
|
||||||
|
TP_PROTO(uint32_t address, uint32_t value),
|
||||||
|
TP_ARGS(address, value),
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
__field(uint32_t, address)
|
||||||
|
__field(uint32_t, value)
|
||||||
|
),
|
||||||
|
TP_fast_assign(
|
||||||
|
__entry->address = address;
|
||||||
|
__entry->value = value;
|
||||||
|
),
|
||||||
|
TP_printk("amdgpu register dump 0x%x: 0x%x",
|
||||||
|
__entry->address,
|
||||||
|
__entry->value)
|
||||||
|
);
|
||||||
|
|
||||||
#undef AMDGPU_JOB_GET_TIMELINE_NAME
|
#undef AMDGPU_JOB_GET_TIMELINE_NAME
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user