On 2020-07-27 6:57 a.m., Liu ChengZhe wrote: > From: root <ChengZhe.Liu@xxxxxxx> > > 1. For Navi12, CHIP_SIENNA_CICHLID, skip tmr load operation; > 2. Check pointer before release firmware. > > Signed-off-by: root <ChengZhe.Liu@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 40 +++++++++++++++++++++---- > 1 file changed, 34 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > index a053b7af0680..a9481e112cb3 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > @@ -193,12 +193,18 @@ static int psp_sw_fini(void *handle) > struct amdgpu_device *adev = (struct amdgpu_device *)handle; > > psp_memory_training_fini(&adev->psp); > - release_firmware(adev->psp.sos_fw); > - adev->psp.sos_fw = NULL; > - release_firmware(adev->psp.asd_fw); > - adev->psp.asd_fw = NULL; > - release_firmware(adev->psp.ta_fw); > - adev->psp.ta_fw = NULL; > + if (adev->psp.sos_fw) { > + release_firmware(adev->psp.sos_fw); > + adev->psp.sos_fw = NULL; > + } > + if (adev->psp.asd_fw) { > + release_firmware(adev->psp.asd_fw); > + adev->psp.asd_fw = NULL; > + } > + if (adev->psp.ta_fw) { > + release_firmware(adev->psp.ta_fw); > + adev->psp.ta_fw = NULL; > + } > > if (adev->asic_type == CHIP_NAVI10) > psp_sysfs_fini(adev); > @@ -409,11 +415,33 @@ static int psp_clear_vf_fw(struct psp_context *psp) > return ret; > } > > +static bool psp_skip_tmr(struct psp_context *psp) > +{ > + bool ret = false; > + > + switch (psp->adev->asic_type) { > + case CHIP_NAVI12: > + case CHIP_SIENNA_CICHLID: > + ret = true; > + break; > + default: > + return false; > + } > + > + return ret; > +} There's no need for the local "bool ret". Remove it. See in the "default:" case you already do "return false;". Do "return true;" in the NAVI12 and SIENNA CICHLID case. Regards, Luben > + > static int psp_tmr_load(struct psp_context *psp) > { > int ret; > struct psp_gfx_cmd_resp *cmd; > > + /* for Navi12 and CHIP_SIENNA_CICHLID SRIOV, do not setup TMR > + * (already setup by host driver) > + */ > + if (amdgpu_sriov_vf(psp->adev) && psp_skip_tmr(psp)) > + return 0; > + > cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); > if (!cmd) > return -ENOMEM; > _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx