Merge tag 'drm-misc-next-fixes-2021-09-09' of git://anongit.freedesktop.org/drm/drm...
[linux-2.6-microblaze.git] / include / linux / host1x.h
index 9b0487c..7bccf58 100644 (file)
@@ -170,6 +170,8 @@ u32 host1x_syncpt_base_id(struct host1x_syncpt_base *base);
 void host1x_syncpt_release_vblank_reservation(struct host1x_client *client,
                                              u32 syncpt_id);
 
+struct dma_fence *host1x_fence_create(struct host1x_syncpt *sp, u32 threshold);
+
 /*
  * host1x channel
  */
@@ -216,8 +218,8 @@ struct host1x_job {
        struct host1x_client *client;
 
        /* Gathers and their memory */
-       struct host1x_job_gather *gathers;
-       unsigned int num_gathers;
+       struct host1x_job_cmd *cmds;
+       unsigned int num_cmds;
 
        /* Array of handles to be pinned & unpinned */
        struct host1x_reloc *relocs;
@@ -234,9 +236,15 @@ struct host1x_job {
        u32 syncpt_incrs;
        u32 syncpt_end;
 
+       /* Completion waiter ref */
+       void *waiter;
+
        /* Maximum time to wait for this job */
        unsigned int timeout;
 
+       /* Job has timed out and should be released */
+       bool cancelled;
+
        /* Index and number of slots used in the push buffer */
        unsigned int first_get;
        unsigned int num_slots;
@@ -257,12 +265,25 @@ struct host1x_job {
 
        /* Add a channel wait for previous ops to complete */
        bool serialize;
+
+       /* Fast-forward syncpoint increments on job timeout */
+       bool syncpt_recovery;
+
+       /* Callback called when job is freed */
+       void (*release)(struct host1x_job *job);
+       void *user_data;
+
+       /* Whether host1x-side firewall should be ran for this job or not */
+       bool enable_firewall;
 };
 
 struct host1x_job *host1x_job_alloc(struct host1x_channel *ch,
-                                   u32 num_cmdbufs, u32 num_relocs);
+                                   u32 num_cmdbufs, u32 num_relocs,
+                                   bool skip_firewall);
 void host1x_job_add_gather(struct host1x_job *job, struct host1x_bo *bo,
                           unsigned int words, unsigned int offset);
+void host1x_job_add_wait(struct host1x_job *job, u32 id, u32 thresh,
+                        bool relative, u32 next_class);
 struct host1x_job *host1x_job_get(struct host1x_job *job);
 void host1x_job_put(struct host1x_job *job);
 int host1x_job_pin(struct host1x_job *job, struct device *dev);