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....@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 474f8ea58aa5..7b07af1873bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -4284,6 +4284,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);
 
@@ -4312,9 +4313,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) {
-- 
2.17.1

Reply via email to