aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4408-drm-amdgpu-avoid-upload-corrupted-ta-ucode-to-psp.patch
diff options
context:
space:
mode:
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.patch79
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
+