aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2017-02-08 03:51:06 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:53:14 -0400
commitf6bd79424cd02f5726c294916d9afb3cf031080c (patch)
treef4ed9e0b213d631532ec7b49d66b16f34fcc6970 /drivers/gpu/drm/amd/amdgpu
parentc79ecfbf5bba298ab5716536fa9cb68533bb5c26 (diff)
drm/amdgpu:use clear_ring to clr RB
In resume routine, we need clr RB prior to the ring test of engine, otherwise some engine hang duplicated during GPU reset. Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@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/amdgpu_ring.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c1
3 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 7c842b7f1004..cead88ac3788 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -230,7 +230,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
230 dev_err(adev->dev, "(%d) ring create failed\n", r); 230 dev_err(adev->dev, "(%d) ring create failed\n", r);
231 return r; 231 return r;
232 } 232 }
233 memset((void *)ring->ring, 0, ring->ring_size); 233 amdgpu_ring_clear_ring(ring);
234 } 234 }
235 ring->ptr_mask = (ring->ring_size / 4) - 1; 235 ring->ptr_mask = (ring->ring_size / 4) - 1;
236 ring->max_dw = max_dw; 236 ring->max_dw = max_dw;
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index b2bfee3e5b67..e09dd5e5b58a 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -4515,6 +4515,7 @@ static int gfx_v8_0_cp_gfx_resume(struct amdgpu_device *adev)
4515 } 4515 }
4516 4516
4517 /* start the ring */ 4517 /* start the ring */
4518 amdgpu_ring_clear_ring(ring);
4518 gfx_v8_0_cp_gfx_start(adev); 4519 gfx_v8_0_cp_gfx_start(adev);
4519 ring->ready = true; 4520 ring->ready = true;
4520 r = amdgpu_ring_test_ring(ring); 4521 r = amdgpu_ring_test_ring(ring);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index 47e6f146aa25..1ac876fe3d5a 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -615,6 +615,7 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
615 615
616 for (i = 0; i < adev->sdma.num_instances; i++) { 616 for (i = 0; i < adev->sdma.num_instances; i++) {
617 ring = &adev->sdma.instance[i].ring; 617 ring = &adev->sdma.instance[i].ring;
618 amdgpu_ring_clear_ring(ring);
618 wb_offset = (ring->rptr_offs * 4); 619 wb_offset = (ring->rptr_offs * 4);
619 620
620 mutex_lock(&adev->srbm_mutex); 621 mutex_lock(&adev->srbm_mutex);