diff options
| author | Louis Li <Ching-shih.Li@amd.com> | 2019-05-24 18:39:47 -0400 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2019-06-05 12:12:21 -0400 |
| commit | ce0e22f5d886d1b56c7ab4347c45b9ac5fcc058d (patch) | |
| tree | 45d411047ecd7d2b7c6d68e0617b78ed8af76eb7 | |
| parent | 2a3e0b716296a504d9e65fea7acb379c86fe4283 (diff) | |
drm/amdgpu: fix ring test failure issue during s3 in vce 3.0 (V2)
[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>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 4 |
1 files changed, 3 insertions, 1 deletions
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, | |||
| 1072 | int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring) | 1072 | int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring) |
| 1073 | { | 1073 | { |
| 1074 | struct amdgpu_device *adev = ring->adev; | 1074 | struct amdgpu_device *adev = ring->adev; |
| 1075 | uint32_t rptr = amdgpu_ring_get_rptr(ring); | 1075 | uint32_t rptr; |
| 1076 | unsigned i; | 1076 | unsigned i; |
| 1077 | int r, timeout = adev->usec_timeout; | 1077 | int r, timeout = adev->usec_timeout; |
| 1078 | 1078 | ||
| @@ -1084,6 +1084,8 @@ int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring) | |||
| 1084 | if (r) | 1084 | if (r) |
| 1085 | return r; | 1085 | return r; |
| 1086 | 1086 | ||
| 1087 | rptr = amdgpu_ring_get_rptr(ring); | ||
| 1088 | |||
| 1087 | amdgpu_ring_write(ring, VCE_CMD_END); | 1089 | amdgpu_ring_write(ring, VCE_CMD_END); |
| 1088 | amdgpu_ring_commit(ring); | 1090 | amdgpu_ring_commit(ring); |
| 1089 | 1091 | ||
