amd/amdgpu/sriov tdr enablement with pp_onevf_mode
authorJack Zhang <Jack.Zhang1@amd.com>
Fri, 27 Dec 2019 06:44:03 +0000 (14:44 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 7 Jan 2020 16:58:19 +0000 (11:58 -0500)
Under sriov and pp_onevf mode,
1.take resume instead of hw_init for smc recover to avoid
potential memory leak.

2.add return condition inside smc resume function for
sriov_pp_onevf_mode and pm_enabled param.

Signed-off-by: Jack Zhang <Jack.Zhang1@amd.com>
Acked-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c

index 9c9c7b3..9b4c18b 100644 (file)
@@ -2455,7 +2455,11 @@ static int amdgpu_device_ip_reinit_late_sriov(struct amdgpu_device *adev)
                                block->status.hw)
                                continue;
 
-                       r = block->version->funcs->hw_init(adev);
+                       if (block->version->type == AMD_IP_BLOCK_TYPE_SMC)
+                               r = block->version->funcs->resume(adev);
+                       else
+                               r = block->version->funcs->hw_init(adev);
+
                        DRM_INFO("RE-INIT-late: %s %s\n", block->version->funcs->name, r?"failed":"succeeded");
                        if (r)
                                return r;
index ec3dbbe..d432ba0 100644 (file)
@@ -1445,6 +1445,12 @@ static int smu_resume(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        struct smu_context *smu = &adev->smu;
 
+       if (amdgpu_sriov_vf(adev)&& !amdgpu_sriov_is_pp_one_vf(adev))
+               return 0;
+
+       if (!smu->pm_enabled)
+               return 0;
+
        pr_info("SMU is resuming...\n");
 
        ret = smu_start_smc_engine(smu);