aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorXiangliang.Yu <Xiangliang.Yu@amd.com>2017-11-10 01:23:38 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-12-06 12:47:20 -0500
commit75737cb4eb78c7f185e4700b4aa20cf7a3381aca (patch)
treec2131dbc13b6d127a5fc82351cd4364c0839923d /drivers/gpu/drm/amd/amdgpu
parentadd526b34a8e183d9df14f1acaaffae31bbf52d0 (diff)
drm/amdgpu/gfx8: Fix compute ring failure after resetting
Do ring clear before ring test, otherwise compute ring test will fail after gpu resetting. Still can't find the root cause, just workaround it. Signed-off-by: Xiangliang.Yu <Xiangliang.Yu@amd.com> Acked-by: Monk Liu <Monk.Liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 2ddf126614da..96a3345e872e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -4877,9 +4877,6 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
4877 /* reset MQD to a clean status */ 4877 /* reset MQD to a clean status */
4878 if (adev->gfx.mec.mqd_backup[mqd_idx]) 4878 if (adev->gfx.mec.mqd_backup[mqd_idx])
4879 memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation)); 4879 memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation));
4880 /* reset ring buffer */
4881 ring->wptr = 0;
4882 amdgpu_ring_clear_ring(ring);
4883 } else { 4880 } else {
4884 amdgpu_ring_clear_ring(ring); 4881 amdgpu_ring_clear_ring(ring);
4885 } 4882 }
@@ -4954,6 +4951,13 @@ static int gfx_v8_0_kiq_resume(struct amdgpu_device *adev)
4954 /* Test KCQs */ 4951 /* Test KCQs */
4955 for (i = 0; i < adev->gfx.num_compute_rings; i++) { 4952 for (i = 0; i < adev->gfx.num_compute_rings; i++) {
4956 ring = &adev->gfx.compute_ring[i]; 4953 ring = &adev->gfx.compute_ring[i];
4954 if (adev->in_gpu_reset) {
4955 /* move reset ring buffer to here to workaround
4956 * compute ring test failed
4957 */
4958 ring->wptr = 0;
4959 amdgpu_ring_clear_ring(ring);
4960 }
4957 ring->ready = true; 4961 ring->ready = true;
4958 r = amdgpu_ring_test_ring(ring); 4962 r = amdgpu_ring_test_ring(ring);
4959 if (r) 4963 if (r)