OSDN Git Service

drm/amdgpu: recover XGMI topology for SRIOV VF after reset
authorZhigang Luo <zhigang.luo@amd.com>
Mon, 6 Dec 2021 21:21:03 +0000 (16:21 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 13 Dec 2021 21:32:34 +0000 (16:32 -0500)
For SRIOV VF, the XGMI topology was not recovered after reset. This
change added code to SRIOV VF reset function to update XGMI topology
for SRIOV VF after reset.

Signed-off-by: Zhigang Luo <zhigang.luo@amd.com>
Reviewed-by: Shaoyun Liu <shaoyun.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 25a9e52..262a6b6 100644 (file)
@@ -4285,6 +4285,7 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
                                     bool from_hypervisor)
 {
        int r;
+       struct amdgpu_hive_info *hive = NULL;
 
        amdgpu_amdkfd_pre_reset(adev);
 
@@ -4313,9 +4314,19 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
        if (r)
                goto error;
 
-       amdgpu_irq_gpu_reset_resume_helper(adev);
-       r = amdgpu_ib_ring_tests(adev);
-       amdgpu_amdkfd_post_reset(adev);
+       hive = amdgpu_get_xgmi_hive(adev);
+       /* Update PSP FW topology after reset */
+       if (hive && adev->gmc.xgmi.num_physical_nodes > 1)
+               r = amdgpu_xgmi_update_topology(hive, adev);
+
+       if (hive)
+               amdgpu_put_xgmi_hive(hive);
+
+       if (!r) {
+               amdgpu_irq_gpu_reset_resume_helper(adev);
+               r = amdgpu_ib_ring_tests(adev);
+               amdgpu_amdkfd_post_reset(adev);
+       }
 
 error:
        if (!r && adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST) {