aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShirish S <shirish.s@amd.com>2019-06-04 11:55:03 -0400
committerAlex Deucher <alexander.deucher@amd.com>2019-06-11 14:33:08 -0400
commit517b91f4cde3043d77b2178548473e8545ef07cb (patch)
treed58688db535ad4f4ad9552296de6d71be1f9245c
parent671e2ee5ee2127179ca884b439ab6001a623edd6 (diff)
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
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c5
3 files changed, 11 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index ecf6f96df2ad..e6b07ece3910 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -594,7 +594,7 @@ error:
594int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring) 594int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
595{ 595{
596 struct amdgpu_device *adev = ring->adev; 596 struct amdgpu_device *adev = ring->adev;
597 uint32_t rptr = amdgpu_ring_get_rptr(ring); 597 uint32_t rptr;
598 unsigned i; 598 unsigned i;
599 int r; 599 int r;
600 600
@@ -602,6 +602,8 @@ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
602 if (r) 602 if (r)
603 return r; 603 return r;
604 604
605 rptr = amdgpu_ring_get_rptr(ring);
606
605 amdgpu_ring_write(ring, VCN_ENC_CMD_END); 607 amdgpu_ring_write(ring, VCN_ENC_CMD_END);
606 amdgpu_ring_commit(ring); 608 amdgpu_ring_commit(ring);
607 609
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index c9edddf9f88a..be70e6e5f9df 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -170,13 +170,16 @@ static void uvd_v6_0_enc_ring_set_wptr(struct amdgpu_ring *ring)
170static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring) 170static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring)
171{ 171{
172 struct amdgpu_device *adev = ring->adev; 172 struct amdgpu_device *adev = ring->adev;
173 uint32_t rptr = amdgpu_ring_get_rptr(ring); 173 uint32_t rptr;
174 unsigned i; 174 unsigned i;
175 int r; 175 int r;
176 176
177 r = amdgpu_ring_alloc(ring, 16); 177 r = amdgpu_ring_alloc(ring, 16);
178 if (r) 178 if (r)
179 return r; 179 return r;
180
181 rptr = amdgpu_ring_get_rptr(ring);
182
180 amdgpu_ring_write(ring, HEVC_ENC_CMD_END); 183 amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
181 amdgpu_ring_commit(ring); 184 amdgpu_ring_commit(ring);
182 185
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
index 2191d3d0a219..fc4f0bb9a2e7 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
@@ -175,7 +175,7 @@ static void uvd_v7_0_enc_ring_set_wptr(struct amdgpu_ring *ring)
175static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring) 175static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
176{ 176{
177 struct amdgpu_device *adev = ring->adev; 177 struct amdgpu_device *adev = ring->adev;
178 uint32_t rptr = amdgpu_ring_get_rptr(ring); 178 uint32_t rptr;
179 unsigned i; 179 unsigned i;
180 int r; 180 int r;
181 181
@@ -185,6 +185,9 @@ static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
185 r = amdgpu_ring_alloc(ring, 16); 185 r = amdgpu_ring_alloc(ring, 16);
186 if (r) 186 if (r)
187 return r; 187 return r;
188
189 rptr = amdgpu_ring_get_rptr(ring);
190
188 amdgpu_ring_write(ring, HEVC_ENC_CMD_END); 191 amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
189 amdgpu_ring_commit(ring); 192 amdgpu_ring_commit(ring);
190 193