[PATCH 2/3] drm/amdgpu: unload asd in psp hw de-init phase

Deucher, Alexander Alexander.Deucher at amd.com
Mon Dec 2 16:44:55 UTC 2019


> -----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 2/3] drm/amdgpu: unload asd in psp hw de-init phase
> 
> issue unload_ta_cmd to tOS to unload asd driver
> 
> Change-Id: I697cfc1774205ed6cbe22eb3c16143b603543564
> Signed-off-by: Hawking Zhang <Hawking.Zhang at amd.com>


Reviewed-by: Alex Deucher <alexander.deucher at amd.com>


> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 36
> +++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> index bdc9e7ae4892..0e8907179e07 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -356,6 +356,40 @@ static int psp_asd_load(struct psp_context *psp)
>  	return ret;
>  }
> 
> +static void psp_prep_asd_unload_cmd_buf(struct psp_gfx_cmd_resp
> *cmd,
> +					uint32_t asd_session_id)
> +{
> +	cmd->cmd_id = GFX_CMD_ID_UNLOAD_TA;
> +	cmd->cmd.cmd_unload_ta.session_id = asd_session_id; }
> +
> +static int psp_asd_unload(struct psp_context *psp) {
> +	int ret;
> +	struct psp_gfx_cmd_resp *cmd;
> +
> +	if (amdgpu_sriov_vf(psp->adev))
> +		return 0;
> +
> +	if (!psp->asd_context.asd_initialized)
> +		return 0;
> +
> +	cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
> +	if (!cmd)
> +		return -ENOMEM;
> +
> +	psp_prep_asd_unload_cmd_buf(cmd, psp-
> >asd_context.session_id);
> +
> +	ret = psp_cmd_submit_buf(psp, NULL, cmd,
> +				 psp->fence_buf_mc_addr);
> +	if (!ret)
> +		psp->asd_context.asd_initialized = false;
> +
> +	kfree(cmd);
> +
> +	return ret;
> +}
> +
>  static void psp_prep_reg_prog_cmd_buf(struct psp_gfx_cmd_resp *cmd,
>  		uint32_t id, uint32_t value)
>  {
> @@ -1583,6 +1617,8 @@ static int psp_hw_fini(void *handle)
>  		psp_hdcp_terminate(psp);
>  	}
> 
> +	psp_asd_unload(psp);
> +
>  	psp_ring_destroy(psp, PSP_RING_TYPE__KM);
> 
>  	pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL;
> --
> 2.17.1



More information about the amd-gfx mailing list