diff options
author | Monk Liu <Monk.Liu@amd.com> | 2017-02-08 03:51:06 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-03-29 23:53:14 -0400 |
commit | f6bd79424cd02f5726c294916d9afb3cf031080c (patch) | |
tree | f4ed9e0b213d631532ec7b49d66b16f34fcc6970 | |
parent | c79ecfbf5bba298ab5716536fa9cb68533bb5c26 (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>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 1 |
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); |