From: Dave Airlie <[email protected]>

this has a lot of args, and it wants to grow more in the future,
lets just refactor this out and make it cleaner.

Signed-off-by: Dave Airlie <[email protected]>
---
 .../nouveau/nvkm/subdev/gsp/rm/r535/fifo.c    | 48 +++++++++++--------
 .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c  | 18 +++++--
 .../nouveau/nvkm/subdev/gsp/rm/r570/fifo.c    | 31 ++++++------
 .../drm/nouveau/nvkm/subdev/gsp/rm/r570/gr.c  | 18 +++++--
 .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h   | 17 +++++--
 5 files changed, 83 insertions(+), 49 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
index 76ee938efea3..6603b1951772 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
@@ -72,15 +72,14 @@ r535_chan_ramfc_clear(struct nvkm_chan *chan)
 #define CHID_PER_USERD 8
 
 static int
-r535_chan_alloc(struct nvkm_gsp_device *device, u32 handle, u32 
nv2080_engine_type, u8 runq,
-               bool priv, int chid, u64 inst_addr, u64 userd_addr, u64 
mthdbuf_addr,
-               struct nvkm_vmm *vmm, u64 gpfifo_offset, u32 gpfifo_length,
+r535_chan_alloc(struct nvkm_gsp_device *device, u32 handle,
+               const struct nvkm_rm_chan_alloc_args *chan_args,
                struct nvkm_gsp_object *chan)
 {
        struct nvkm_gsp *gsp = device->object.client->gsp;
        struct nvkm_fifo *fifo = gsp->subdev.device->fifo;
-       const int userd_p = chid / CHID_PER_USERD;
-       const int userd_i = chid % CHID_PER_USERD;
+       const int userd_p = chan_args->chid / CHID_PER_USERD;
+       const int userd_i = chan_args->chid % CHID_PER_USERD;
        NV_CHANNELGPFIFO_ALLOCATION_PARAMETERS *args;
 
        args = nvkm_gsp_rm_alloc_get(&device->object, handle,
@@ -88,14 +87,14 @@ r535_chan_alloc(struct nvkm_gsp_device *device, u32 handle, 
u32 nv2080_engine_ty
        if (WARN_ON(IS_ERR(args)))
                return PTR_ERR(args);
 
-       args->gpFifoOffset = gpfifo_offset;
-       args->gpFifoEntries = gpfifo_length / 8;
+       args->gpFifoOffset = chan_args->gpfifo_offset;
+       args->gpFifoEntries = chan_args->gpfifo_length / 8;
 
        args->flags  = NVDEF(NVOS04, FLAGS, CHANNEL_TYPE, PHYSICAL);
        args->flags |= NVDEF(NVOS04, FLAGS, VPR, FALSE);
        args->flags |= NVDEF(NVOS04, FLAGS, CHANNEL_SKIP_MAP_REFCOUNTING, 
FALSE);
-       args->flags |= NVVAL(NVOS04, FLAGS, GROUP_CHANNEL_RUNQUEUE, runq);
-       if (!priv)
+       args->flags |= NVVAL(NVOS04, FLAGS, GROUP_CHANNEL_RUNQUEUE, 
chan_args->runq);
+       if (!chan_args->priv)
                args->flags |= NVDEF(NVOS04, FLAGS, PRIVILEGED_CHANNEL, FALSE);
        else
                args->flags |= NVDEF(NVOS04, FLAGS, PRIVILEGED_CHANNEL, TRUE);
@@ -117,30 +116,30 @@ r535_chan_alloc(struct nvkm_gsp_device *device, u32 
handle, u32 nv2080_engine_ty
        args->flags |= NVDEF(NVOS04, FLAGS, MAP_CHANNEL, FALSE);
        args->flags |= NVDEF(NVOS04, FLAGS, SKIP_CTXBUFFER_ALLOC, FALSE);
 
-       args->hVASpace = vmm->rm.object.handle;
-       args->engineType = nv2080_engine_type;
+       args->hVASpace = chan_args->vmm->rm.object.handle;
+       args->engineType = chan_args->nv2080_engine_type;
 
-       args->instanceMem.base = inst_addr;
+       args->instanceMem.base = chan_args->inst_addr;
        args->instanceMem.size = fifo->func->chan.func->inst->size;
        args->instanceMem.addressSpace = 2;
        args->instanceMem.cacheAttrib = 1;
 
-       args->userdMem.base = userd_addr;
+       args->userdMem.base = chan_args->userd_addr;
        args->userdMem.size = fifo->func->chan.func->userd->size;
        args->userdMem.addressSpace = 2;
        args->userdMem.cacheAttrib = 1;
 
-       args->ramfcMem.base = inst_addr;
+       args->ramfcMem.base = chan_args->inst_addr;
        args->ramfcMem.size = 0x200;
        args->ramfcMem.addressSpace = 2;
        args->ramfcMem.cacheAttrib = 1;
 
-       args->mthdbufMem.base = mthdbuf_addr;
+       args->mthdbufMem.base = chan_args->mthdbuf_addr;
        args->mthdbufMem.size = fifo->rm.mthdbuf_size;
        args->mthdbufMem.addressSpace = 1;
        args->mthdbufMem.cacheAttrib = 0;
 
-       if (!priv)
+       if (!chan_args->priv)
                args->internalFlags = NVDEF(NV_KERNELCHANNEL, 
ALLOC_INTERNALFLAGS, PRIVILEGE, USER);
        else
                args->internalFlags = NVDEF(NV_KERNELCHANNEL, 
ALLOC_INTERNALFLAGS, PRIVILEGE, ADMIN);
@@ -180,11 +179,20 @@ r535_chan_ramfc_write(struct nvkm_chan *chan, u64 offset, 
u64 length, u32 devm,
        if (!chan->rm.mthdbuf.ptr)
                return -ENOMEM;
 
+       struct nvkm_rm_chan_alloc_args chan_args = {
+               .nv2080_engine_type = eT,
+               .runq = chan->runq,
+               .priv = priv,
+               .chid = chan->id,
+               .inst_addr = chan->inst->addr,
+               .userd_addr = nvkm_memory_addr(chan->userd.mem) + 
chan->userd.base,
+               .mthdbuf_addr = chan->rm.mthdbuf.addr,
+               .vmm = chan->vmm,
+               .gpfifo_offset = offset,
+               .gpfifo_length = length
+       };
        ret = rmapi->fifo->chan.alloc(&chan->vmm->rm.device, 
NVKM_RM_CHAN(chan->id),
-                                     eT, chan->runq, priv, chan->id, 
chan->inst->addr,
-                                     nvkm_memory_addr(chan->userd.mem) + 
chan->userd.base,
-                                     chan->rm.mthdbuf.addr, chan->vmm, offset, 
length,
-                                     &chan->rm.object);
+                                     &chan_args, &chan->rm.object);
        if (ret)
                return ret;
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
index 034db286d285..4bec793a2caf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
@@ -301,12 +301,20 @@ r535_gr_oneinit(struct nvkm_gr *base)
        if (ret)
                goto done;
 
+       struct nvkm_rm_chan_alloc_args chan_args = {
+               .nv2080_engine_type = 1,
+               .runq = 0,
+               .priv = true,
+               .chid = rm->api->fifo->rsvd_chids,
+               .inst_addr = nvkm_memory_addr(golden.inst),
+               .userd_addr = nvkm_memory_addr(golden.inst) + 0x1000,
+               .mthdbuf_addr = nvkm_memory_addr(golden.inst) + 0x2000,
+               .vmm = golden.vmm,
+               .gpfifo_offset = 0,
+               .gpfifo_length = 0x1000
+       };
        ret = rm->api->fifo->chan.alloc(&golden.vmm->rm.device, NVKM_RM_CHAN(0),
-                                       1, 0, true, rm->api->fifo->rsvd_chids,
-                                       nvkm_memory_addr(golden.inst),
-                                       nvkm_memory_addr(golden.inst) + 0x1000,
-                                       nvkm_memory_addr(golden.inst) + 0x2000,
-                                       golden.vmm, 0, 0x1000, &golden.chan);
+                                       &chan_args, &golden.chan);
        if (ret)
                goto done;
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fifo.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fifo.c
index 79132805cfcf..e28c7251ea10 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fifo.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fifo.c
@@ -17,15 +17,14 @@
 #define CHID_PER_USERD 8
 
 static int
-r570_chan_alloc(struct nvkm_gsp_device *device, u32 handle, u32 
nv2080_engine_type, u8 runq,
-               bool priv, int chid, u64 inst_addr, u64 userd_addr, u64 
mthdbuf_addr,
-               struct nvkm_vmm *vmm, u64 gpfifo_offset, u32 gpfifo_length,
+r570_chan_alloc(struct nvkm_gsp_device *device, u32 handle,
+               const struct nvkm_rm_chan_alloc_args *chan_args,
                struct nvkm_gsp_object *chan)
 {
        struct nvkm_gsp *gsp = device->object.client->gsp;
        struct nvkm_fifo *fifo = gsp->subdev.device->fifo;
-       const int userd_p = chid / CHID_PER_USERD;
-       const int userd_i = chid % CHID_PER_USERD;
+       const int userd_p = chan_args->chid / CHID_PER_USERD;
+       const int userd_i = chan_args->chid % CHID_PER_USERD;
        NV_CHANNELGPFIFO_ALLOCATION_PARAMETERS *args;
 
        args = nvkm_gsp_rm_alloc_get(&device->object, handle,
@@ -33,14 +32,14 @@ r570_chan_alloc(struct nvkm_gsp_device *device, u32 handle, 
u32 nv2080_engine_ty
        if (WARN_ON(IS_ERR(args)))
                return PTR_ERR(args);
 
-       args->gpFifoOffset = gpfifo_offset;
-       args->gpFifoEntries = gpfifo_length / 8;
+       args->gpFifoOffset = chan_args->gpfifo_offset;
+       args->gpFifoEntries = chan_args->gpfifo_length / 8;
 
        args->flags  = NVDEF(NVOS04, FLAGS, CHANNEL_TYPE, PHYSICAL);
        args->flags |= NVDEF(NVOS04, FLAGS, VPR, FALSE);
        args->flags |= NVDEF(NVOS04, FLAGS, CHANNEL_SKIP_MAP_REFCOUNTING, 
FALSE);
-       args->flags |= NVVAL(NVOS04, FLAGS, GROUP_CHANNEL_RUNQUEUE, runq);
-       if (!priv)
+       args->flags |= NVVAL(NVOS04, FLAGS, GROUP_CHANNEL_RUNQUEUE, 
chan_args->runq);
+       if (!chan_args->priv)
                args->flags |= NVDEF(NVOS04, FLAGS, PRIVILEGED_CHANNEL, FALSE);
        else
                args->flags |= NVDEF(NVOS04, FLAGS, PRIVILEGED_CHANNEL, TRUE);
@@ -62,30 +61,30 @@ r570_chan_alloc(struct nvkm_gsp_device *device, u32 handle, 
u32 nv2080_engine_ty
        args->flags |= NVDEF(NVOS04, FLAGS, MAP_CHANNEL, FALSE);
        args->flags |= NVDEF(NVOS04, FLAGS, SKIP_CTXBUFFER_ALLOC, FALSE);
 
-       args->hVASpace = vmm->rm.object.handle;
-       args->engineType = nv2080_engine_type;
+       args->hVASpace = chan_args->vmm->rm.object.handle;
+       args->engineType = chan_args->nv2080_engine_type;
 
-       args->instanceMem.base = inst_addr;
+       args->instanceMem.base = chan_args->inst_addr;
        args->instanceMem.size = fifo->func->chan.func->inst->size;
        args->instanceMem.addressSpace = 2;
        args->instanceMem.cacheAttrib = 1;
 
-       args->userdMem.base = userd_addr;
+       args->userdMem.base = chan_args->userd_addr;
        args->userdMem.size = fifo->func->chan.func->userd->size;
        args->userdMem.addressSpace = 2;
        args->userdMem.cacheAttrib = 1;
 
-       args->ramfcMem.base = inst_addr;
+       args->ramfcMem.base = chan_args->inst_addr;
        args->ramfcMem.size = 0x200;
        args->ramfcMem.addressSpace = 2;
        args->ramfcMem.cacheAttrib = 1;
 
-       args->mthdbufMem.base = mthdbuf_addr;
+       args->mthdbufMem.base = chan_args->mthdbuf_addr;
        args->mthdbufMem.size = fifo->rm.mthdbuf_size;
        args->mthdbufMem.addressSpace = 1;
        args->mthdbufMem.cacheAttrib = 0;
 
-       if (!priv)
+       if (!chan_args->priv)
                args->internalFlags = NVDEF(NV_KERNELCHANNEL, 
ALLOC_INTERNALFLAGS, PRIVILEGE, USER);
        else
                args->internalFlags = NVDEF(NV_KERNELCHANNEL, 
ALLOC_INTERNALFLAGS, PRIVILEGE, ADMIN);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gr.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gr.c
index 8dd4552aeaa5..354562ba9d35 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gr.c
@@ -130,12 +130,20 @@ r570_gr_scrubber_init(struct r535_gr *gr)
        if (ret)
                goto done;
 
+       struct nvkm_rm_chan_alloc_args chan_args = {
+               .nv2080_engine_type = NV2080_ENGINE_TYPE_GR0,
+               .runq = 0,
+               .priv = false,
+               .chid = gr->scrubber.chid,
+               .inst_addr = nvkm_memory_addr(gr->scrubber.inst),
+               .userd_addr = nvkm_memory_addr(gr->scrubber.inst) + 0x1000,
+               .mthdbuf_addr = nvkm_memory_addr(gr->scrubber.inst) + 0x2000,
+               .vmm = gr->scrubber.vmm,
+               .gpfifo_offset = 0,
+               .gpfifo_length = 0x1000,
+       };
        ret = rm->api->fifo->chan.alloc(&gr->scrubber.vmm->rm.device, 
KGRAPHICS_SCRUBBER_HANDLE_CHANNEL,
-                                       NV2080_ENGINE_TYPE_GR0, 0, false, 
gr->scrubber.chid,
-                                       nvkm_memory_addr(gr->scrubber.inst),
-                                       nvkm_memory_addr(gr->scrubber.inst) + 
0x1000,
-                                       nvkm_memory_addr(gr->scrubber.inst) + 
0x2000,
-                                       gr->scrubber.vmm, 0, 0x1000, 
&gr->scrubber.chan);
+                                       &chan_args, &gr->scrubber.chan);
        if (ret)
                goto done;
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
index b77059e0ac12..b71ba74eec12 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
@@ -31,6 +31,19 @@ struct nvkm_rm_wpr {
        bool is_libos2;
 };
 
+struct nvkm_rm_chan_alloc_args {
+       u32 nv2080_engine_type;
+       u8 runq;
+       bool priv;
+       int chid;
+       u64 inst_addr;
+       u64 userd_addr;
+       u64 mthdbuf_addr;
+       struct nvkm_vmm *vmm;
+       u64 gpfifo_offset;
+       u32 gpfifo_length;
+};
+
 struct nvkm_rm_api {
        const struct nvkm_rm_api_gsp {
                int (*libos_init)(struct nvkm_gsp *);
@@ -113,9 +126,7 @@ struct nvkm_rm_api {
                int (*rc_triggered)(void *priv, u32 fn, void *repv, u32 repc);
                struct {
                        int (*alloc)(struct nvkm_gsp_device *, u32 handle,
-                                    u32 nv2080_engine_type, u8 runq, bool 
priv, int chid,
-                                    u64 inst_addr, u64 userd_addr, u64 
mthdbuf_addr,
-                                    struct nvkm_vmm *, u64 gpfifo_offset, u32 
gpfifo_length,
+                                    const struct nvkm_rm_chan_alloc_args 
*chan_args,
                                     struct nvkm_gsp_object *);
                } chan;
        } *fifo;
-- 
2.55.0

Reply via email to