drm/nouveau/gsp: add hal for fifo.rsvd_chids
authorBen Skeggs <bskeggs@nvidia.com>
Thu, 14 Nov 2024 03:02:38 +0000 (13:02 +1000)
committerDave Airlie <airlied@redhat.com>
Sun, 18 May 2025 20:29:25 +0000 (06:29 +1000)
555.42.02 reserves some CHIDs for internal use.

Signed-off-by: Ben Skeggs <bskeggs@nvidia.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Timur Tabi <ttabi@nvidia.com>
Tested-by: Timur Tabi <ttabi@nvidia.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h

index 64570617991316ac620ace70c7f00f531a04a770..a480c1a5686d4270381063d6a44a0eb9acf6cf3e 100644 (file)
@@ -427,13 +427,14 @@ r535_fifo_runl_ctor(struct nvkm_fifo *fifo)
        struct nvkm_rm *rm = gsp->rm;
        struct nvkm_runl *runl;
        struct nvkm_engn *engn;
-       u32 cgids = 2048;
        u32 chids = 2048;
+       u32 first = rm->api->fifo->rsvd_chids;
+       u32 count = chids - first;
        int ret;
        NV2080_CTRL_FIFO_GET_DEVICE_INFO_TABLE_PARAMS *ctrl;
 
-       if ((ret = nvkm_chid_new(&nvkm_chan_event, subdev, cgids, 0, cgids, &fifo->cgid)) ||
-           (ret = nvkm_chid_new(&nvkm_chan_event, subdev, chids, 0, chids, &fifo->chid)))
+       if ((ret = nvkm_chid_new(&nvkm_chan_event, subdev, chids, first, count, &fifo->cgid)) ||
+           (ret = nvkm_chid_new(&nvkm_chan_event, subdev, chids, first, count, &fifo->chid)))
                return ret;
 
        ctrl = nvkm_gsp_rm_ctrl_rd(&gsp->internal.device.subdevice,
index cc28de66cfa3a05c3aad03bdad884fbf75f5534d..9e97b7b1a0fb0455d417a6316f5327ed1019d6a2 100644 (file)
@@ -298,7 +298,8 @@ r535_gr_oneinit(struct nvkm_gr *base)
        if (ret)
                goto done;
 
-       ret = rm->api->fifo->chan.alloc(&golden.vmm->rm.device, NVKM_RM_CHAN(0), 1, 0, true, 0,
+       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,
index 29663dbe99e12ab6fafa22346f639c774c7284bf..a370beda3c716cf0b215b6107c7660169dc449be 100644 (file)
@@ -101,6 +101,7 @@ struct nvkm_rm_api {
                int (*xlat_rm_engine_type)(u32 rm_engine_type,
                                           enum nvkm_subdev_type *, int *nv2080_type);
                int (*ectx_size)(struct nvkm_fifo *);
+               unsigned rsvd_chids;
                struct {
                        int (*alloc)(struct nvkm_gsp_device *, u32 handle,
                                     u32 nv2080_engine_type, u8 runq, bool priv, int chid,