drm/nouveau/fifo/gk104-: virtualise pbdma enable function
authorBen Skeggs <bskeggs@redhat.com>
Tue, 11 Dec 2018 04:50:02 +0000 (14:50 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 11 Dec 2018 05:37:48 +0000 (15:37 +1000)
Turing will require different code.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c

index 1a6bafb..79e0b58 100644 (file)
@@ -249,8 +249,16 @@ gk104_fifo_runlist = {
        .commit = gk104_fifo_runlist_commit,
 };
 
+void
+gk104_fifo_pbdma_init(struct gk104_fifo *fifo)
+{
+       struct nvkm_device *device = fifo->base.engine.subdev.device;
+       nvkm_wr32(device, 0x000204, (1 << fifo->pbdma_nr) - 1);
+}
+
 const struct gk104_fifo_pbdma_func
 gk104_fifo_pbdma = {
+       .init = gk104_fifo_pbdma_init,
 };
 
 static void
@@ -991,7 +999,7 @@ gk104_fifo_init(struct nvkm_fifo *base)
        int i;
 
        /* Enable PBDMAs. */
-       nvkm_wr32(device, 0x000204, (1 << fifo->pbdma_nr) - 1);
+       fifo->func->pbdma->init(fifo);
 
        /* PBDMA[n] */
        for (i = 0; i < fifo->pbdma_nr; i++) {
index c069183..61d7eee 100644 (file)
@@ -46,6 +46,7 @@ struct gk104_fifo {
 
 struct gk104_fifo_func {
        const struct gk104_fifo_pbdma_func {
+               void (*init)(struct gk104_fifo *);
                void (*init_timeout)(struct gk104_fifo *);
        } *pbdma;
 
@@ -88,6 +89,7 @@ void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *);
 void gk104_fifo_runlist_update(struct gk104_fifo *, int runl);
 
 extern const struct gk104_fifo_pbdma_func gk104_fifo_pbdma;
+void gk104_fifo_pbdma_init(struct gk104_fifo *);
 extern const struct nvkm_enum gk104_fifo_fault_access[];
 extern const struct nvkm_enum gk104_fifo_fault_engine[];
 extern const struct nvkm_enum gk104_fifo_fault_reason[];
index c0c1606..4595229 100644 (file)
@@ -38,6 +38,7 @@ gk208_fifo_pbdma_init_timeout(struct gk104_fifo *fifo)
 
 const struct gk104_fifo_pbdma_func
 gk208_fifo_pbdma = {
+       .init = gk104_fifo_pbdma_init,
        .init_timeout = gk208_fifo_pbdma_init_timeout,
 };