aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4639-drm-amdgpu-drop-asd-shared-memory.patch
diff options
context:
space:
mode:
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.patch156
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
+