diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4408-drm-amdgpu-avoid-upload-corrupted-ta-ucode-to-psp.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4408-drm-amdgpu-avoid-upload-corrupted-ta-ucode-to-psp.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4408-drm-amdgpu-avoid-upload-corrupted-ta-ucode-to-psp.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4408-drm-amdgpu-avoid-upload-corrupted-ta-ucode-to-psp.patch new file mode 100644 index 00000000..03af0fcd --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4408-drm-amdgpu-avoid-upload-corrupted-ta-ucode-to-psp.patch @@ -0,0 +1,79 @@ +From 90813900c001e61af7a8f453168cb74114aba154 Mon Sep 17 00:00:00 2001 +From: Hawking Zhang <Hawking.Zhang@amd.com> +Date: Mon, 11 Nov 2019 12:26:36 +0800 +Subject: [PATCH 4408/4736] drm/amdgpu: avoid upload corrupted ta ucode to psp + +xgmi, ras, hdcp and dtm ta are actually separated ucode and +need to handled case by case to upload to psp. + +We support the case that ta binary have one or multiple of +them built-in. As a result, the driver should check each ta +binariy's availablity before decide to upload them to psp. + +In the terminate (unload) case, the driver will check the +context readiness before perform unload activity. It's fine +to keep it as is. + +Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> +Reviewed-by: Le Ma <Le.Ma@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +index a33d1ed6a096..2b513e41ed3c 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +@@ -569,7 +569,9 @@ static int psp_xgmi_initialize(struct psp_context *psp) + struct ta_xgmi_shared_memory *xgmi_cmd; + int ret; + +- if (!psp->adev->psp.ta_fw) ++ if (!psp->adev->psp.ta_fw || ++ !psp->adev->psp.ta_xgmi_ucode_size || ++ !psp->adev->psp.ta_xgmi_start_addr) + return -ENOENT; + + if (!psp->xgmi_context.initialized) { +@@ -779,6 +781,12 @@ static int psp_ras_initialize(struct psp_context *psp) + { + int ret; + ++ if (!psp->adev->psp.ta_ras_ucode_size || ++ !psp->adev->psp.ta_ras_start_addr) { ++ dev_warn(psp->adev->dev, "RAS: ras ta ucode is not available\n"); ++ return 0; ++ } ++ + if (!psp->ras.ras_initialized) { + ret = psp_ras_init_shared_buf(psp); + if (ret) +@@ -868,6 +876,12 @@ static int psp_hdcp_initialize(struct psp_context *psp) + { + int ret; + ++ if (!psp->adev->psp.ta_hdcp_ucode_size || ++ !psp->adev->psp.ta_hdcp_start_addr) { ++ dev_warn(psp->adev->dev, "HDCP: hdcp ta ucode is not available\n"); ++ return 0; ++ } ++ + if (!psp->hdcp_context.hdcp_initialized) { + ret = psp_hdcp_init_shared_buf(psp); + if (ret) +@@ -1041,6 +1055,12 @@ static int psp_dtm_initialize(struct psp_context *psp) + { + int ret; + ++ if (!psp->adev->psp.ta_dtm_ucode_size || ++ !psp->adev->psp.ta_dtm_start_addr) { ++ dev_warn(psp->adev->dev, "DTM: dtm ta ucode is not available\n"); ++ return 0; ++ } ++ + if (!psp->dtm_context.dtm_initialized) { + ret = psp_dtm_init_shared_buf(psp); + if (ret) +-- +2.17.1 + |