diff options
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.patch | 46 |
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 + |