aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
diff options
context:
space:
mode:
authorKen Wang <Qingqing.Wang@amd.com>2016-03-18 03:08:49 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:53:35 -0400
commit7014285ade54bae2fe03aa397aa45846a0cd3e31 (patch)
treec006fa04728f5049b1675b9113ff910468582296 /drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
parent536fbf946cf84ff60cdef471c23ab96058e62f39 (diff)
drm/amdgpu: add 64bit wb functions
Newer asics need 64 bit writeback slots. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Ken Wang <Qingqing.Wang@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/amdgpu_ring.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index c9b536f4b019..bfd4022210ed 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -182,16 +182,32 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
182 return r; 182 return r;
183 } 183 }
184 184
185 r = amdgpu_wb_get(adev, &ring->rptr_offs); 185 if (ring->funcs->support_64bit_ptrs) {
186 if (r) { 186 r = amdgpu_wb_get_64bit(adev, &ring->rptr_offs);
187 dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r); 187 if (r) {
188 return r; 188 dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
189 } 189 return r;
190 }
191
192 r = amdgpu_wb_get_64bit(adev, &ring->wptr_offs);
193 if (r) {
194 dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
195 return r;
196 }
197
198 } else {
199 r = amdgpu_wb_get(adev, &ring->rptr_offs);
200 if (r) {
201 dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
202 return r;
203 }
204
205 r = amdgpu_wb_get(adev, &ring->wptr_offs);
206 if (r) {
207 dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
208 return r;
209 }
190 210
191 r = amdgpu_wb_get(adev, &ring->wptr_offs);
192 if (r) {
193 dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
194 return r;
195 } 211 }
196 212
197 r = amdgpu_wb_get(adev, &ring->fence_offs); 213 r = amdgpu_wb_get(adev, &ring->fence_offs);
@@ -256,10 +272,18 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
256{ 272{
257 ring->ready = false; 273 ring->ready = false;
258 274
259 amdgpu_wb_free(ring->adev, ring->cond_exe_offs); 275 if (ring->funcs->support_64bit_ptrs) {
260 amdgpu_wb_free(ring->adev, ring->fence_offs); 276 amdgpu_wb_free_64bit(ring->adev, ring->cond_exe_offs);
261 amdgpu_wb_free(ring->adev, ring->rptr_offs); 277 amdgpu_wb_free_64bit(ring->adev, ring->fence_offs);
262 amdgpu_wb_free(ring->adev, ring->wptr_offs); 278 amdgpu_wb_free_64bit(ring->adev, ring->rptr_offs);
279 amdgpu_wb_free_64bit(ring->adev, ring->wptr_offs);
280 } else {
281 amdgpu_wb_free(ring->adev, ring->cond_exe_offs);
282 amdgpu_wb_free(ring->adev, ring->fence_offs);
283 amdgpu_wb_free(ring->adev, ring->rptr_offs);
284 amdgpu_wb_free(ring->adev, ring->wptr_offs);
285 }
286
263 287
264 amdgpu_bo_free_kernel(&ring->ring_obj, 288 amdgpu_bo_free_kernel(&ring->ring_obj,
265 &ring->gpu_addr, 289 &ring->gpu_addr,