565.57.01 has incompatible changes to rpc_rc_triggered_v17_02.

Signed-off-by: Ben Skeggs <bske...@nvidia.com>
---
 .../nouveau/nvkm/subdev/gsp/rm/r535/fifo.c    | 34 +++++++++++++++++++
 .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c | 30 +---------------
 .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h   |  1 +
 3 files changed, 36 insertions(+), 29 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 d6c3f2d01e56..a98e50f74c5c 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
@@ -454,6 +454,39 @@ r535_runl = {
        .allow = r535_runl_allow,
 };
 
+static void
+r535_fifo_rc_chid(struct nvkm_fifo *fifo, int chid)
+{
+       struct nvkm_chan *chan;
+       unsigned long flags;
+
+       chan = nvkm_chan_get_chid(&fifo->engine, chid / CHID_PER_USERD, &flags);
+       if (!chan) {
+               nvkm_error(&fifo->engine.subdev, "rc: chid %d not found!\n", 
chid);
+               return;
+       }
+
+       nvkm_chan_error(chan, false);
+       nvkm_chan_put(&chan, flags);
+}
+
+static int
+r535_fifo_rc_triggered(void *priv, u32 fn, void *repv, u32 repc)
+{
+       rpc_rc_triggered_v17_02 *msg = repv;
+       struct nvkm_gsp *gsp = priv;
+
+       if (WARN_ON(repc < sizeof(*msg)))
+               return -EINVAL;
+
+       nvkm_error(&gsp->subdev, "rc: engn:%08x chid:%d type:%d scope:%d 
part:%d\n",
+                  msg->nv2080EngineType, msg->chid, msg->exceptType, 
msg->scope,
+                  msg->partitionAttributionId);
+
+       r535_fifo_rc_chid(gsp->subdev.device->fifo, msg->chid);
+       return 0;
+}
+
 static int
 r535_fifo_xlat_rm_engine_type(u32 rm, enum nvkm_subdev_type *ptype, int *p2080)
 {
@@ -673,6 +706,7 @@ const struct nvkm_rm_api_fifo
 r535_fifo = {
        .xlat_rm_engine_type = r535_fifo_xlat_rm_engine_type,
        .ectx_size = r535_fifo_ectx_size,
+       .rc_triggered = r535_fifo_rc_triggered,
        .chan = {
                .alloc = r535_chan_alloc,
        },
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
index fc1f4219e624..94c3c55eb314 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
@@ -927,33 +927,6 @@ r535_gsp_msg_os_error_log(void *priv, u32 fn, void *repv, 
u32 repc)
        return 0;
 }
 
-static int
-r535_gsp_msg_rc_triggered(void *priv, u32 fn, void *repv, u32 repc)
-{
-       rpc_rc_triggered_v17_02 *msg = repv;
-       struct nvkm_gsp *gsp = priv;
-       struct nvkm_subdev *subdev = &gsp->subdev;
-       struct nvkm_chan *chan;
-       unsigned long flags;
-
-       if (WARN_ON(repc < sizeof(*msg)))
-               return -EINVAL;
-
-       nvkm_error(subdev, "rc engn:%08x chid:%d type:%d scope:%d part:%d\n",
-                  msg->nv2080EngineType, msg->chid, msg->exceptType, 
msg->scope,
-                  msg->partitionAttributionId);
-
-       chan = nvkm_chan_get_chid(&subdev->device->fifo->engine, msg->chid / 8, 
&flags);
-       if (!chan) {
-               nvkm_error(subdev, "rc chid:%d not found!\n", msg->chid);
-               return 0;
-       }
-
-       nvkm_chan_error(chan, false);
-       nvkm_chan_put(&chan, flags);
-       return 0;
-}
-
 static int
 r535_gsp_msg_mmu_fault_queued(void *priv, u32 fn, void *repv, u32 repc)
 {
@@ -2159,8 +2132,7 @@ r535_gsp_oneinit(struct nvkm_gsp *gsp)
        r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_GSP_RUN_CPU_SEQUENCER,
                              r535_gsp_msg_run_cpu_sequencer, gsp);
        r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_POST_EVENT, 
r535_gsp_msg_post_event, gsp);
-       r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_RC_TRIGGERED,
-                             r535_gsp_msg_rc_triggered, gsp);
+       r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_RC_TRIGGERED, 
rmapi->fifo->rc_triggered, gsp);
        r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_MMU_FAULT_QUEUED,
                              r535_gsp_msg_mmu_fault_queued, gsp);
        r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_OS_ERROR_LOG, 
r535_gsp_msg_os_error_log, gsp);
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 16eb3492f9db..263513a52bae 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
@@ -101,6 +101,7 @@ struct nvkm_rm_api {
                                           enum nvkm_subdev_type *, int 
*nv2080_type);
                int (*ectx_size)(struct nvkm_fifo *);
                unsigned rsvd_chids;
+               int (*rc_triggered)(void *priv, u32 fn, void *repv, u32 repc);
                struct {
                        int (*alloc)(struct nvkm_gsp_device *, u32 
nv2080_engine_type, u8 runq, bool priv,
                                     int chid, u64 inst_addr, u64 userd_addr, 
u64 mthdbuf_addr,
-- 
2.49.0

Reply via email to