aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4640-drm-amdgpu-unload-asd-in-psp-hw-de-init-phase.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4640-drm-amdgpu-unload-asd-in-psp-hw-de-init-phase.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4640-drm-amdgpu-unload-asd-in-psp-hw-de-init-phase.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4640-drm-amdgpu-unload-asd-in-psp-hw-de-init-phase.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4640-drm-amdgpu-unload-asd-in-psp-hw-de-init-phase.patch
new file mode 100644
index 00000000..540b2d02
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4640-drm-amdgpu-unload-asd-in-psp-hw-de-init-phase.patch
@@ -0,0 +1,72 @@
+From ae5de338aad5f6a846bf2398df484b4b62bf56e2 Mon Sep 17 00:00:00 2001
+From: Hawking Zhang <Hawking.Zhang@amd.com>
+Date: Mon, 2 Dec 2019 13:37:42 +0800
+Subject: [PATCH 4640/4736] drm/amdgpu: unload asd in psp hw de-init phase
+
+issue unload_ta_cmd to tOS to unload asd driver
+
+Change-Id: I8edde7e57bb1920f897e16354f2fb4103a51f656
+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 | 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 ccd0c8d7c224..fe2b24e98268 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+@@ -367,6 +367,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)
+ {
+@@ -1604,6 +1638,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
+