diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch new file mode 100644 index 00000000..afe325f9 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch @@ -0,0 +1,124 @@ +From 09eb8b0e15d46cbdb458ff88a382d2bcf9d951c7 Mon Sep 17 00:00:00 2001 +From: Hawking Zhang <Hawking.Zhang@amd.com> +Date: Sat, 29 Sep 2018 21:52:50 +0800 +Subject: [PATCH 0763/2940] drm/amdgpu/psp: update topology info structures + +topology info structure needs to match with the one defined +in xgmi ta + +Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> +Reviewed-by: Shaoyun Liu <Shaoyun.Liu@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 29 +++++++++++------------- + drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 12 ++++------ + 2 files changed, 18 insertions(+), 23 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +index 28700a80cddd..9ec5d1a666a6 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +@@ -37,6 +37,7 @@ + #define PSP_TMR_SIZE 0x400000 + + struct psp_context; ++struct psp_xgmi_node_info; + struct psp_xgmi_topology_info; + + enum psp_ring_type +@@ -85,9 +86,9 @@ struct psp_funcs + uint64_t (*xgmi_get_node_id)(struct psp_context *psp); + uint64_t (*xgmi_get_hive_id)(struct psp_context *psp); + int (*xgmi_get_topology_info)(struct psp_context *psp, int number_devices, +- struct psp_xgmi_topology_info *topology); ++ struct psp_xgmi_topology_info *topology); + int (*xgmi_set_topology_info)(struct psp_context *psp, int number_devices, +- struct psp_xgmi_topology_info *topology); ++ struct psp_xgmi_topology_info *topology); + }; + + struct psp_xgmi_context { +@@ -161,21 +162,17 @@ 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 { +- /* Generated by PSP to identify the GPU instance within xgmi connection */ +- uint64_t node_id; +- /* +- * If all bits set to 0 , driver indicates it wants to retrieve the xgmi +- * connection vector topology, but not access enable the connections +- * if some or all bits are set to 1, driver indicates it want to retrieve the +- * current xgmi topology and access enable the link to GPU[i] associated +- * with the bit position in the vector. +- * On return,: bits indicated which xgmi links are present/active depending +- * on the value passed in. The relative bit offset for the relative GPU index +- * within the hive is always marked active. +- */ +- uint32_t connection_mask; +- uint32_t reserved; /* must be 0 */ ++ uint32_t num_nodes; ++ struct psp_xgmi_node_info nodes[AMDGPU_XGMI_MAX_CONNECTED_NODES]; + }; + + #define psp_prep_cmd_buf(ucode, type) (psp)->funcs->prep_cmd_buf((ucode), (type)) +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +index 32896ba12c67..e92b4548db49 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +@@ -63,7 +63,7 @@ static struct amdgpu_hive_info *amdgpu_get_xgmi_hive(struct amdgpu_device *adev) + + int amdgpu_xgmi_add_device(struct amdgpu_device *adev) + { +- struct psp_xgmi_topology_info tmp_topology[AMDGPU_MAX_XGMI_DEVICE_PER_HIVE]; ++ struct psp_xgmi_topology_info tmp_topology; + struct amdgpu_hive_info *hive; + struct amdgpu_xgmi *entry; + struct amdgpu_device *tmp_adev; +@@ -76,7 +76,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) + adev->gmc.xgmi.node_id = psp_xgmi_get_node_id(&adev->psp); + adev->gmc.xgmi.hive_id = psp_xgmi_get_hive_id(&adev->psp); + +- memset(&tmp_topology[0], 0, sizeof(tmp_topology)); ++ memset(&tmp_topology, 0, sizeof(tmp_topology)); + mutex_lock(&xgmi_mutex); + hive = amdgpu_get_xgmi_hive(adev); + if (!hive) +@@ -84,9 +84,9 @@ 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) +- tmp_topology[count++].node_id = entry->node_id; ++ tmp_topology.nodes[count++].node_id = entry->node_id; + +- ret = psp_xgmi_get_topology_info(&adev->psp, count, tmp_topology); ++ 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", +@@ -96,7 +96,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) + } + /* 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); ++ ret = psp_xgmi_set_topology_info(&tmp_adev->psp, count, &tmp_topology); + if (ret) { + dev_err(tmp_adev->dev, + "XGMI: Set topology failure on device %llx, hive %llx, ret %d", +@@ -115,5 +115,3 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev) + mutex_unlock(&xgmi_mutex); + return ret; + } +- +- +-- +2.17.1 + |