]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/nouveau/gsp: add hal for gsp.set_rmargs()
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 has incompatible changes to GSP_ARGUMENTS_CACHED.

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/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c

index d42ae235d2f4193dd6e69b8330a1904b8c9a573d..c8429863b64277403785916b4c0ad59b8ef2e4ea 100644 (file)
@@ -71,7 +71,6 @@ void r535_gsp_dtor(struct nvkm_gsp *);
 int r535_gsp_oneinit(struct nvkm_gsp *);
 int r535_gsp_init(struct nvkm_gsp *);
 int r535_gsp_fini(struct nvkm_gsp *, bool suspend);
-int r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume);
 
 int nvkm_gsp_new_(const struct nvkm_gsp_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int,
                  struct nvkm_gsp **);
index f7cc8e03d9995573e042c3325fc9afaa5eee39cf..0c05a044876685478a8532a9a9c3e6870bcefb3b 100644 (file)
@@ -1196,23 +1196,11 @@ r535_gsp_shared_init(struct nvkm_gsp *gsp)
        return 0;
 }
 
-int
-r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume)
+static void
+r535_gsp_set_rmargs(struct nvkm_gsp *gsp, bool resume)
 {
-       GSP_ARGUMENTS_CACHED *args;
-       int ret;
+       GSP_ARGUMENTS_CACHED *args = gsp->rmargs.data;
 
-       if (!resume) {
-               ret = r535_gsp_shared_init(gsp);
-               if (ret)
-                       return ret;
-
-               ret = nvkm_gsp_mem_ctor(gsp, 0x1000, &gsp->rmargs);
-               if (ret)
-                       return ret;
-       }
-
-       args = gsp->rmargs.data;
        args->messageQueueInitArguments.sharedMemPhysAddr = gsp->shm.mem.addr;
        args->messageQueueInitArguments.pageTableEntryCount = gsp->shm.ptes.nr;
        args->messageQueueInitArguments.cmdQueueOffset =
@@ -1229,7 +1217,24 @@ r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume)
                args->srInitArguments.flags = 0;
                args->srInitArguments.bInPMTransition = 1;
        }
+}
+
+static int
+r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume)
+{
+       int ret;
+
+       if (!resume) {
+               ret = r535_gsp_shared_init(gsp);
+               if (ret)
+                       return ret;
+
+               ret = nvkm_gsp_mem_ctor(gsp, 0x1000, &gsp->rmargs);
+               if (ret)
+                       return ret;
+       }
 
+       gsp->rm->api->gsp->set_rmargs(gsp, resume);
        return 0;
 }
 
@@ -2174,6 +2179,7 @@ r535_gsp_oneinit(struct nvkm_gsp *gsp)
 
 const struct nvkm_rm_api_gsp
 r535_gsp = {
+       .set_rmargs = r535_gsp_set_rmargs,
        .set_system_info = r535_gsp_set_system_info,
        .get_static_info = r535_gsp_get_static_info,
        .xlat_mc_engine_idx = r535_gsp_xlat_mc_engine_idx,
index f085e25e4e085d8fa6c1045b946345e2b57ce725..3d677e5bdd2c8b7b5bd157db2b0cc41756f53284 100644 (file)
@@ -29,6 +29,7 @@ struct nvkm_rm_wpr {
 
 struct nvkm_rm_api {
        const struct nvkm_rm_api_gsp {
+               void (*set_rmargs)(struct nvkm_gsp *, bool resume);
                int (*set_system_info)(struct nvkm_gsp *);
                int (*get_static_info)(struct nvkm_gsp *);
                bool (*xlat_mc_engine_idx)(u32 mc_engine_idx, enum nvkm_subdev_type *, int *inst);
index a07f59e5ef7aa4db6d594a68e301185a7b368c4c..b080a8da1caf6f647a5561027ccad1d448c13885 100644 (file)
@@ -183,7 +183,7 @@ tu102_gsp_init(struct nvkm_gsp *gsp)
                mbox0 = lower_32_bits(gsp->wpr_meta.addr);
                mbox1 = upper_32_bits(gsp->wpr_meta.addr);
        } else {
-               r535_gsp_rmargs_init(gsp, true);
+               gsp->rm->api->gsp->set_rmargs(gsp, true);
 
                mbox0 = lower_32_bits(gsp->sr.meta.addr);
                mbox1 = upper_32_bits(gsp->sr.meta.addr);