diff --git a/drivers/gpu/host1x/hw/channel_hw.c b/drivers/gpu/host1x/hw/channel_hw.c index 4eda10a3..ba556ba1 100644 --- a/drivers/gpu/host1x/hw/channel_hw.c +++ b/drivers/gpu/host1x/hw/channel_hw.c @@ -217,6 +217,8 @@ static int channel_submit(struct host1x_job *job) syncval = host1x_syncpt_incr_max(sp, user_syncpt_incrs); host1x_hw_syncpt_assign_to_channel(host, sp, ch); + if (job->secondary_syncpt) + host1x_hw_syncpt_assign_to_channel(host, job->secondary_syncpt, ch); job->syncpt_end = syncval; diff --git a/drivers/gpu/host1x/include/linux/host1x-next.h b/drivers/gpu/host1x/include/linux/host1x-next.h index 406a401b..251cd471 100644 --- a/drivers/gpu/host1x/include/linux/host1x-next.h +++ b/drivers/gpu/host1x/include/linux/host1x-next.h @@ -290,6 +290,9 @@ struct host1x_job { u32 syncpt_incrs; u32 syncpt_end; + /* Non-job tracking related syncpoint */ + struct host1x_syncpt *secondary_syncpt; + /* Completion waiter ref */ void *waiter; diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c index 117a8f5f..2754f9ac 100644 --- a/drivers/gpu/host1x/job.c +++ b/drivers/gpu/host1x/job.c @@ -95,6 +95,9 @@ static void job_free(struct kref *ref) if (job->syncpt) host1x_syncpt_put(job->syncpt); + if (job->secondary_syncpt) + host1x_syncpt_put(job->secondary_syncpt); + kfree(job); }