Lines Matching refs:job

17 #include "../job.h"
50 static void submit_wait(struct host1x_job *job, u32 id, u32 threshold,
53 struct host1x_cdma *cdma = &job->channel->cdma;
63 if (job->memory_context)
64 stream_id = job->memory_context->stream_id;
66 stream_id = job->engine_fallback_streamid;
79 host1x_cdma_push_wide(&job->channel->cdma,
80 host1x_opcode_setclass(job->class, 0, 0),
82 host1x_opcode_setstreamid(job->engine_streamid_offset / 4),
113 static void submit_gathers(struct host1x_job *job, u32 job_syncpt_base)
115 struct host1x_cdma *cdma = &job->channel->cdma;
117 struct device *dev = job->channel->dev;
122 for (i = 0; i < job->num_cmds; i++) {
123 struct host1x_job_cmd *cmd = &job->cmds[i];
131 submit_wait(job, cmd->wait.id, threshold, cmd->wait.next_class);
163 static inline void synchronize_syncpt_base(struct host1x_job *job)
165 struct host1x_syncpt *sp = job->syncpt;
172 host1x_cdma_push(&job->channel->cdma,
212 static void channel_program_cdma(struct host1x_job *job)
214 struct host1x_cdma *cdma = &job->channel->cdma;
215 struct host1x_syncpt *sp = job->syncpt;
222 host1x_opcode_acquire_mlock(job->class),
223 host1x_opcode_setclass(job->class, 0, 0),
225 host1x_opcode_setstreamid(job->engine_streamid_offset / 4));
229 host1x_cdma_push(&job->channel->cdma,
231 HOST1X_UCLASS_INCR_SYNCPT_INDX_F(job->syncpt->id) |
233 submit_wait(job, job->syncpt->id, fence, job->class);
236 job->syncpt_end = host1x_syncpt_incr_max(sp, job->syncpt_incrs);
237 submit_gathers(job, job->syncpt_end - job->syncpt_incrs);
241 host1x_cdma_push(&job->channel->cdma,
243 HOST1X_UCLASS_INCR_SYNCPT_INDX_F(job->syncpt->id) |
245 submit_wait(job, job->syncpt->id, fence, job->class);
249 HOST1X_OPCODE_NOP, host1x_opcode_release_mlock(job->class));
251 if (job->serialize) {
254 * previous job to finish before this one can commence.
259 host1x_class_host_wait_syncpt(job->syncpt->id,
265 synchronize_syncpt_base(job);
268 if (job->class)
270 host1x_opcode_setclass(job->class, 0, 0),
273 job->syncpt_end = host1x_syncpt_incr_max(sp, job->syncpt_incrs);
275 submit_gathers(job, job->syncpt_end - job->syncpt_incrs);
281 struct host1x_job *job = container_of(cb, struct host1x_job, fence_cb);
284 host1x_cdma_update(&job->channel->cdma);
287 static int channel_submit(struct host1x_job *job)
289 struct host1x_channel *ch = job->channel;
290 struct host1x_syncpt *sp = job->syncpt;
297 job->num_cmds, job->num_relocs,
298 job->syncpt->id, job->syncpt_incrs);
301 prev_max = job->syncpt_end = host1x_syncpt_read_max(sp);
313 err = host1x_cdma_begin(&ch->cdma, job);
319 channel_program_cdma(job);
323 * Create fence before submitting job to HW to avoid job completing
326 job->fence = host1x_fence_create(sp, syncval, true);
327 if (WARN(IS_ERR(job->fence), "Failed to create submit complete fence")) {
328 job->fence = NULL;
330 err = dma_fence_add_callback(job->fence, &job->fence_cb,
335 host1x_cdma_end(&ch->cdma, job);