diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3151-drm-amd-amdgpu-vcn_v2_0-Move-VCN-2.0-specific-dec-ri.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3151-drm-amd-amdgpu-vcn_v2_0-Move-VCN-2.0-specific-dec-ri.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3151-drm-amd-amdgpu-vcn_v2_0-Move-VCN-2.0-specific-dec-ri.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3151-drm-amd-amdgpu-vcn_v2_0-Move-VCN-2.0-specific-dec-ri.patch new file mode 100644 index 00000000..0d2eb534 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3151-drm-amd-amdgpu-vcn_v2_0-Move-VCN-2.0-specific-dec-ri.patch @@ -0,0 +1,68 @@ +From aa2985a982cbdb1c8b8ecfe91f401d4a5afab3a0 Mon Sep 17 00:00:00 2001 +From: Thong Thai <thong.thai@amd.com> +Date: Thu, 25 Jul 2019 11:26:56 -0400 +Subject: [PATCH 3151/4256] drm/amd/amdgpu/vcn_v2_0: Move VCN 2.0 specific dec + ring test to vcn_v2_0 + +VCN 2.0 firmware now requires a packet start command to be sent before +any other decode ring buffer command. + +Signed-off-by: Thong Thai <thong.thai@amd.com> +Reviewed-by: Leo Liu <leo.liu@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c | 32 ++++++++++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c +index 800db1f297f6..7528b1b562e1 100644 +--- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c +@@ -2092,6 +2092,36 @@ static int vcn_v2_0_process_interrupt(struct amdgpu_device *adev, + return 0; + } + ++static int vcn_v2_0_dec_ring_test_ring(struct amdgpu_ring *ring) ++{ ++ struct amdgpu_device *adev = ring->adev; ++ uint32_t tmp = 0; ++ unsigned i; ++ int r; ++ ++ WREG32(adev->vcn.inst[ring->me].external.scratch9, 0xCAFEDEAD); ++ r = amdgpu_ring_alloc(ring, 4); ++ if (r) ++ return r; ++ amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); ++ amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_START << 1)); ++ amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.scratch9, 0)); ++ amdgpu_ring_write(ring, 0xDEADBEEF); ++ amdgpu_ring_commit(ring); ++ for (i = 0; i < adev->usec_timeout; i++) { ++ tmp = RREG32(adev->vcn.inst[ring->me].external.scratch9); ++ if (tmp == 0xDEADBEEF) ++ break; ++ DRM_UDELAY(1); ++ } ++ ++ if (i >= adev->usec_timeout) ++ r = -ETIMEDOUT; ++ ++ return r; ++} ++ ++ + static int vcn_v2_0_set_powergating_state(void *handle, + enum amd_powergating_state state) + { +@@ -2155,7 +2185,7 @@ static const struct amdgpu_ring_funcs vcn_v2_0_dec_ring_vm_funcs = { + .emit_ib = vcn_v2_0_dec_ring_emit_ib, + .emit_fence = vcn_v2_0_dec_ring_emit_fence, + .emit_vm_flush = vcn_v2_0_dec_ring_emit_vm_flush, +- .test_ring = amdgpu_vcn_dec_ring_test_ring, ++ .test_ring = vcn_v2_0_dec_ring_test_ring, + .test_ib = amdgpu_vcn_dec_ring_test_ib, + .insert_nop = vcn_v2_0_dec_ring_insert_nop, + .insert_start = vcn_v2_0_dec_ring_insert_start, +-- +2.17.1 + |