aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1869-drm-amdgpu-Implement-get-num-of-hops-between-two-xgm.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1869-drm-amdgpu-Implement-get-num-of-hops-between-two-xgm.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1869-drm-amdgpu-Implement-get-num-of-hops-between-two-xgm.patch153
1 files changed, 153 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1869-drm-amdgpu-Implement-get-num-of-hops-between-two-xgm.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1869-drm-amdgpu-Implement-get-num-of-hops-between-two-xgm.patch
new file mode 100644
index 00000000..7af7fd5a
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1869-drm-amdgpu-Implement-get-num-of-hops-between-two-xgm.patch
@@ -0,0 +1,153 @@
+From 3c25e760524e68e2182437c747ebb5c2ac4256af Mon Sep 17 00:00:00 2001
+From: shaoyunl <shaoyun.liu@amd.com>
+Date: Wed, 17 Apr 2019 14:28:18 -0400
+Subject: [PATCH 1869/2940] drm/amdgpu: Implement get num of hops between two
+ xgmi device
+
+KFD need to provide the info for upper level to determine the data path
+
+Change-Id: Idc809e8f3381b9222dd7be96539522d440f3ee7d
+Signed-off-by: shaoyunl <shaoyun.liu@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 26 +++++++++++++-----------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 24 ++++++++++++++++------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h | 3 ++-
+ 3 files changed, 34 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
+index cde113f07c96..acbc18b594a2 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
+@@ -95,12 +95,26 @@ struct psp_funcs
+ int (*ras_cure_posion)(struct psp_context *psp, uint64_t *mode_ptr);
+ };
+
++#define AMDGPU_XGMI_MAX_CONNECTED_NODES 64
++struct psp_xgmi_node_info {
++ uint64_t node_id;
++ uint8_t num_hops;
++ uint8_t is_sharing_enabled;
++ enum ta_xgmi_assigned_sdma_engine sdma_engine;
++};
++
++struct psp_xgmi_topology_info {
++ uint32_t num_nodes;
++ struct psp_xgmi_node_info nodes[AMDGPU_XGMI_MAX_CONNECTED_NODES];
++};
++
+ struct psp_xgmi_context {
+ uint8_t initialized;
+ uint32_t session_id;
+ struct amdgpu_bo *xgmi_shared_bo;
+ uint64_t xgmi_shared_mc_addr;
+ void *xgmi_shared_buf;
++ struct psp_xgmi_topology_info top_info;
+ };
+
+ struct psp_ras_context {
+@@ -181,18 +195,6 @@ struct amdgpu_psp_funcs {
+ enum AMDGPU_UCODE_ID);
+ };
+
+-#define AMDGPU_XGMI_MAX_CONNECTED_NODES 64
+-struct psp_xgmi_node_info {
+- uint64_t node_id;
+- uint8_t num_hops;
+- uint8_t is_sharing_enabled;
+- enum ta_xgmi_assigned_sdma_engine sdma_engine;
+-};
+-
+-struct psp_xgmi_topology_info {
+- uint32_t num_nodes;
+- struct psp_xgmi_node_info nodes[AMDGPU_XGMI_MAX_CONNECTED_NODES];
+-};
+
+ #define psp_ring_init(psp, type) (psp)->funcs->ring_init((psp), (type))
+ #define psp_ring_create(psp, type) (psp)->funcs->ring_create((psp), (type))
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
+index 05d4246a5a73..ae2a1ac01dba 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
+@@ -238,7 +238,7 @@ int amdgpu_xgmi_update_topology(struct amdgpu_hive_info *hive, struct amdgpu_dev
+ /* Each psp need to set the latest topology */
+ ret = psp_xgmi_set_topology_info(&adev->psp,
+ hive->number_devices,
+- &hive->topology_info);
++ &adev->psp.xgmi_context.top_info);
+ if (ret)
+ dev_err(adev->dev,
+ "XGMI: Set topology failure on device %llx, hive %llx, ret %d",
+@@ -248,9 +248,22 @@ int amdgpu_xgmi_update_topology(struct amdgpu_hive_info *hive, struct amdgpu_dev
+ return ret;
+ }
+
++
++int amdgpu_xgmi_get_hops_count(struct amdgpu_device *adev,
++ struct amdgpu_device *peer_adev)
++{
++ struct psp_xgmi_topology_info *top = &adev->psp.xgmi_context.top_info;
++ int i;
++
++ for (i = 0 ; i < top->num_nodes; ++i)
++ if (top->nodes[i].node_id == peer_adev->gmc.xgmi.node_id)
++ return top->nodes[i].num_hops;
++ return -EINVAL;
++}
++
+ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
+ {
+- struct psp_xgmi_topology_info *hive_topology;
++ struct psp_xgmi_topology_info *top_info;
+ struct amdgpu_hive_info *hive;
+ struct amdgpu_xgmi *entry;
+ struct amdgpu_device *tmp_adev = NULL;
+@@ -283,11 +296,11 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
+ goto exit;
+ }
+
+- hive_topology = &hive->topology_info;
++ top_info = &adev->psp.xgmi_context.top_info;
+
+ 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->nodes[count++].node_id = entry->node_id;
+ top_info->num_nodes = count;
+ hive->number_devices = count;
+
+@@ -305,8 +318,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
+
+ /* 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);
++ ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count, top_info);
+ if (ret) {
+ dev_err(tmp_adev->dev,
+ "XGMI: Get topology failure on device %llx, hive %llx, ret %d",
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h
+index 3e9c91e9a4bf..fbcee31788c4 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h
+@@ -27,7 +27,6 @@
+ struct amdgpu_hive_info {
+ uint64_t hive_id;
+ struct list_head device_list;
+- struct psp_xgmi_topology_info topology_info;
+ int number_devices;
+ struct mutex hive_lock, reset_lock;
+ struct kobject *kobj;
+@@ -41,6 +40,8 @@ int amdgpu_xgmi_update_topology(struct amdgpu_hive_info *hive, struct amdgpu_dev
+ int amdgpu_xgmi_add_device(struct amdgpu_device *adev);
+ void amdgpu_xgmi_remove_device(struct amdgpu_device *adev);
+ int amdgpu_xgmi_set_pstate(struct amdgpu_device *adev, int pstate);
++int amdgpu_xgmi_get_hops_count(struct amdgpu_device *adev,
++ struct amdgpu_device *peer_adev);
+
+ static inline bool amdgpu_xgmi_same_hive(struct amdgpu_device *adev,
+ struct amdgpu_device *bo_adev)
+--
+2.17.1
+