diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 50 |
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, |