aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2017-03-21 06:48:45 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:55:38 -0400
commite09706f46ebecf3ae39996772c0ece12e91d8c45 (patch)
treeb73ae389eb1d2dc88cc338aa46d7ad6f80b9edf8
parentb4d6126d1eeee1d5e58c6b17117b778bc7548389 (diff)
drm/amdgpu:fix ring init sequence
ring->buf_mask need be set prior to ring_clear_ring invoke and fix ring_clear_ring as well which should use buf_mask instead of ptr_mask 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.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h2
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index bfd4022210ed..783d52a007ea 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -235,6 +235,9 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
235 ring->ring_size = roundup_pow_of_two(max_dw * 4 * 235 ring->ring_size = roundup_pow_of_two(max_dw * 4 *
236 amdgpu_sched_hw_submission); 236 amdgpu_sched_hw_submission);
237 237
238 ring->buf_mask = (ring->ring_size / 4) - 1;
239 ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
240 0xffffffffffffffff : ring->buf_mask;
238 /* Allocate ring buffer */ 241 /* Allocate ring buffer */
239 if (ring->ring_obj == NULL) { 242 if (ring->ring_obj == NULL) {
240 r = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE, 243 r = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
@@ -248,9 +251,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
248 } 251 }
249 amdgpu_ring_clear_ring(ring); 252 amdgpu_ring_clear_ring(ring);
250 } 253 }
251 ring->buf_mask = (ring->ring_size / 4) - 1;
252 ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
253 0xffffffffffffffff : ring->buf_mask;
254 254
255 ring->max_dw = max_dw; 255 ring->max_dw = max_dw;
256 256
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
index 9bc453f1855c..63e56398ca9a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
@@ -195,7 +195,7 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring);
195static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring) 195static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring)
196{ 196{
197 int i = 0; 197 int i = 0;
198 while (i <= ring->ptr_mask) 198 while (i <= ring->buf_mask)
199 ring->ring[i++] = ring->funcs->nop; 199 ring->ring[i++] = ring->funcs->nop;
200 200
201} 201}