aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThong Thai <thong.thai@amd.com>2019-07-25 11:26:56 -0400
committerAlex Deucher <alexander.deucher@amd.com>2019-07-31 00:48:33 -0400
commitc74dbe44eacf00a5ccc229b5cc340a9b7f6851a0 (patch)
tree892021a90a5302891c915c84fbce868a327db32a
parent3207dcf3afd6bffe5e887d483e7071616b97bd8f (diff)
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> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
index 80bb49736ee4..eef3ec5449af 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,
2092 return 0; 2092 return 0;
2093} 2093}
2094 2094
2095static int vcn_v2_0_dec_ring_test_ring(struct amdgpu_ring *ring)
2096{
2097 struct amdgpu_device *adev = ring->adev;
2098 uint32_t tmp = 0;
2099 unsigned i;
2100 int r;
2101
2102 WREG32(adev->vcn.inst[ring->me].external.scratch9, 0xCAFEDEAD);
2103 r = amdgpu_ring_alloc(ring, 4);
2104 if (r)
2105 return r;
2106 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
2107 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_START << 1));
2108 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.scratch9, 0));
2109 amdgpu_ring_write(ring, 0xDEADBEEF);
2110 amdgpu_ring_commit(ring);
2111 for (i = 0; i < adev->usec_timeout; i++) {
2112 tmp = RREG32(adev->vcn.inst[ring->me].external.scratch9);
2113 if (tmp == 0xDEADBEEF)
2114 break;
2115 DRM_UDELAY(1);
2116 }
2117
2118 if (i >= adev->usec_timeout)
2119 r = -ETIMEDOUT;
2120
2121 return r;
2122}
2123
2124
2095static int vcn_v2_0_set_powergating_state(void *handle, 2125static int vcn_v2_0_set_powergating_state(void *handle,
2096 enum amd_powergating_state state) 2126 enum amd_powergating_state state)
2097{ 2127{
@@ -2155,7 +2185,7 @@ static const struct amdgpu_ring_funcs vcn_v2_0_dec_ring_vm_funcs = {
2155 .emit_ib = vcn_v2_0_dec_ring_emit_ib, 2185 .emit_ib = vcn_v2_0_dec_ring_emit_ib,
2156 .emit_fence = vcn_v2_0_dec_ring_emit_fence, 2186 .emit_fence = vcn_v2_0_dec_ring_emit_fence,
2157 .emit_vm_flush = vcn_v2_0_dec_ring_emit_vm_flush, 2187 .emit_vm_flush = vcn_v2_0_dec_ring_emit_vm_flush,
2158 .test_ring = amdgpu_vcn_dec_ring_test_ring, 2188 .test_ring = vcn_v2_0_dec_ring_test_ring,
2159 .test_ib = amdgpu_vcn_dec_ring_test_ib, 2189 .test_ib = amdgpu_vcn_dec_ring_test_ib,
2160 .insert_nop = vcn_v2_0_dec_ring_insert_nop, 2190 .insert_nop = vcn_v2_0_dec_ring_insert_nop,
2161 .insert_start = vcn_v2_0_dec_ring_insert_start, 2191 .insert_start = vcn_v2_0_dec_ring_insert_start,