Lines Matching full:job

13  * jobs when bulk background jobs are queued up, we submit a new job
71 struct v3d_job *job = to_v3d_job(sched_job); in v3d_sched_job_free() local
73 v3d_job_cleanup(job); in v3d_sched_job_free()
109 struct v3d_cpu_job *job = to_cpu_job(sched_job); in v3d_cpu_job_free() local
111 v3d_timestamp_query_info_free(&job->timestamp_query, in v3d_cpu_job_free()
112 job->timestamp_query.count); in v3d_cpu_job_free()
114 v3d_performance_query_info_free(&job->performance_query, in v3d_cpu_job_free()
115 job->performance_query.count); in v3d_cpu_job_free()
117 v3d_job_cleanup(&job->base); in v3d_cpu_job_free()
121 v3d_switch_perfmon(struct v3d_dev *v3d, struct v3d_job *job) in v3d_switch_perfmon() argument
126 perfmon = job->perfmon; in v3d_switch_perfmon()
139 v3d_job_start_stats(struct v3d_job *job, enum v3d_queue queue) in v3d_job_start_stats() argument
141 struct v3d_dev *v3d = job->v3d; in v3d_job_start_stats()
142 struct v3d_file_priv *file = job->file->driver_priv; in v3d_job_start_stats()
163 * 3. Because next job can only be queued after the previous one has in v3d_job_start_stats()
197 v3d_job_update_stats(struct v3d_job *job, enum v3d_queue queue) in v3d_job_update_stats() argument
199 struct v3d_dev *v3d = job->v3d; in v3d_job_update_stats()
200 struct v3d_file_priv *file = job->file->driver_priv; in v3d_job_update_stats()
223 struct v3d_bin_job *job = to_bin_job(sched_job); in v3d_bin_job_run() local
224 struct v3d_dev *v3d = job->base.v3d; in v3d_bin_job_run()
229 if (unlikely(job->base.base.s_fence->finished.error)) { in v3d_bin_job_run()
240 v3d->bin_job = job; in v3d_bin_job_run()
242 * reuse the overflow attached to a previous job. in v3d_bin_job_run()
253 if (job->base.irq_fence) in v3d_bin_job_run()
254 dma_fence_put(job->base.irq_fence); in v3d_bin_job_run()
255 job->base.irq_fence = dma_fence_get(fence); in v3d_bin_job_run()
258 job->start, job->end); in v3d_bin_job_run()
260 v3d_job_start_stats(&job->base, V3D_BIN); in v3d_bin_job_run()
261 v3d_switch_perfmon(v3d, &job->base); in v3d_bin_job_run()
264 * Writing the end register is what starts the job. in v3d_bin_job_run()
266 if (job->qma) { in v3d_bin_job_run()
267 V3D_CORE_WRITE(0, V3D_CLE_CT0QMA, job->qma); in v3d_bin_job_run()
268 V3D_CORE_WRITE(0, V3D_CLE_CT0QMS, job->qms); in v3d_bin_job_run()
270 if (job->qts) { in v3d_bin_job_run()
273 job->qts); in v3d_bin_job_run()
275 V3D_CORE_WRITE(0, V3D_CLE_CT0QBA, job->start); in v3d_bin_job_run()
276 V3D_CORE_WRITE(0, V3D_CLE_CT0QEA, job->end); in v3d_bin_job_run()
283 struct v3d_render_job *job = to_render_job(sched_job); in v3d_render_job_run() local
284 struct v3d_dev *v3d = job->base.v3d; in v3d_render_job_run()
288 if (unlikely(job->base.base.s_fence->finished.error)) { in v3d_render_job_run()
293 v3d->render_job = job; in v3d_render_job_run()
307 if (job->base.irq_fence) in v3d_render_job_run()
308 dma_fence_put(job->base.irq_fence); in v3d_render_job_run()
309 job->base.irq_fence = dma_fence_get(fence); in v3d_render_job_run()
312 job->start, job->end); in v3d_render_job_run()
314 v3d_job_start_stats(&job->base, V3D_RENDER); in v3d_render_job_run()
315 v3d_switch_perfmon(v3d, &job->base); in v3d_render_job_run()
320 * Writing the end register is what starts the job. in v3d_render_job_run()
322 V3D_CORE_WRITE(0, V3D_CLE_CT1QBA, job->start); in v3d_render_job_run()
323 V3D_CORE_WRITE(0, V3D_CLE_CT1QEA, job->end); in v3d_render_job_run()
331 struct v3d_tfu_job *job = to_tfu_job(sched_job); in v3d_tfu_job_run() local
332 struct v3d_dev *v3d = job->base.v3d; in v3d_tfu_job_run()
336 if (unlikely(job->base.base.s_fence->finished.error)) { in v3d_tfu_job_run()
341 v3d->tfu_job = job; in v3d_tfu_job_run()
347 if (job->base.irq_fence) in v3d_tfu_job_run()
348 dma_fence_put(job->base.irq_fence); in v3d_tfu_job_run()
349 job->base.irq_fence = dma_fence_get(fence); in v3d_tfu_job_run()
353 v3d_job_start_stats(&job->base, V3D_TFU); in v3d_tfu_job_run()
355 V3D_WRITE(V3D_TFU_IIA(v3d->ver), job->args.iia); in v3d_tfu_job_run()
356 V3D_WRITE(V3D_TFU_IIS(v3d->ver), job->args.iis); in v3d_tfu_job_run()
357 V3D_WRITE(V3D_TFU_ICA(v3d->ver), job->args.ica); in v3d_tfu_job_run()
358 V3D_WRITE(V3D_TFU_IUA(v3d->ver), job->args.iua); in v3d_tfu_job_run()
359 V3D_WRITE(V3D_TFU_IOA(v3d->ver), job->args.ioa); in v3d_tfu_job_run()
361 V3D_WRITE(V3D_V7_TFU_IOC, job->args.v71.ioc); in v3d_tfu_job_run()
362 V3D_WRITE(V3D_TFU_IOS(v3d->ver), job->args.ios); in v3d_tfu_job_run()
363 V3D_WRITE(V3D_TFU_COEF0(v3d->ver), job->args.coef[0]); in v3d_tfu_job_run()
364 if (v3d->ver >= 71 || (job->args.coef[0] & V3D_TFU_COEF0_USECOEF)) { in v3d_tfu_job_run()
365 V3D_WRITE(V3D_TFU_COEF1(v3d->ver), job->args.coef[1]); in v3d_tfu_job_run()
366 V3D_WRITE(V3D_TFU_COEF2(v3d->ver), job->args.coef[2]); in v3d_tfu_job_run()
367 V3D_WRITE(V3D_TFU_COEF3(v3d->ver), job->args.coef[3]); in v3d_tfu_job_run()
369 /* ICFG kicks off the job. */ in v3d_tfu_job_run()
370 V3D_WRITE(V3D_TFU_ICFG(v3d->ver), job->args.icfg | V3D_TFU_ICFG_IOC); in v3d_tfu_job_run()
378 struct v3d_csd_job *job = to_csd_job(sched_job); in v3d_csd_job_run() local
379 struct v3d_dev *v3d = job->base.v3d; in v3d_csd_job_run()
384 if (unlikely(job->base.base.s_fence->finished.error)) { in v3d_csd_job_run()
389 v3d->csd_job = job; in v3d_csd_job_run()
397 if (job->base.irq_fence) in v3d_csd_job_run()
398 dma_fence_put(job->base.irq_fence); in v3d_csd_job_run()
399 job->base.irq_fence = dma_fence_get(fence); in v3d_csd_job_run()
403 v3d_job_start_stats(&job->base, V3D_CSD); in v3d_csd_job_run()
404 v3d_switch_perfmon(v3d, &job->base); in v3d_csd_job_run()
408 V3D_CORE_WRITE(0, csd_cfg0_reg + 4 * i, job->args.cfg[i]); in v3d_csd_job_run()
418 /* CFG0 write kicks off the job. */ in v3d_csd_job_run()
419 V3D_CORE_WRITE(0, csd_cfg0_reg, job->args.cfg[0]); in v3d_csd_job_run()
425 v3d_rewrite_csd_job_wg_counts_from_indirect(struct v3d_cpu_job *job) in v3d_rewrite_csd_job_wg_counts_from_indirect() argument
427 struct v3d_indirect_csd_info *indirect_csd = &job->indirect_csd; in v3d_rewrite_csd_job_wg_counts_from_indirect()
428 struct v3d_bo *bo = to_v3d_bo(job->base.bo[0]); in v3d_rewrite_csd_job_wg_counts_from_indirect()
430 struct drm_v3d_submit_csd *args = &indirect_csd->job->args; in v3d_rewrite_csd_job_wg_counts_from_indirect()
431 struct v3d_dev *v3d = job->base.v3d; in v3d_rewrite_csd_job_wg_counts_from_indirect()
470 v3d_timestamp_query(struct v3d_cpu_job *job) in v3d_timestamp_query() argument
472 struct v3d_timestamp_query_info *timestamp_query = &job->timestamp_query; in v3d_timestamp_query()
473 struct v3d_bo *bo = to_v3d_bo(job->base.bo[0]); in v3d_timestamp_query()
483 job->base.done_fence); in v3d_timestamp_query()
490 v3d_reset_timestamp_queries(struct v3d_cpu_job *job) in v3d_reset_timestamp_queries() argument
492 struct v3d_timestamp_query_info *timestamp_query = &job->timestamp_query; in v3d_reset_timestamp_queries()
494 struct v3d_bo *bo = to_v3d_bo(job->base.bo[0]); in v3d_reset_timestamp_queries()
529 v3d_copy_query_results(struct v3d_cpu_job *job) in v3d_copy_query_results() argument
531 struct v3d_timestamp_query_info *timestamp_query = &job->timestamp_query; in v3d_copy_query_results()
533 struct v3d_bo *bo = to_v3d_bo(job->base.bo[0]); in v3d_copy_query_results()
534 struct v3d_bo *timestamp = to_v3d_bo(job->base.bo[1]); in v3d_copy_query_results()
535 struct v3d_copy_query_results_info *copy = &job->copy; in v3d_copy_query_results()
570 v3d_reset_performance_queries(struct v3d_cpu_job *job) in v3d_reset_performance_queries() argument
572 struct v3d_performance_query_info *performance_query = &job->performance_query; in v3d_reset_performance_queries()
573 struct v3d_file_priv *v3d_priv = job->base.file->driver_priv; in v3d_reset_performance_queries()
574 struct v3d_dev *v3d = job->base.v3d; in v3d_reset_performance_queries()
598 v3d_write_performance_query_result(struct v3d_cpu_job *job, void *data, in v3d_write_performance_query_result() argument
602 &job->performance_query; in v3d_write_performance_query_result()
603 struct v3d_file_priv *v3d_priv = job->base.file->driver_priv; in v3d_write_performance_query_result()
606 struct v3d_dev *v3d = job->base.v3d; in v3d_write_performance_query_result()
623 if (job->copy.do_64bit) { in v3d_write_performance_query_result()
638 v3d_copy_performance_query(struct v3d_cpu_job *job) in v3d_copy_performance_query() argument
640 struct v3d_performance_query_info *performance_query = &job->performance_query; in v3d_copy_performance_query()
641 struct v3d_copy_query_results_info *copy = &job->copy; in v3d_copy_performance_query()
642 struct v3d_bo *bo = to_v3d_bo(job->base.bo[0]); in v3d_copy_performance_query()
657 v3d_write_performance_query_result(job, data, i); in v3d_copy_performance_query()
683 struct v3d_cpu_job *job = to_cpu_job(sched_job); in v3d_cpu_job_run() local
684 struct v3d_dev *v3d = job->base.v3d; in v3d_cpu_job_run()
686 v3d->cpu_job = job; in v3d_cpu_job_run()
688 if (job->job_type >= ARRAY_SIZE(cpu_job_function)) { in v3d_cpu_job_run()
689 DRM_DEBUG_DRIVER("Unknown CPU job: %d\n", job->job_type); in v3d_cpu_job_run()
693 v3d_job_start_stats(&job->base, V3D_CPU); in v3d_cpu_job_run()
694 trace_v3d_cpu_job_begin(&v3d->drm, job->job_type); in v3d_cpu_job_run()
696 cpu_job_function[job->job_type](job); in v3d_cpu_job_run()
698 trace_v3d_cpu_job_end(&v3d->drm, job->job_type); in v3d_cpu_job_run()
699 v3d_job_update_stats(&job->base, V3D_CPU); in v3d_cpu_job_run()
707 struct v3d_job *job = to_v3d_job(sched_job); in v3d_cache_clean_job_run() local
708 struct v3d_dev *v3d = job->v3d; in v3d_cache_clean_job_run()
710 v3d_job_start_stats(job, V3D_CACHE_CLEAN); in v3d_cache_clean_job_run()
714 v3d_job_update_stats(job, V3D_CACHE_CLEAN); in v3d_cache_clean_job_run()
758 struct v3d_job *job = to_v3d_job(sched_job); in v3d_cl_job_timedout() local
759 struct v3d_dev *v3d = job->v3d; in v3d_cl_job_timedout()
775 struct v3d_bin_job *job = to_bin_job(sched_job); in v3d_bin_job_timedout() local
778 &job->timedout_ctca, &job->timedout_ctra); in v3d_bin_job_timedout()
784 struct v3d_render_job *job = to_render_job(sched_job); in v3d_render_job_timedout() local
787 &job->timedout_ctca, &job->timedout_ctra); in v3d_render_job_timedout()
793 struct v3d_job *job = to_v3d_job(sched_job); in v3d_generic_job_timedout() local
795 return v3d_gpu_reset_for_timeout(job->v3d, sched_job); in v3d_generic_job_timedout()
801 struct v3d_csd_job *job = to_csd_job(sched_job); in v3d_csd_job_timedout() local
802 struct v3d_dev *v3d = job->base.v3d; in v3d_csd_job_timedout()
808 if (job->timedout_batches != batches) { in v3d_csd_job_timedout()
809 job->timedout_batches = batches; in v3d_csd_job_timedout()