drm/amdgpu: Each PSP need to get latest topology info on XGMI configuration
authorshaoyunl <Shaoyun.Liu@amd.com>
Mon, 15 Oct 2018 18:40:06 +0000 (14:40 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Nov 2018 21:28:32 +0000 (16:28 -0500)
Driver need to call each psp instance to get topology info before set topology

Signed-off-by: shaoyunl <Shaoyun.Liu@amd.com>
reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c

index 56acdeab38125965b5daf1489608bf36d4fa5ce9..909216a9b447ba799e871bc4e5deec4f4f37b336 100644 (file)
@@ -88,14 +88,19 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
        list_for_each_entry(entry, &hive->device_list, head)
                tmp_topology->nodes[count++].node_id = entry->node_id;
 
-       ret = psp_xgmi_get_topology_info(&adev->psp, count, tmp_topology);
-       if (ret) {
-               dev_err(adev->dev,
-                       "XGMI: Get topology failure on device %llx, hive %llx, ret %d",
-                       adev->gmc.xgmi.node_id,
-                       adev->gmc.xgmi.hive_id, ret);
-               goto exit;
+       /* Each psp need to get the latest topology */
+       list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
+               ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count, tmp_topology);
+               if (ret) {
+                       dev_err(tmp_adev->dev,
+                               "XGMI: Get topology failure on device %llx, hive %llx, ret %d",
+                               tmp_adev->gmc.xgmi.node_id,
+                               tmp_adev->gmc.xgmi.hive_id, ret);
+                       /* To do : continue with some node failed or disable the whole hive */
+                       break;
+               }
        }
+
        /* Each psp need to set the latest topology */
        list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
                ret = psp_xgmi_set_topology_info(&tmp_adev->psp, count, tmp_topology);