diff options
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.patch | 153 |
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 + |