Lines Matching defs:cmdq
31 static void ivpu_cmdq_ring_db(struct ivpu_device *vdev, struct ivpu_cmdq *cmdq)
33 ivpu_hw_reg_db_set(vdev, cmdq->db_id);
40 struct ivpu_cmdq *cmdq;
42 cmdq = kzalloc(sizeof(*cmdq), GFP_KERNEL);
43 if (!cmdq)
46 cmdq->mem = ivpu_bo_alloc_internal(vdev, 0, SZ_4K, DRM_IVPU_BO_WC);
47 if (!cmdq->mem)
50 cmdq->db_id = file_priv->ctx.id + engine * ivpu_get_context_count(vdev);
51 cmdq->entry_count = (u32)((cmdq->mem->base.size - sizeof(struct vpu_job_queue_header)) /
54 cmdq->jobq = (struct vpu_job_queue *)cmdq->mem->kvaddr;
55 jobq_header = &cmdq->jobq->header;
61 return cmdq;
64 kfree(cmdq);
68 static void ivpu_cmdq_free(struct ivpu_file_priv *file_priv, struct ivpu_cmdq *cmdq)
70 if (!cmdq)
73 ivpu_bo_free_internal(cmdq->mem);
74 kfree(cmdq);
80 struct ivpu_cmdq *cmdq = file_priv->cmdq[engine];
85 if (!cmdq) {
86 cmdq = ivpu_cmdq_alloc(file_priv, engine);
87 if (!cmdq)
89 file_priv->cmdq[engine] = cmdq;
92 if (cmdq->db_registered)
93 return cmdq;
95 ret = ivpu_jsm_register_db(vdev, file_priv->ctx.id, cmdq->db_id,
96 cmdq->mem->vpu_addr, cmdq->mem->base.size);
100 cmdq->db_registered = true;
102 return cmdq;
107 struct ivpu_cmdq *cmdq = file_priv->cmdq[engine];
111 if (cmdq) {
112 file_priv->cmdq[engine] = NULL;
113 if (cmdq->db_registered)
114 ivpu_jsm_unregister_db(file_priv->vdev, cmdq->db_id);
116 ivpu_cmdq_free(file_priv, cmdq);
140 struct ivpu_cmdq *cmdq = file_priv->cmdq[engine];
144 if (cmdq) {
145 cmdq->db_registered = false;
146 cmdq->jobq->header.head = 0;
147 cmdq->jobq->header.tail = 0;
180 static int ivpu_cmdq_push_job(struct ivpu_cmdq *cmdq, struct ivpu_job *job)
183 struct vpu_job_queue_header *header = &cmdq->jobq->header;
186 u32 next_entry = (tail + 1) % cmdq->entry_count;
191 job->file_priv->ctx.id, job->engine_idx, cmdq->db_id, header->head, tail);
195 entry = &cmdq->jobq->job[tail];
374 struct ivpu_cmdq *cmdq;
379 cmdq = ivpu_cmdq_acquire(job->file_priv, job->engine_idx);
380 if (!cmdq) {
397 ret = ivpu_cmdq_push_job(cmdq, job);
403 job->engine_idx, cmdq->jobq->header.tail);
407 cmdq->jobq->header.head = cmdq->jobq->header.tail;
410 ivpu_cmdq_ring_db(vdev, cmdq);