[PATCH 1/3] drm/amdgpu: drop asd shared memory
Zhang, Hawking
Hawking.Zhang at amd.com
Tue Dec 3 02:58:59 UTC 2019
Correct the typo: gfx -> gfx driver in first sentence.
-----Original Message-----
From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Zhang, Hawking
Sent: 2019年12月3日 10:57
To: Deucher, Alexander <Alexander.Deucher at amd.com>; amd-gfx at lists.freedesktop.org; Min, Frank <Frank.Min at amd.com>; Clements, John <John.Clements at amd.com>
Subject: RE: [PATCH 1/3] drm/amdgpu: drop asd shared memory
RE - Do we need to keep that memory around for the TAs or do they use some other memory?
Hi Alex,
Each TA owns its shared memory for cmd that gfx driver send to TEE. The command could be different per TA and might be using simultaneously so the shared memory can't be shared among Tas.
Originally, we also created shared buffer for ASD driver. but since gfx driver is not privileged to talk to ASD directly. The shared buffer is actually never used.
Regards,
Hawking
-----Original Message-----
From: Deucher, Alexander <Alexander.Deucher at amd.com>
Sent: 2019年12月3日 0:44
To: Zhang, Hawking <Hawking.Zhang at amd.com>; amd-gfx at lists.freedesktop.org; Min, Frank <Frank.Min at amd.com>; Clements, John <John.Clements at amd.com>
Cc: Zhang, Hawking <Hawking.Zhang at amd.com>
Subject: RE: [PATCH 1/3] drm/amdgpu: drop asd shared memory
> -----Original Message-----
> From: Hawking Zhang <Hawking.Zhang at amd.com>
> Sent: Monday, December 2, 2019 1:04 AM
> To: amd-gfx at lists.freedesktop.org; Min, Frank <Frank.Min at amd.com>;
> Clements, John <John.Clements at amd.com>; Deucher, Alexander
> <Alexander.Deucher at amd.com>
> Cc: Zhang, Hawking <Hawking.Zhang at amd.com>
> Subject: [PATCH 1/3] 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
>
Do we need to keep that memory around for the TAs or do they use some other memory?
Alex
> Change-Id: I728afa4c7e8b67bc06678b10e92ac064ba10173e
> Signed-off-by: Hawking Zhang <Hawking.Zhang at 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 d8ef7098ffdf..bdc9e7ae4892 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -309,35 +309,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) @@ -359,11 +341,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);
>
> @@ -1198,12 +1184,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"); @@ -1611,8 +1591,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 6de0ee97861f..a4d7690ea577 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
> 0x8000
> #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
_______________________________________________
amd-gfx mailing list
amd-gfx at lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7Chawking.zhang%40amd.com%7Cc70c3ac8f5ab4f94fdce08d7779c8e75%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637109386617737275&sdata=8m1uX%2FgM051uKZ%2BVuTHjah5p5KNrvuWKKBRcaR%2F0uqk%3D&reserved=0
More information about the amd-gfx
mailing list