diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1862-drm-amdgpu-Update-latest-xgmi-topology-info-after-ea.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1862-drm-amdgpu-Update-latest-xgmi-topology-info-after-ea.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1862-drm-amdgpu-Update-latest-xgmi-topology-info-after-ea.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1862-drm-amdgpu-Update-latest-xgmi-topology-info-after-ea.patch new file mode 100644 index 00000000..e0f17304 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1862-drm-amdgpu-Update-latest-xgmi-topology-info-after-ea.patch @@ -0,0 +1,84 @@ +From 603045b5d4c9e29fc275aa5fdfa287fbfeb2d223 Mon Sep 17 00:00:00 2001 +From: shaoyunl <shaoyun.liu@amd.com> +Date: Mon, 29 Apr 2019 15:15:41 -0400 +Subject: [PATCH 1862/2940] drm/amdgpu: Update latest xgmi topology info after + each device is enumulated + +Adjust the sequence of set/get xgmi topology, so driver can have the latest +XGMI topology info for future usage + +Change-Id: I627814f82459a6c9c3d72469f81309488b2a9133 +Signed-off-by: shaoyunl <shaoyun.liu@amd.com> +Acked-by: Evan Quan <evan.quan@amd.com> +Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 31 +++++++++++++++--------- + 1 file changed, 19 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +index a48c84c51775..05d4246a5a73 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +@@ -288,30 +288,40 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) + list_add_tail(&adev->gmc.xgmi.head, &hive->device_list); + list_for_each_entry(entry, &hive->device_list, head) + hive_topology->nodes[count++].node_id = entry->node_id; ++ top_info->num_nodes = count; + hive->number_devices = count; + +- /* 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, hive_topology); ++ /* update node list for other device in the hive */ ++ if (tmp_adev != adev) { ++ top_info = &tmp_adev->psp.xgmi_context.top_info; ++ 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; ++ } ++ ++ /* get latest topology info for each device from psp */ ++ list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { ++ ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count, ++ &tmp_adev->psp.xgmi_context.top_info); + 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; ++ goto exit; + } + } + +- list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { +- ret = amdgpu_xgmi_update_topology(hive, tmp_adev); +- if (ret) +- break; +- } +- + if (!ret) + ret = amdgpu_xgmi_sysfs_add_dev_info(adev, hive); + ++ mutex_unlock(&hive->hive_lock); ++exit: + if (!ret) + dev_info(adev->dev, "XGMI: Add node %d, hive 0x%llx.\n", + adev->gmc.xgmi.physical_node_id, adev->gmc.xgmi.hive_id); +@@ -320,9 +330,6 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) + adev->gmc.xgmi.physical_node_id, adev->gmc.xgmi.hive_id, + ret); + +- +- mutex_unlock(&hive->hive_lock); +-exit: + return ret; + } + +-- +2.17.1 + |