diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 46 | 
1 files changed, 39 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c index f0f00466b59f..e9091ebfe230 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c @@ -924,6 +924,43 @@ error:  	return r;  } +int amdgpu_mes_set_shader_debugger(struct amdgpu_device *adev, +				uint64_t process_context_addr, +				uint32_t spi_gdbg_per_vmid_cntl, +				const uint32_t *tcp_watch_cntl, +				uint32_t flags, +				bool trap_en) +{ +	struct mes_misc_op_input op_input = {0}; +	int r; + +	if (!adev->mes.funcs->misc_op) { +		DRM_ERROR("mes set shader debugger is not supported!\n"); +		return -EINVAL; +	} + +	op_input.op = MES_MISC_OP_SET_SHADER_DEBUGGER; +	op_input.set_shader_debugger.process_context_addr = process_context_addr; +	op_input.set_shader_debugger.flags.u32all = flags; +	op_input.set_shader_debugger.spi_gdbg_per_vmid_cntl = spi_gdbg_per_vmid_cntl; +	memcpy(op_input.set_shader_debugger.tcp_watch_cntl, tcp_watch_cntl, +			sizeof(op_input.set_shader_debugger.tcp_watch_cntl)); + +	if (((adev->mes.sched_version & AMDGPU_MES_API_VERSION_MASK) >> +			AMDGPU_MES_API_VERSION_SHIFT) >= 14) +		op_input.set_shader_debugger.trap_en = trap_en; + +	amdgpu_mes_lock(&adev->mes); + +	r = adev->mes.funcs->misc_op(&adev->mes, &op_input); +	if (r) +		DRM_ERROR("failed to set_shader_debugger\n"); + +	amdgpu_mes_unlock(&adev->mes); + +	return r; +} +  static void  amdgpu_mes_ring_to_queue_props(struct amdgpu_device *adev,  			       struct amdgpu_ring *ring, @@ -1305,14 +1342,9 @@ static int amdgpu_mes_test_queues(struct amdgpu_ring **added_rings)  		if (!ring)  			continue; -		r = amdgpu_ring_test_ring(ring); -		if (r) { -			DRM_DEV_ERROR(ring->adev->dev, -				      "ring %s test failed (%d)\n", -				      ring->name, r); +		r = amdgpu_ring_test_helper(ring); +		if (r)  			return r; -		} else -			DRM_INFO("ring %s test pass\n", ring->name);  		r = amdgpu_ring_test_ib(ring, 1000 * 10);  		if (r) {  | 
