diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0762-drm-amdgpu-psp-add-get_node_id-function.patch b/common/recipes-kernel/linux/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/common/recipes-kernel/linux/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 + |