gpu: host1x: Implement job tracking using DMA fences

In anticipation of removal of the intr API, implement job tracking
using DMA fences instead. The main two things about this are
making cdma_update schedule the work since fence completion can
now be called from interrupt context, and some complication in
ensuring the callback is not running when we free the fence.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Change-Id: I25f7f5a6cad24a00563eed79e0e17b1df1eadcdc
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2786636
Reviewed-by: Jonathan Hunter <jonathanh@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Mikko Perttunen
2021-08-26 12:24:59 +03:00
committed by Laxman Dewangan
parent 242251a0e1
commit 303267d828
5 changed files with 61 additions and 29 deletions

View File

@@ -8,6 +8,7 @@
#include <linux/device.h>
#include <linux/dma-direction.h>
#include <linux/dma-fence.h>
#include <linux/spinlock.h>
#include <linux/types.h>
@@ -296,8 +297,10 @@ struct host1x_job {
/* Non-job tracking related syncpoint */
struct host1x_syncpt *secondary_syncpt;
/* Completion waiter ref */
void *waiter;
/* Completion fence for job tracking */
struct dma_fence *fence;
struct dma_fence_cb fence_cb;
struct completion fence_cb_done;
/* Maximum time to wait for this job */
unsigned int timeout;