diff options
author | Monk Liu <Monk.Liu@amd.com> | 2017-03-21 06:48:45 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-03-29 23:55:38 -0400 |
commit | e09706f46ebecf3ae39996772c0ece12e91d8c45 (patch) | |
tree | b73ae389eb1d2dc88cc338aa46d7ad6f80b9edf8 | |
parent | b4d6126d1eeee1d5e58c6b17117b778bc7548389 (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.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 |
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); | |||
195 | static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring) | 195 | static 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 | } |