Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/{uvd,vcn}: fetch ring's read_ptr after alloc

[What]
readptr read always returns zero, since most likely
these blocks are either power or clock gated.

[How]
fetch rptr after amdgpu_ring_alloc() which informs
the power management code that the block is about to be
used and hence the gating is turned off.

Signed-off-by: Louis Li <Ching-shih.Li@amd.com>
Signed-off-by: Shirish S <shirish.s@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

authored by

Shirish S and committed by
Alex Deucher
517b91f4 671e2ee5

+11 -3
+3 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
··· 594 594 int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring) 595 595 { 596 596 struct amdgpu_device *adev = ring->adev; 597 - uint32_t rptr = amdgpu_ring_get_rptr(ring); 597 + uint32_t rptr; 598 598 unsigned i; 599 599 int r; 600 600 601 601 r = amdgpu_ring_alloc(ring, 16); 602 602 if (r) 603 603 return r; 604 + 605 + rptr = amdgpu_ring_get_rptr(ring); 604 606 605 607 amdgpu_ring_write(ring, VCN_ENC_CMD_END); 606 608 amdgpu_ring_commit(ring);
+4 -1
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
··· 170 170 static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring) 171 171 { 172 172 struct amdgpu_device *adev = ring->adev; 173 - uint32_t rptr = amdgpu_ring_get_rptr(ring); 173 + uint32_t rptr; 174 174 unsigned i; 175 175 int r; 176 176 177 177 r = amdgpu_ring_alloc(ring, 16); 178 178 if (r) 179 179 return r; 180 + 181 + rptr = amdgpu_ring_get_rptr(ring); 182 + 180 183 amdgpu_ring_write(ring, HEVC_ENC_CMD_END); 181 184 amdgpu_ring_commit(ring); 182 185
+4 -1
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
··· 175 175 static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring) 176 176 { 177 177 struct amdgpu_device *adev = ring->adev; 178 - uint32_t rptr = amdgpu_ring_get_rptr(ring); 178 + uint32_t rptr; 179 179 unsigned i; 180 180 int r; 181 181 ··· 185 185 r = amdgpu_ring_alloc(ring, 16); 186 186 if (r) 187 187 return r; 188 + 189 + rptr = amdgpu_ring_get_rptr(ring); 190 + 188 191 amdgpu_ring_write(ring, HEVC_ENC_CMD_END); 189 192 amdgpu_ring_commit(ring); 190 193