diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 9 |
3 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 2c2f2349dd82..49adb451c3bc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -788,6 +788,9 @@ struct amdgpu_ring { | |||
788 | struct amdgpu_ctx *current_ctx; | 788 | struct amdgpu_ctx *current_ctx; |
789 | enum amdgpu_ring_type type; | 789 | enum amdgpu_ring_type type; |
790 | char name[16]; | 790 | char name[16]; |
791 | unsigned cond_exe_offs; | ||
792 | u64 cond_exe_gpu_addr; | ||
793 | volatile u32 *cond_exe_cpu_addr; | ||
791 | }; | 794 | }; |
792 | 795 | ||
793 | /* | 796 | /* |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c index 8443cea6821a..a15d690d9089 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | |||
@@ -160,6 +160,9 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
160 | amdgpu_ring_emit_hdp_flush(ring); | 160 | amdgpu_ring_emit_hdp_flush(ring); |
161 | } | 161 | } |
162 | 162 | ||
163 | /* always set cond_exec_polling to CONTINUE */ | ||
164 | *ring->cond_exe_cpu_addr = 1; | ||
165 | |||
163 | old_ctx = ring->current_ctx; | 166 | old_ctx = ring->current_ctx; |
164 | for (i = 0; i < num_ibs; ++i) { | 167 | for (i = 0; i < num_ibs; ++i) { |
165 | ib = &ibs[i]; | 168 | ib = &ibs[i]; |
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) { |