Commit 75b2fce2 authored by Le Ma's avatar Le Ma Committed by Alex Deucher

drm/amdgpu: skip get/update xgmi topology info when no psp exists

We don't currently have psp support for arcturus so provide a alternative
mechanism in the meantime.
Signed-off-by: default avatarLe Ma <le.ma@amd.com>
Reviewed-by: default avatarFeifei Xu <Feifei.Xu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e7773c1c
...@@ -296,7 +296,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) ...@@ -296,7 +296,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
struct amdgpu_xgmi *entry; struct amdgpu_xgmi *entry;
struct amdgpu_device *tmp_adev = NULL; struct amdgpu_device *tmp_adev = NULL;
int count = 0, ret = -EINVAL; int count = 0, ret = 0;
if (!adev->gmc.xgmi.supported) if (!adev->gmc.xgmi.supported)
return 0; return 0;
...@@ -337,29 +337,32 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) ...@@ -337,29 +337,32 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
top_info->num_nodes = count; top_info->num_nodes = count;
hive->number_devices = count; hive->number_devices = count;
list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { if (amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_PSP)) {
/* update node list for other device in the hive */ list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
if (tmp_adev != adev) { /* update node list for other device in the hive */
top_info = &tmp_adev->psp.xgmi_context.top_info; if (tmp_adev != adev) {
top_info->nodes[count - 1].node_id = adev->gmc.xgmi.node_id; top_info = &tmp_adev->psp.xgmi_context.top_info;
top_info->num_nodes = count; top_info->nodes[count - 1].node_id =
adev->gmc.xgmi.node_id;
top_info->num_nodes = count;
}
ret = amdgpu_xgmi_update_topology(hive, tmp_adev);
if (ret)
goto exit;
} }
ret = amdgpu_xgmi_update_topology(hive, tmp_adev);
if (ret)
goto exit;
}
/* get latest topology info for each device from psp */ /* get latest topology info for each device from psp */
list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count, ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count,
&tmp_adev->psp.xgmi_context.top_info); &tmp_adev->psp.xgmi_context.top_info);
if (ret) { if (ret) {
dev_err(tmp_adev->dev, dev_err(tmp_adev->dev,
"XGMI: Get topology failure on device %llx, hive %llx, ret %d", "XGMI: Get topology failure on device %llx, hive %llx, ret %d",
tmp_adev->gmc.xgmi.node_id, tmp_adev->gmc.xgmi.node_id,
tmp_adev->gmc.xgmi.hive_id, ret); tmp_adev->gmc.xgmi.hive_id, ret);
/* To do : continue with some node failed or disable the whole hive */ /* To do : continue with some node failed or disable the whole hive */
goto exit; goto exit;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment