aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch124
1 files changed, 124 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0763-drm-amdgpu-psp-update-topology-info-structures.patch
new file mode 100644
index 00000000..afe325f9
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/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
+