diff options
author | Monk Liu <monk.liu@amd.com> | 2016-01-14 05:08:16 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-05-02 15:09:17 -0400 |
commit | 128cff1af68689cf4d85d3ba948c86a194dee30f (patch) | |
tree | 70a6e6963ea61a58fa1500d5d571e4a52263d78e /drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | |
parent | 8e9fbeb522fa3043dc65ef0e383af28843950799 (diff) |
drm/amdgpu: support cond exec
This adds the groundwork for conditional execution on
SDMA which is necessary for preemption.
Signed-off-by: Monk Liu <monk.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@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.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index 972eed2ef787..dd79243d0a37 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | |||
@@ -267,6 +267,15 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, | |||
267 | } | 267 | } |
268 | ring->next_rptr_gpu_addr = adev->wb.gpu_addr + (ring->next_rptr_offs * 4); | 268 | ring->next_rptr_gpu_addr = adev->wb.gpu_addr + (ring->next_rptr_offs * 4); |
269 | ring->next_rptr_cpu_addr = &adev->wb.wb[ring->next_rptr_offs]; | 269 | ring->next_rptr_cpu_addr = &adev->wb.wb[ring->next_rptr_offs]; |
270 | |||
271 | r = amdgpu_wb_get(adev, &ring->cond_exe_offs); | ||
272 | if (r) { | ||
273 | dev_err(adev->dev, "(%d) ring cond_exec_polling wb alloc failed\n", r); | ||
274 | return r; | ||
275 | } | ||
276 | ring->cond_exe_gpu_addr = adev->wb.gpu_addr + (ring->cond_exe_offs * 4); | ||
277 | ring->cond_exe_cpu_addr = &adev->wb.wb[ring->cond_exe_offs]; | ||
278 | |||
270 | spin_lock_init(&ring->fence_lock); | 279 | spin_lock_init(&ring->fence_lock); |
271 | r = amdgpu_fence_driver_start_ring(ring, irq_src, irq_type); | 280 | r = amdgpu_fence_driver_start_ring(ring, irq_src, irq_type); |
272 | if (r) { | 281 | if (r) { |