Commit d392aa02 authored by Liu ChengZhe's avatar Liu ChengZhe Committed by Alex Deucher

drm amdgpu: Skip tmr load for SRIOV

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: default avatarLiu ChengZhe <ChengZhe.Liu@amd.com>
Reviewed-by: default avatarLuben Tuikov <luben.tuikov@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6b6124bb
...@@ -193,12 +193,18 @@ static int psp_sw_fini(void *handle) ...@@ -193,12 +193,18 @@ static int psp_sw_fini(void *handle)
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
psp_memory_training_fini(&adev->psp); psp_memory_training_fini(&adev->psp);
release_firmware(adev->psp.sos_fw); if (adev->psp.sos_fw) {
adev->psp.sos_fw = NULL; release_firmware(adev->psp.sos_fw);
release_firmware(adev->psp.asd_fw); adev->psp.sos_fw = NULL;
adev->psp.asd_fw = NULL; }
release_firmware(adev->psp.ta_fw); if (adev->psp.asd_fw) {
adev->psp.ta_fw = NULL; 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) if (adev->asic_type == CHIP_NAVI10)
psp_sysfs_fini(adev); psp_sysfs_fini(adev);
...@@ -409,11 +415,28 @@ static int psp_clear_vf_fw(struct psp_context *psp) ...@@ -409,11 +415,28 @@ static int psp_clear_vf_fw(struct psp_context *psp)
return ret; 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) static int psp_tmr_load(struct psp_context *psp)
{ {
int ret; int ret;
struct psp_gfx_cmd_resp *cmd; 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); cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
if (!cmd) if (!cmd)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment