Lines Matching full:pipe
20 struct lima_sched_pipe *pipe; member
62 return f->pipe->base.name; in lima_fence_get_timeline_name()
86 static struct lima_fence *lima_fence_create(struct lima_sched_pipe *pipe) in lima_fence_create() argument
94 fence->pipe = pipe; in lima_fence_create()
95 dma_fence_init(&fence->base, &lima_fence_ops, &pipe->fence_lock, in lima_fence_create()
96 pipe->fence_context, ++pipe->fence_seqno); in lima_fence_create()
161 int lima_sched_context_init(struct lima_sched_pipe *pipe, in lima_sched_context_init() argument
165 struct drm_gpu_scheduler *sched = &pipe->base; in lima_sched_context_init()
171 void lima_sched_context_fini(struct lima_sched_pipe *pipe, in lima_sched_context_fini() argument
223 struct lima_sched_pipe *pipe = to_lima_pipe(job->sched); in lima_sched_run_job() local
224 struct lima_device *ldev = pipe->ldev; in lima_sched_run_job()
233 fence = lima_fence_create(pipe); in lima_sched_run_job()
250 pipe->current_task = task; in lima_sched_run_job()
267 for (i = 0; i < pipe->num_l2_cache; i++) in lima_sched_run_job()
268 lima_l2_cache_flush(pipe->l2_cache[i]); in lima_sched_run_job()
270 lima_vm_put(pipe->current_vm); in lima_sched_run_job()
271 pipe->current_vm = lima_vm_get(task->vm); in lima_sched_run_job()
273 if (pipe->bcast_mmu) in lima_sched_run_job()
274 lima_mmu_switch_vm(pipe->bcast_mmu, pipe->current_vm); in lima_sched_run_job()
276 for (i = 0; i < pipe->num_mmu; i++) in lima_sched_run_job()
277 lima_mmu_switch_vm(pipe->mmu[i], pipe->current_vm); in lima_sched_run_job()
282 pipe->error = false; in lima_sched_run_job()
283 pipe->task_run(pipe, task); in lima_sched_run_job()
291 struct lima_sched_pipe *pipe = to_lima_pipe(task->base.sched); in lima_sched_build_error_task_list() local
292 struct lima_ip *ip = pipe->processor[0]; in lima_sched_build_error_task_list()
316 size = sizeof(struct lima_dump_chunk) + pipe->frame_size; in lima_sched_build_error_task_list()
349 chunk->size = pipe->frame_size; in lima_sched_build_error_task_list()
350 memcpy(chunk + 1, task->frame, pipe->frame_size); in lima_sched_build_error_task_list()
418 struct lima_sched_pipe *pipe = to_lima_pipe(job->sched); in lima_sched_timedout_job() local
420 struct lima_device *ldev = pipe->ldev; in lima_sched_timedout_job()
422 if (!pipe->error) in lima_sched_timedout_job()
425 drm_sched_stop(&pipe->base, &task->base); in lima_sched_timedout_job()
431 pipe->task_error(pipe); in lima_sched_timedout_job()
433 if (pipe->bcast_mmu) in lima_sched_timedout_job()
434 lima_mmu_page_fault_resume(pipe->bcast_mmu); in lima_sched_timedout_job()
438 for (i = 0; i < pipe->num_mmu; i++) in lima_sched_timedout_job()
439 lima_mmu_page_fault_resume(pipe->mmu[i]); in lima_sched_timedout_job()
442 lima_vm_put(pipe->current_vm); in lima_sched_timedout_job()
443 pipe->current_vm = NULL; in lima_sched_timedout_job()
444 pipe->current_task = NULL; in lima_sched_timedout_job()
448 drm_sched_resubmit_jobs(&pipe->base); in lima_sched_timedout_job()
449 drm_sched_start(&pipe->base, true); in lima_sched_timedout_job()
455 struct lima_sched_pipe *pipe = to_lima_pipe(job->sched); in lima_sched_free_job() local
466 kmem_cache_free(pipe->task_slab, task); in lima_sched_free_job()
478 struct lima_sched_pipe *pipe = in lima_sched_recover_work() local
482 for (i = 0; i < pipe->num_l2_cache; i++) in lima_sched_recover_work()
483 lima_l2_cache_flush(pipe->l2_cache[i]); in lima_sched_recover_work()
485 if (pipe->bcast_mmu) { in lima_sched_recover_work()
486 lima_mmu_flush_tlb(pipe->bcast_mmu); in lima_sched_recover_work()
488 for (i = 0; i < pipe->num_mmu; i++) in lima_sched_recover_work()
489 lima_mmu_flush_tlb(pipe->mmu[i]); in lima_sched_recover_work()
492 if (pipe->task_recover(pipe)) in lima_sched_recover_work()
493 drm_sched_fault(&pipe->base); in lima_sched_recover_work()
496 int lima_sched_pipe_init(struct lima_sched_pipe *pipe, const char *name) in lima_sched_pipe_init() argument
501 pipe->fence_context = dma_fence_context_alloc(1); in lima_sched_pipe_init()
502 spin_lock_init(&pipe->fence_lock); in lima_sched_pipe_init()
504 INIT_WORK(&pipe->recover_work, lima_sched_recover_work); in lima_sched_pipe_init()
506 return drm_sched_init(&pipe->base, &lima_sched_ops, 1, in lima_sched_pipe_init()
511 void lima_sched_pipe_fini(struct lima_sched_pipe *pipe) in lima_sched_pipe_fini() argument
513 drm_sched_fini(&pipe->base); in lima_sched_pipe_fini()
516 void lima_sched_pipe_task_done(struct lima_sched_pipe *pipe) in lima_sched_pipe_task_done() argument
518 struct lima_sched_task *task = pipe->current_task; in lima_sched_pipe_task_done()
519 struct lima_device *ldev = pipe->ldev; in lima_sched_pipe_task_done()
521 if (pipe->error) { in lima_sched_pipe_task_done()
523 schedule_work(&pipe->recover_work); in lima_sched_pipe_task_done()
525 drm_sched_fault(&pipe->base); in lima_sched_pipe_task_done()
527 pipe->task_fini(pipe); in lima_sched_pipe_task_done()