diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/2051-drm-amdgpu-fix-ring-test-failure-issue-during-s3-in-.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/2051-drm-amdgpu-fix-ring-test-failure-issue-during-s3-in-.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/2051-drm-amdgpu-fix-ring-test-failure-issue-during-s3-in-.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/2051-drm-amdgpu-fix-ring-test-failure-issue-during-s3-in-.patch new file mode 100644 index 00000000..bc1dd3c6 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/2051-drm-amdgpu-fix-ring-test-failure-issue-during-s3-in-.patch @@ -0,0 +1,58 @@ +From d51aa17fa21873f0945f557381ab2721630d6851 Mon Sep 17 00:00:00 2001 +From: Louis Li <Ching-shih.Li@amd.com> +Date: Sat, 25 May 2019 06:39:47 +0800 +Subject: [PATCH 2051/2940] drm/amdgpu: fix ring test failure issue during s3 + in vce 3.0 (V2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[What] +vce ring test fails consistently during resume in s3 cycle, due to +mismatch read & write pointers. +On debug/analysis its found that rptr to be compared is not being +correctly updated/read, which leads to this failure. +Below is the failure signature: + [drm:amdgpu_vce_ring_test_ring] *ERROR* amdgpu: ring 12 test failed + [drm:amdgpu_device_ip_resume_phase2] *ERROR* resume of IP block <vce_v3_0> failed -110 + [drm:amdgpu_device_resume] *ERROR* amdgpu_device_ip_resume failed (-110). + +[How] +fetch rptr appropriately, meaning move its read location further down +in the code flow. +With this patch applied the s3 failure is no more seen for >5k s3 cycles, +which otherwise is pretty consistent. + +V2: remove reduntant fetch of rptr + +Signed-off-by: Louis Li <Ching-shih.Li@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +index c021b114c8a4..f7189e22f6b7 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +@@ -1072,7 +1072,7 @@ void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq, + int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring) + { + struct amdgpu_device *adev = ring->adev; +- uint32_t rptr = amdgpu_ring_get_rptr(ring); ++ uint32_t rptr; + unsigned i; + int r, timeout = adev->usec_timeout; + +@@ -1084,6 +1084,8 @@ int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring) + if (r) + return r; + ++ rptr = amdgpu_ring_get_rptr(ring); ++ + amdgpu_ring_write(ring, VCE_CMD_END); + amdgpu_ring_commit(ring); + +-- +2.17.1 + |