drm/amdgpu: detect timeout error when deactivating hqd
Handle HQD deactivation timeouts instead of ignoring them. Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> Acked-by: Christian König <christian.koenig@amd.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
34130fb149
commit
bf13ed6b46
|
@ -4984,6 +4984,7 @@ static int gfx_v8_0_mqd_commit(struct amdgpu_ring *ring)
|
|||
|
||||
static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
|
||||
{
|
||||
int r = 0;
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct vi_mqd *mqd = ring->mqd_ptr;
|
||||
int mqd_idx = AMDGPU_MAX_COMPUTE_RINGS;
|
||||
|
@ -5000,7 +5001,11 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
|
|||
amdgpu_ring_clear_ring(ring);
|
||||
mutex_lock(&adev->srbm_mutex);
|
||||
vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0);
|
||||
gfx_v8_0_deactivate_hqd(adev, 1);
|
||||
r = gfx_v8_0_deactivate_hqd(adev, 1);
|
||||
if (r) {
|
||||
dev_err(adev->dev, "failed to deactivate ring %s\n", ring->name);
|
||||
goto out_unlock;
|
||||
}
|
||||
gfx_v8_0_mqd_commit(ring);
|
||||
vi_srbm_select(adev, 0, 0, 0, 0);
|
||||
mutex_unlock(&adev->srbm_mutex);
|
||||
|
@ -5008,7 +5013,11 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
|
|||
mutex_lock(&adev->srbm_mutex);
|
||||
vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0);
|
||||
gfx_v8_0_mqd_init(ring);
|
||||
gfx_v8_0_deactivate_hqd(adev, 1);
|
||||
r = gfx_v8_0_deactivate_hqd(adev, 1);
|
||||
if (r) {
|
||||
dev_err(adev->dev, "failed to deactivate ring %s\n", ring->name);
|
||||
goto out_unlock;
|
||||
}
|
||||
gfx_v8_0_mqd_commit(ring);
|
||||
vi_srbm_select(adev, 0, 0, 0, 0);
|
||||
mutex_unlock(&adev->srbm_mutex);
|
||||
|
@ -5017,7 +5026,12 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
|
|||
memcpy(adev->gfx.mec.mqd_backup[mqd_idx], mqd, sizeof(*mqd));
|
||||
}
|
||||
|
||||
return 0;
|
||||
return r;
|
||||
|
||||
out_unlock:
|
||||
vi_srbm_select(adev, 0, 0, 0, 0);
|
||||
mutex_unlock(&adev->srbm_mutex);
|
||||
return r;
|
||||
}
|
||||
|
||||
static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
|
||||
|
|
Loading…
Reference in New Issue