bool from_hypervisor)
 {
        int r;
+       struct amdgpu_hive_info *hive = NULL;
 
        amdgpu_amdkfd_pre_reset(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) {