Reviewed-by: Luben Tuikov <luben.tuikov@xxxxxxx> On 2020-07-29 04:23, Liu ChengZhe wrote: > 1. For Navi12, CHIP_SIENNA_CICHLID, skip tmr load operation; > 2. Check pointer before release firmware. > > v2: use CHIP_SIENNA_CICHLID instead > v3: remove local "bool ret"; fix grammer issue > v4: use my name instead of "root" > v5: fix grammer issue and indent issue > > Signed-off-by: Liu ChengZhe <ChengZhe.Liu@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 35 ++++++++++++++++++++----- > 1 file changed, 29 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..c68369731b20 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,28 @@ static int psp_clear_vf_fw(struct psp_context *psp) > return ret; > } > > +static bool psp_skip_tmr(struct psp_context *psp) > +{ > + switch (psp->adev->asic_type) { > + case CHIP_NAVI12: > + case CHIP_SIENNA_CICHLID: > + return true; > + default: > + return false; > + } > +} > + > 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 set up TMR. > + * Already set up 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