aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4312-drm-amdgpu-clear-UVD-VCPU-buffer-when-err_event_athu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4312-drm-amdgpu-clear-UVD-VCPU-buffer-when-err_event_athu.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4312-drm-amdgpu-clear-UVD-VCPU-buffer-when-err_event_athu.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4312-drm-amdgpu-clear-UVD-VCPU-buffer-when-err_event_athu.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4312-drm-amdgpu-clear-UVD-VCPU-buffer-when-err_event_athu.patch
new file mode 100644
index 00000000..eaa0a0f3
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4312-drm-amdgpu-clear-UVD-VCPU-buffer-when-err_event_athu.patch
@@ -0,0 +1,46 @@
+From 986adea80905c6b7232acd8b5dc702c39fb40c3e Mon Sep 17 00:00:00 2001
+From: Le Ma <le.ma@amd.com>
+Date: Fri, 25 Oct 2019 16:50:53 +0800
+Subject: [PATCH 4312/4736] drm/amdgpu: clear UVD VCPU buffer when
+ err_event_athub generated
+
+The err_event_athub error will mess up the buffer and cause UVD resume hang.
+
+Change-Id: If17a2161fb9b1b52eac08de00d2e935191bdbf99
+Signed-off-by: Le Ma <le.ma@amd.com>
+Reviewed-by: Hawking Zhang <hawking.zhang@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+index 4e5d13e41f6a..d1b10b5583ec 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+@@ -39,6 +39,8 @@
+ #include "cikd.h"
+ #include "uvd/uvd_4_2_d.h"
+
++#include "amdgpu_ras.h"
++
+ /* 1 second timeout */
+ #define UVD_IDLE_TIMEOUT msecs_to_jiffies(1000)
+
+@@ -372,7 +374,13 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)
+ if (!adev->uvd.inst[j].saved_bo)
+ return -ENOMEM;
+
+- memcpy_fromio(adev->uvd.inst[j].saved_bo, ptr, size);
++ /* re-write 0 since err_event_athub will corrupt VCPU buffer */
++ if (amdgpu_ras_intr_triggered()) {
++ DRM_WARN("UVD VCPU state may lost due to RAS ERREVENT_ATHUB_INTERRUPT\n");
++ memset(adev->uvd.inst[j].saved_bo, 0, size);
++ } else {
++ memcpy_fromio(adev->uvd.inst[j].saved_bo, ptr, size);
++ }
+ }
+ return 0;
+ }
+--
+2.17.1
+