Commit 15fd09a0 authored by Somalapuram Amaranath's avatar Somalapuram Amaranath Committed by Alex Deucher
Browse files

drm/amdgpu: add reset register dump trace on GPU



Dump the list of register values to trace event on GPU reset.

Signed-off-by: default avatarSomalapuram Amaranath <Amaranath.Somalapuram@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 5ce5a584
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -4638,6 +4638,22 @@ int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
	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,
			 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 */
	tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
				    reset_list);
	amdgpu_reset_reg_dumps(tmp_adev);
	r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
	/* If reset handler not implemented, continue; otherwise return */
	if (r == -ENOSYS)
+16 −0
Original line number Diff line number Diff line
@@ -536,6 +536,22 @@ TRACE_EVENT(amdgpu_ib_pipe_sync,
		      __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
#endif