Function nvkm_gsp_fwsec_v2() sets 'ret' if the kmemdup() call fails, but it never uses or returns 'ret' after that point. We always need to release the firmware regardless, so do that and then check for error. Fixes: 176fdcbddfd2 ("drm/nouveau/gsp/r535: add support for booting GSP-RM") Signed-off-by: Timur Tabi <ttabi at nvidia.com> --- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c index 52412965fac1..5b721bd9d799 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c @@ -209,11 +209,12 @@ nvkm_gsp_fwsec_v2(struct nvkm_gsp *gsp, const char *name, fw->boot_addr = bld->start_tag << 8; fw->boot_size = bld->code_size; fw->boot = kmemdup(bl->data + hdr->data_offset + bld->code_off, fw->boot_size, GFP_KERNEL); - if (!fw->boot) - ret = -ENOMEM; nvkm_firmware_put(bl); + if (!fw->boot) + return -ENOMEM; + /* Patch in interface data. */ return nvkm_gsp_fwsec_patch(gsp, fw, desc->InterfaceOffset, init_cmd); } base-commit: 155a3c003e555a7300d156a5252c004c392ec6b0 -- 2.43.0
The memory target check is a hold-over from a refactor. It's harmless but distracting, so just remove it. Signed-off-by: Timur Tabi <ttabi at nvidia.com> --- drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c b/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c index b7da3ab44c27..f0acfaa153d1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/falcon/gm200.c @@ -249,9 +249,11 @@ int gm200_flcn_fw_load(struct nvkm_falcon_fw *fw) { struct nvkm_falcon *falcon = fw->falcon; - int target, ret; + int ret; if (fw->inst) { + int target; + nvkm_falcon_mask(falcon, 0x048, 0x00000001, 0x00000001); switch (nvkm_memory_target(fw->inst)) { @@ -285,15 +287,6 @@ gm200_flcn_fw_load(struct nvkm_falcon_fw *fw) } if (fw->boot) { - switch (nvkm_memory_target(&fw->fw.mem.memory)) { - case NVKM_MEM_TARGET_VRAM: target = 4; break; - case NVKM_MEM_TARGET_HOST: target = 5; break; - case NVKM_MEM_TARGET_NCOH: target = 6; break; - default: - WARN_ON(1); - return -EINVAL; - } - ret = nvkm_falcon_pio_wr(falcon, fw->boot, 0, 0, IMEM, falcon->code.limit - fw->boot_size, fw->boot_size, fw->boot_addr >> 8, false); base-commit: 155a3c003e555a7300d156a5252c004c392ec6b0 -- 2.43.0
On Tue, 15 Jul 2025 16:05:58 -0500 Timur Tabi <ttabi at nvidia.com> wrote:> Function nvkm_gsp_fwsec_v2() sets 'ret' if the kmemdup() call fails, > but it never uses or returns 'ret' after that point. We always need > to release the firmware regardless, so do that and then check for > error. >LGTM. Reviewed-by: Zhi Wang <zhiw at nvidia.com>> Fixes: 176fdcbddfd2 ("drm/nouveau/gsp/r535: add support for booting > GSP-RM") Signed-off-by: Timur Tabi <ttabi at nvidia.com> > --- > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c index > 52412965fac1..5b721bd9d799 100644 --- > a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c +++ > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c @@ -209,11 +209,12 > @@ nvkm_gsp_fwsec_v2(struct nvkm_gsp *gsp, const char *name, > fw->boot_addr = bld->start_tag << 8; fw->boot_size = bld->code_size; > fw->boot = kmemdup(bl->data + hdr->data_offset + > bld->code_off, fw->boot_size, GFP_KERNEL); > - if (!fw->boot) > - ret = -ENOMEM; > > nvkm_firmware_put(bl); > > + if (!fw->boot) > + return -ENOMEM; > + > /* Patch in interface data. */ > return nvkm_gsp_fwsec_patch(gsp, fw, desc->InterfaceOffset, > init_cmd); } > > base-commit: 155a3c003e555a7300d156a5252c004c392ec6b0