diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4639-drm-amdgpu-drop-asd-shared-memory.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4639-drm-amdgpu-drop-asd-shared-memory.patch | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4639-drm-amdgpu-drop-asd-shared-memory.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4639-drm-amdgpu-drop-asd-shared-memory.patch new file mode 100644 index 00000000..90e27fd3 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4639-drm-amdgpu-drop-asd-shared-memory.patch @@ -0,0 +1,156 @@ +From d28621c36f48e8359a71a37f1f4f2e524e1cd9f8 Mon Sep 17 00:00:00 2001 +From: Hawking Zhang <Hawking.Zhang@amd.com> +Date: Mon, 2 Dec 2019 13:16:09 +0800 +Subject: [PATCH 4639/4736] drm/amdgpu: drop asd shared memory + +asd shared memory is not needed since drivers doesn't +invoke any further cmd to asd directly after the asd +loading. trust application is the one who needs +to talk to asd after the initialization + +Change-Id: I4d3422cb8a2c27ece99a7373069dfc27898c5ecc +Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Acked-by: Evan Quan <evan.quan@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 44 +++++++------------------ + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 12 ++++--- + 2 files changed, 18 insertions(+), 38 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +index f219e2f77b4c..ccd0c8d7c224 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +@@ -320,35 +320,17 @@ static int psp_tmr_load(struct psp_context *psp) + return ret; + } + +-static void psp_prep_asd_cmd_buf(struct psp_gfx_cmd_resp *cmd, +- uint64_t asd_mc, uint64_t asd_mc_shared, +- uint32_t size, uint32_t shared_size) ++static void psp_prep_asd_load_cmd_buf(struct psp_gfx_cmd_resp *cmd, ++ uint64_t asd_mc, uint32_t size) + { + cmd->cmd_id = GFX_CMD_ID_LOAD_ASD; + cmd->cmd.cmd_load_ta.app_phy_addr_lo = lower_32_bits(asd_mc); + cmd->cmd.cmd_load_ta.app_phy_addr_hi = upper_32_bits(asd_mc); + cmd->cmd.cmd_load_ta.app_len = size; + +- cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_lo = lower_32_bits(asd_mc_shared); +- cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_hi = upper_32_bits(asd_mc_shared); +- cmd->cmd.cmd_load_ta.cmd_buf_len = shared_size; +-} +- +-static int psp_asd_init(struct psp_context *psp) +-{ +- int ret; +- +- /* +- * Allocate 16k memory aligned to 4k from Frame Buffer (local +- * physical) for shared ASD <-> Driver +- */ +- ret = amdgpu_bo_create_kernel(psp->adev, PSP_ASD_SHARED_MEM_SIZE, +- PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM, +- &psp->asd_shared_bo, +- &psp->asd_shared_mc_addr, +- &psp->asd_shared_buf); +- +- return ret; ++ cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_lo = 0; ++ cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_hi = 0; ++ cmd->cmd.cmd_load_ta.cmd_buf_len = 0; + } + + static int psp_asd_load(struct psp_context *psp) +@@ -370,11 +352,15 @@ static int psp_asd_load(struct psp_context *psp) + memset(psp->fw_pri_buf, 0, PSP_1_MEG); + memcpy(psp->fw_pri_buf, psp->asd_start_addr, psp->asd_ucode_size); + +- psp_prep_asd_cmd_buf(cmd, psp->fw_pri_mc_addr, psp->asd_shared_mc_addr, +- psp->asd_ucode_size, PSP_ASD_SHARED_MEM_SIZE); ++ psp_prep_asd_load_cmd_buf(cmd, psp->fw_pri_mc_addr, ++ psp->asd_ucode_size); + + ret = psp_cmd_submit_buf(psp, NULL, cmd, + psp->fence_buf_mc_addr); ++ if (!ret) { ++ psp->asd_context.asd_initialized = true; ++ psp->asd_context.session_id = cmd->resp.session_id; ++ } + + kfree(cmd); + +@@ -1213,12 +1199,6 @@ static int psp_hw_start(struct psp_context *psp) + return ret; + } + +- ret = psp_asd_init(psp); +- if (ret) { +- DRM_ERROR("PSP asd init failed!\n"); +- return ret; +- } +- + ret = psp_asd_load(psp); + if (ret) { + DRM_ERROR("PSP load asd failed!\n"); +@@ -1632,8 +1612,6 @@ static int psp_hw_fini(void *handle) + &psp->fw_pri_mc_addr, &psp->fw_pri_buf); + amdgpu_bo_free_kernel(&psp->fence_buf_bo, + &psp->fence_buf_mc_addr, &psp->fence_buf); +- amdgpu_bo_free_kernel(&psp->asd_shared_bo, &psp->asd_shared_mc_addr, +- &psp->asd_shared_buf); + amdgpu_bo_free_kernel(&psp->cmd_buf_bo, &psp->cmd_buf_mc_addr, + (void **)&psp->cmd_buf_mem); + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +index 40594f27dab1..5f8fd3e3535b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +@@ -32,7 +32,6 @@ + + #define PSP_FENCE_BUFFER_SIZE 0x1000 + #define PSP_CMD_BUFFER_SIZE 0x1000 +-#define PSP_ASD_SHARED_MEM_SIZE 0x4000 + #define PSP_XGMI_SHARED_MEM_SIZE 0x4000 + #define PSP_RAS_SHARED_MEM_SIZE 0x4000 + #define PSP_1_MEG 0x100000 +@@ -130,6 +129,11 @@ struct psp_xgmi_topology_info { + struct psp_xgmi_node_info nodes[AMDGPU_XGMI_MAX_CONNECTED_NODES]; + }; + ++struct psp_asd_context { ++ bool asd_initialized; ++ uint32_t session_id; ++}; ++ + struct psp_xgmi_context { + uint8_t initialized; + uint32_t session_id; +@@ -238,15 +242,12 @@ struct psp_context + struct amdgpu_bo *tmr_bo; + uint64_t tmr_mc_addr; + +- /* asd firmware and buffer */ ++ /* asd firmware */ + const struct firmware *asd_fw; + uint32_t asd_fw_version; + uint32_t asd_feature_version; + uint32_t asd_ucode_size; + uint8_t *asd_start_addr; +- struct amdgpu_bo *asd_shared_bo; +- uint64_t asd_shared_mc_addr; +- void *asd_shared_buf; + + /* fence buffer */ + struct amdgpu_bo *fence_buf_bo; +@@ -281,6 +282,7 @@ struct psp_context + uint32_t ta_dtm_ucode_size; + uint8_t *ta_dtm_start_addr; + ++ struct psp_asd_context asd_context; + struct psp_xgmi_context xgmi_context; + struct psp_ras_context ras; + struct psp_hdcp_context hdcp_context; +-- +2.17.1 + |