aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch144
1 files changed, 144 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch
new file mode 100644
index 00000000..8300fdc3
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch
@@ -0,0 +1,144 @@
+From c8a6026515a82088cd98e233c8f0fc81f0acafe7 Mon Sep 17 00:00:00 2001
+From: Hawking Zhang <Hawking.Zhang@amd.com>
+Date: Fri, 28 Sep 2018 21:50:37 +0800
+Subject: [PATCH 0762/2940] drm/amdgpu/psp: add get_node_id function
+
+get_node_id function is used for driver to get node_id
+for current device from xgmi ta
+
+Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Huang Rui <ray.huang@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_gmc.h | 2 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 8 ++++----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 8 ++++----
+ drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 19 +++++++++++++++++++
+ 4 files changed, 28 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
+index 9113c26a9678..1627cbc93b92 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
+@@ -89,7 +89,7 @@ struct amdgpu_gmc_funcs {
+
+ struct amdgpu_xgmi {
+ /* from psp */
+- u64 device_id;
++ u64 node_id;
+ u64 hive_id;
+ /* fixed per family */
+ u64 node_segment_size;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
+index 000e12b437f0..28700a80cddd 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
+@@ -82,7 +82,7 @@ struct psp_funcs
+ enum AMDGPU_UCODE_ID ucode_type);
+ bool (*smu_reload_quirk)(struct psp_context *psp);
+ int (*mode1_reset)(struct psp_context *psp);
+- uint64_t (*xgmi_get_device_id)(struct psp_context *psp);
++ 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);
+@@ -163,7 +163,7 @@ struct amdgpu_psp_funcs {
+
+ struct psp_xgmi_topology_info {
+ /* Generated by PSP to identify the GPU instance within xgmi connection */
+- uint64_t device_id;
++ 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
+@@ -197,8 +197,8 @@ struct psp_xgmi_topology_info {
+ ((psp)->funcs->smu_reload_quirk ? (psp)->funcs->smu_reload_quirk((psp)) : false)
+ #define psp_mode1_reset(psp) \
+ ((psp)->funcs->mode1_reset ? (psp)->funcs->mode1_reset((psp)) : false)
+-#define psp_xgmi_get_device_id(psp) \
+- ((psp)->funcs->xgmi_get_device_id ? (psp)->funcs->xgmi_get_device_id((psp)) : 0)
++#define psp_xgmi_get_node_id(psp) \
++ ((psp)->funcs->xgmi_get_node_id ? (psp)->funcs->xgmi_get_node_id((psp)) : 0)
+ #define psp_xgmi_get_hive_id(psp) \
+ ((psp)->funcs->xgmi_get_hive_id ? (psp)->funcs->xgmi_get_hive_id((psp)) : 0)
+ #define psp_xgmi_get_topology_info(psp, num_device, topology) \
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
+index 897afbb348c1..32896ba12c67 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
+@@ -73,7 +73,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
+ if ((adev->asic_type < CHIP_VEGA20) ||
+ (adev->flags & AMD_IS_APU) )
+ return 0;
+- adev->gmc.xgmi.device_id = psp_xgmi_get_device_id(&adev->psp);
++ 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));
+@@ -84,13 +84,13 @@ 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++].device_id = entry->device_id;
++ tmp_topology[count++].node_id = entry->node_id;
+
+ 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",
+- adev->gmc.xgmi.device_id,
++ adev->gmc.xgmi.node_id,
+ adev->gmc.xgmi.hive_id, ret);
+ goto exit;
+ }
+@@ -100,7 +100,7 @@ int amdgpu_xgmi_add_device(struct amdgpu_device *adev)
+ if (ret) {
+ dev_err(tmp_adev->dev,
+ "XGMI: Set topology failure on device %llx, hive %llx, ret %d",
+- tmp_adev->gmc.xgmi.device_id,
++ 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;
+diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
+index 2d338ee5fade..0f661f93f0f5 100644
+--- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
+@@ -600,6 +600,24 @@ static u64 psp_v11_0_xgmi_get_hive_id(struct psp_context *psp)
+ return hive_id;
+ }
+
++static u64 psp_v11_0_xgmi_get_node_id(struct psp_context *psp)
++{
++ struct ta_xgmi_shared_memory *xgmi_cmd;
++ int ret;
++
++ xgmi_cmd = (struct ta_xgmi_shared_memory*)psp->xgmi_context.xgmi_shared_buf;
++ memset(xgmi_cmd, 0, sizeof(struct ta_xgmi_shared_memory));
++
++ xgmi_cmd->cmd_id = TA_COMMAND_XGMI__GET_NODE_ID;
++
++ /* Invoke xgmi ta to get the node id */
++ ret = psp_xgmi_invoke(psp, xgmi_cmd->cmd_id);
++ if (ret)
++ return 0;
++ else
++ return xgmi_cmd->xgmi_out_message.get_node_id.node_id;
++}
++
+ static const struct psp_funcs psp_v11_0_funcs = {
+ .init_microcode = psp_v11_0_init_microcode,
+ .bootloader_load_sysdrv = psp_v11_0_bootloader_load_sysdrv,
+@@ -615,6 +633,7 @@ static const struct psp_funcs psp_v11_0_funcs = {
+ .xgmi_get_topology_info = psp_v11_0_xgmi_get_topology_info,
+ .xgmi_set_topology_info = psp_v11_0_xgmi_set_topology_info,
+ .xgmi_get_hive_id = psp_v11_0_xgmi_get_hive_id,
++ .xgmi_get_node_id = psp_v11_0_xgmi_get_node_id,
+ };
+
+ void psp_v11_0_set_psp_funcs(struct psp_context *psp)
+--
+2.17.1
+