Lines Matching refs:ring
118 int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, in amdgpu_ib_schedule() argument
122 struct amdgpu_device *adev = ring->adev; in amdgpu_ib_schedule()
148 if (!ring->ready) { in amdgpu_ib_schedule()
149 dev_err(adev->dev, "couldn't schedule ib on ring <%s>\n", ring->name); in amdgpu_ib_schedule()
158 alloc_size = ring->funcs->emit_frame_size + num_ibs * in amdgpu_ib_schedule()
159 ring->funcs->emit_ib_size; in amdgpu_ib_schedule()
161 r = amdgpu_ring_alloc(ring, alloc_size); in amdgpu_ib_schedule()
167 need_ctx_switch = ring->current_ctx != fence_ctx; in amdgpu_ib_schedule()
168 if (ring->funcs->emit_pipeline_sync && job && in amdgpu_ib_schedule()
171 amdgpu_vm_need_pipeline_sync(ring, job))) { in amdgpu_ib_schedule()
176 if (ring->funcs->insert_start) in amdgpu_ib_schedule()
177 ring->funcs->insert_start(ring); in amdgpu_ib_schedule()
180 r = amdgpu_vm_flush(ring, job, need_pipe_sync); in amdgpu_ib_schedule()
182 amdgpu_ring_undo(ring); in amdgpu_ib_schedule()
187 if (job && ring->funcs->init_cond_exec) in amdgpu_ib_schedule()
188 patch_offset = amdgpu_ring_init_cond_exec(ring); in amdgpu_ib_schedule()
194 if (ring->funcs->emit_hdp_flush) in amdgpu_ib_schedule()
195 amdgpu_ring_emit_hdp_flush(ring); in amdgpu_ib_schedule()
197 amdgpu_asic_flush_hdp(adev, ring); in amdgpu_ib_schedule()
200 skip_preamble = ring->current_ctx == fence_ctx; in amdgpu_ib_schedule()
201 if (job && ring->funcs->emit_cntxcntl) { in amdgpu_ib_schedule()
206 amdgpu_ring_emit_cntxcntl(ring, status); in amdgpu_ib_schedule()
219 amdgpu_ring_emit_ib(ring, ib, job ? job->vmid : 0, in amdgpu_ib_schedule()
224 if (ring->funcs->emit_tmz) in amdgpu_ib_schedule()
225 amdgpu_ring_emit_tmz(ring, false); in amdgpu_ib_schedule()
230 amdgpu_asic_invalidate_hdp(adev, ring); in amdgpu_ib_schedule()
237 amdgpu_ring_emit_fence(ring, job->uf_addr, job->uf_sequence, in amdgpu_ib_schedule()
241 r = amdgpu_fence_emit(ring, f, fence_flags); in amdgpu_ib_schedule()
245 amdgpu_vmid_reset(adev, ring->funcs->vmhub, job->vmid); in amdgpu_ib_schedule()
246 amdgpu_ring_undo(ring); in amdgpu_ib_schedule()
250 if (ring->funcs->insert_end) in amdgpu_ib_schedule()
251 ring->funcs->insert_end(ring); in amdgpu_ib_schedule()
253 if (patch_offset != ~0 && ring->funcs->patch_cond_exec) in amdgpu_ib_schedule()
254 amdgpu_ring_patch_cond_exec(ring, patch_offset); in amdgpu_ib_schedule()
256 ring->current_ctx = fence_ctx; in amdgpu_ib_schedule()
257 if (vm && ring->funcs->emit_switch_buffer) in amdgpu_ib_schedule()
258 amdgpu_ring_emit_switch_buffer(ring); in amdgpu_ib_schedule()
259 amdgpu_ring_commit(ring); in amdgpu_ib_schedule()
346 struct amdgpu_ring *ring = adev->rings[i]; in amdgpu_ib_ring_tests() local
349 if (!ring || !ring->ready) in amdgpu_ib_ring_tests()
353 if (ring->funcs->type == AMDGPU_RING_TYPE_UVD || in amdgpu_ib_ring_tests()
354 ring->funcs->type == AMDGPU_RING_TYPE_VCE || in amdgpu_ib_ring_tests()
355 ring->funcs->type == AMDGPU_RING_TYPE_UVD_ENC || in amdgpu_ib_ring_tests()
356 ring->funcs->type == AMDGPU_RING_TYPE_VCN_DEC || in amdgpu_ib_ring_tests()
357 ring->funcs->type == AMDGPU_RING_TYPE_VCN_ENC || in amdgpu_ib_ring_tests()
358 ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG) in amdgpu_ib_ring_tests()
363 r = amdgpu_ring_test_ib(ring, tmo); in amdgpu_ib_ring_tests()
365 ring->ready = false; in amdgpu_ib_ring_tests()
367 if (ring == &adev->gfx.gfx_ring[0]) { in amdgpu_ib_ring_tests()