diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2059-drm-amdgpu-uvd-vcn-fetch-ring-s-read_ptr-after-alloc.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2059-drm-amdgpu-uvd-vcn-fetch-ring-s-read_ptr-after-alloc.patch | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2059-drm-amdgpu-uvd-vcn-fetch-ring-s-read_ptr-after-alloc.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2059-drm-amdgpu-uvd-vcn-fetch-ring-s-read_ptr-after-alloc.patch new file mode 100644 index 00000000..07bd35f9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2059-drm-amdgpu-uvd-vcn-fetch-ring-s-read_ptr-after-alloc.patch @@ -0,0 +1,97 @@ +From de3c9e0852d11d0cbed6dd65ff334916eb9c2556 Mon Sep 17 00:00:00 2001 +From: Shirish S <shirish.s@amd.com> +Date: Tue, 4 Jun 2019 21:25:03 +0530 +Subject: [PATCH 2059/2940] drm/amdgpu/{uvd,vcn}: fetch ring's read_ptr after + alloc +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[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> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 4 +++- + drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 5 ++++- + drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 5 ++++- + 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 118451f5e3aa..d786098364dd 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +@@ -468,7 +468,7 @@ int amdgpu_vcn_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout) + int amdgpu_vcn_enc_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; + +@@ -476,6 +476,8 @@ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring) + if (r) + return r; + ++ rptr = amdgpu_ring_get_rptr(ring); ++ + amdgpu_ring_write(ring, VCN_ENC_CMD_END); + amdgpu_ring_commit(ring); + +diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +index c61a314c56cc..16682b7998be 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) + static int uvd_v6_0_enc_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; + + r = amdgpu_ring_alloc(ring, 16); + if (r) + return r; ++ ++ rptr = amdgpu_ring_get_rptr(ring); ++ + amdgpu_ring_write(ring, HEVC_ENC_CMD_END); + amdgpu_ring_commit(ring); + +diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c +index cdb96d4cb424..74811b2aece1 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) + static int uvd_v7_0_enc_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; + +@@ -185,6 +185,9 @@ static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring) + r = amdgpu_ring_alloc(ring, 16); + if (r) + return r; ++ ++ rptr = amdgpu_ring_get_rptr(ring); ++ + amdgpu_ring_write(ring, HEVC_ENC_CMD_END); + amdgpu_ring_commit(ring); + +-- +2.17.1 + |