555.42.02 has incompatible changes to GSP_ARGUMENTS_CACHED. Signed-off-by: Ben Skeggs <bske...@nvidia.com> --- .../gpu/drm/nouveau/nvkm/subdev/gsp/priv.h | 1 - .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c | 36 +++++++++++-------- .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h | 1 + .../gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c | 2 +- 4 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h index d42ae235d2f4..c8429863b642 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h @@ -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 **); 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 218a7141ba97..2df551d61abb 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 @@ -1201,23 +1201,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 = @@ -1234,7 +1222,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; } @@ -2179,6 +2184,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, 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 85c100ab9cb5..173191bdc503 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h @@ -28,6 +28,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); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c index a07f59e5ef7a..b080a8da1caf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c @@ -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); -- 2.49.0