Lines Matching full:vc4
40 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_queue_hangcheck() local
42 mod_timer(&vc4->hangcheck.timer, in vc4_queue_hangcheck()
72 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_get_hang_state_ioctl() local
77 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_get_hang_state_ioctl()
78 kernel_state = vc4->hang_state; in vc4_get_hang_state_ioctl()
80 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_get_hang_state_ioctl()
90 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_get_hang_state_ioctl()
94 vc4->hang_state = NULL; in vc4_get_hang_state_ioctl()
95 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_get_hang_state_ioctl()
144 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_save_hang_state() local
158 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_save_hang_state()
159 exec[0] = vc4_first_bin_job(vc4); in vc4_save_hang_state()
160 exec[1] = vc4_first_render_job(vc4); in vc4_save_hang_state()
162 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_save_hang_state()
182 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_save_hang_state()
220 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_save_hang_state()
268 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_save_hang_state()
269 if (vc4->hang_state) { in vc4_save_hang_state()
270 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_save_hang_state()
273 vc4->hang_state = kernel_state; in vc4_save_hang_state()
274 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_save_hang_state()
281 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_reset() local
285 mutex_lock(&vc4->power_lock); in vc4_reset()
286 if (vc4->power_refcount) { in vc4_reset()
290 pm_runtime_put_sync_suspend(&vc4->v3d->pdev->dev); in vc4_reset()
291 pm_runtime_get_sync(&vc4->v3d->pdev->dev); in vc4_reset()
293 mutex_unlock(&vc4->power_lock); in vc4_reset()
307 struct vc4_dev *vc4 = in vc4_reset_work() local
310 vc4_save_hang_state(vc4->dev); in vc4_reset_work()
312 vc4_reset(vc4->dev); in vc4_reset_work()
318 struct vc4_dev *vc4 = from_timer(vc4, t, hangcheck.timer); in vc4_hangcheck_elapsed() local
319 struct drm_device *dev = vc4->dev; in vc4_hangcheck_elapsed()
324 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_hangcheck_elapsed()
326 bin_exec = vc4_first_bin_job(vc4); in vc4_hangcheck_elapsed()
327 render_exec = vc4_first_render_job(vc4); in vc4_hangcheck_elapsed()
331 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_hangcheck_elapsed()
347 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_hangcheck_elapsed()
352 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_hangcheck_elapsed()
358 schedule_work(&vc4->hangcheck.reset_work); in vc4_hangcheck_elapsed()
364 struct vc4_dev *vc4 = to_vc4_dev(dev); in submit_cl() local
377 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_wait_for_seqno() local
382 if (vc4->finished_seqno >= seqno) in vc4_wait_for_seqno()
392 prepare_to_wait(&vc4->job_wait_queue, &wait, in vc4_wait_for_seqno()
401 if (vc4->finished_seqno >= seqno) in vc4_wait_for_seqno()
415 finish_wait(&vc4->job_wait_queue, &wait); in vc4_wait_for_seqno()
424 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_flush_caches() local
443 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_flush_texture_caches() local
461 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_submit_next_bin_job() local
465 exec = vc4_first_bin_job(vc4); in vc4_submit_next_bin_job()
474 if (exec->perfmon && vc4->active_perfmon != exec->perfmon) in vc4_submit_next_bin_job()
475 vc4_perfmon_start(vc4, exec->perfmon); in vc4_submit_next_bin_job()
486 next = vc4_first_bin_job(vc4); in vc4_submit_next_bin_job()
501 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_submit_next_render_job() local
502 struct vc4_exec_info *exec = vc4_first_render_job(vc4); in vc4_submit_next_render_job()
521 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_move_job_to_render() local
522 bool was_empty = list_empty(&vc4->render_job_list); in vc4_move_job_to_render()
524 list_move_tail(&exec->head, &vc4->render_job_list); in vc4_move_job_to_render()
575 * to vc4, so we don't attach dma-buf fences to them.
662 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_queue_submit() local
673 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_queue_submit()
675 seqno = ++vc4->emit_seqno; in vc4_queue_submit()
678 dma_fence_init(&fence->base, &vc4_fence_ops, &vc4->job_lock, in vc4_queue_submit()
679 vc4->dma_fence_context, exec->seqno); in vc4_queue_submit()
690 list_add_tail(&exec->head, &vc4->bin_job_list); in vc4_queue_submit()
697 renderjob = vc4_first_render_job(vc4); in vc4_queue_submit()
698 if (vc4_first_bin_job(vc4) == exec && in vc4_queue_submit()
704 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_queue_submit()
930 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_complete_exec() local
960 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_complete_exec()
961 vc4->bin_alloc_used &= ~exec->bin_slots; in vc4_complete_exec()
962 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_complete_exec()
967 mutex_lock(&vc4->power_lock); in vc4_complete_exec()
968 if (--vc4->power_refcount == 0) { in vc4_complete_exec()
969 pm_runtime_mark_last_busy(&vc4->v3d->pdev->dev); in vc4_complete_exec()
970 pm_runtime_put_autosuspend(&vc4->v3d->pdev->dev); in vc4_complete_exec()
972 mutex_unlock(&vc4->power_lock); in vc4_complete_exec()
978 vc4_job_handle_completed(struct vc4_dev *vc4) in vc4_job_handle_completed() argument
983 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_job_handle_completed()
984 while (!list_empty(&vc4->job_done_list)) { in vc4_job_handle_completed()
986 list_first_entry(&vc4->job_done_list, in vc4_job_handle_completed()
990 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_job_handle_completed()
991 vc4_complete_exec(vc4->dev, exec); in vc4_job_handle_completed()
992 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_job_handle_completed()
995 list_for_each_entry_safe(cb, cb_temp, &vc4->seqno_cb_list, work.entry) { in vc4_job_handle_completed()
996 if (cb->seqno <= vc4->finished_seqno) { in vc4_job_handle_completed()
1002 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_job_handle_completed()
1016 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_queue_seqno_cb() local
1023 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_queue_seqno_cb()
1024 if (seqno > vc4->finished_seqno) { in vc4_queue_seqno_cb()
1026 list_add_tail(&cb->work.entry, &vc4->seqno_cb_list); in vc4_queue_seqno_cb()
1030 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_queue_seqno_cb()
1042 struct vc4_dev *vc4 = in vc4_job_done_work() local
1045 vc4_job_handle_completed(vc4); in vc4_job_done_work()
1103 * vc4_submit_cl_ioctl() - Submits a job (frame) to the VC4.
1118 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_submit_cl_ioctl() local
1146 mutex_lock(&vc4->power_lock); in vc4_submit_cl_ioctl()
1147 if (vc4->power_refcount++ == 0) { in vc4_submit_cl_ioctl()
1148 ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev); in vc4_submit_cl_ioctl()
1150 mutex_unlock(&vc4->power_lock); in vc4_submit_cl_ioctl()
1151 vc4->power_refcount--; in vc4_submit_cl_ioctl()
1156 mutex_unlock(&vc4->power_lock); in vc4_submit_cl_ioctl()
1186 vc4->dma_fence_context)) { in vc4_submit_cl_ioctl()
1245 args->seqno = vc4->emit_seqno; in vc4_submit_cl_ioctl()
1250 vc4_complete_exec(vc4->dev, exec); in vc4_submit_cl_ioctl()
1258 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_gem_init() local
1260 vc4->dma_fence_context = dma_fence_context_alloc(1); in vc4_gem_init()
1262 INIT_LIST_HEAD(&vc4->bin_job_list); in vc4_gem_init()
1263 INIT_LIST_HEAD(&vc4->render_job_list); in vc4_gem_init()
1264 INIT_LIST_HEAD(&vc4->job_done_list); in vc4_gem_init()
1265 INIT_LIST_HEAD(&vc4->seqno_cb_list); in vc4_gem_init()
1266 spin_lock_init(&vc4->job_lock); in vc4_gem_init()
1268 INIT_WORK(&vc4->hangcheck.reset_work, vc4_reset_work); in vc4_gem_init()
1269 timer_setup(&vc4->hangcheck.timer, vc4_hangcheck_elapsed, 0); in vc4_gem_init()
1271 INIT_WORK(&vc4->job_done_work, vc4_job_done_work); in vc4_gem_init()
1273 mutex_init(&vc4->power_lock); in vc4_gem_init()
1275 INIT_LIST_HEAD(&vc4->purgeable.list); in vc4_gem_init()
1276 mutex_init(&vc4->purgeable.lock); in vc4_gem_init()
1282 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_gem_destroy() local
1287 WARN_ON(vc4->emit_seqno != vc4->finished_seqno); in vc4_gem_destroy()
1292 if (vc4->bin_bo) { in vc4_gem_destroy()
1293 drm_gem_object_put_unlocked(&vc4->bin_bo->base.base); in vc4_gem_destroy()
1294 vc4->bin_bo = NULL; in vc4_gem_destroy()
1297 if (vc4->hang_state) in vc4_gem_destroy()
1298 vc4_free_hang_state(dev, vc4->hang_state); in vc4_gem_destroy()