aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-01-26 09:00:43 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-02-19 14:19:12 -0500
commitf732b6b3c0e62bf889702d6af2b1e5436e4e9a0a (patch)
tree81a0dab49e09323452d2788b31d40d63c6918980 /drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
parent2b124b0b7085ac2216ac4703e3054963cadc7f47 (diff)
drm/amdgpu: move waiting for VM flush into gmc_v9_0_emit_flush_gpu_tlb
Keep that at a common place instead of spread over all engines. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
index 294a1bfb59df..d9f597c36b63 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
@@ -863,7 +863,6 @@ static void vcn_v1_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring,
863 uint64_t pd_addr) 863 uint64_t pd_addr)
864{ 864{
865 struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; 865 struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
866 unsigned eng = ring->vm_inv_eng;
867 uint32_t data0, data1, mask; 866 uint32_t data0, data1, mask;
868 867
869 pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); 868 pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr);
@@ -873,12 +872,6 @@ static void vcn_v1_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring,
873 data1 = lower_32_bits(pd_addr); 872 data1 = lower_32_bits(pd_addr);
874 mask = 0xffffffff; 873 mask = 0xffffffff;
875 vcn_v1_0_dec_ring_emit_reg_wait(ring, data0, data1, mask); 874 vcn_v1_0_dec_ring_emit_reg_wait(ring, data0, data1, mask);
876
877 /* wait for flush */
878 data0 = hub->vm_inv_eng0_ack + eng;
879 data1 = 1 << vmid;
880 mask = 1 << vmid;
881 vcn_v1_0_dec_ring_emit_reg_wait(ring, data0, data1, mask);
882} 875}
883 876
884static void vcn_v1_0_dec_ring_emit_wreg(struct amdgpu_ring *ring, 877static void vcn_v1_0_dec_ring_emit_wreg(struct amdgpu_ring *ring,
@@ -1008,17 +1001,12 @@ static void vcn_v1_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring,
1008 uint64_t pd_addr) 1001 uint64_t pd_addr)
1009{ 1002{
1010 struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; 1003 struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
1011 unsigned eng = ring->vm_inv_eng;
1012 1004
1013 pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); 1005 pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr);
1014 1006
1015 /* wait for reg writes */ 1007 /* wait for reg writes */
1016 vcn_v1_0_enc_ring_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, 1008 vcn_v1_0_enc_ring_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2,
1017 lower_32_bits(pd_addr), 0xffffffff); 1009 lower_32_bits(pd_addr), 0xffffffff);
1018
1019 /* wait for flush */
1020 vcn_v1_0_enc_ring_emit_reg_wait(ring, hub->vm_inv_eng0_ack + eng,
1021 1 << vmid, 1 << vmid);
1022} 1010}
1023 1011
1024static void vcn_v1_0_enc_ring_emit_wreg(struct amdgpu_ring *ring, 1012static void vcn_v1_0_enc_ring_emit_wreg(struct amdgpu_ring *ring,
@@ -1104,7 +1092,9 @@ static const struct amdgpu_ring_funcs vcn_v1_0_dec_ring_vm_funcs = {
1104 .set_wptr = vcn_v1_0_dec_ring_set_wptr, 1092 .set_wptr = vcn_v1_0_dec_ring_set_wptr,
1105 .emit_frame_size = 1093 .emit_frame_size =
1106 6 + 6 + /* hdp invalidate / flush */ 1094 6 + 6 + /* hdp invalidate / flush */
1107 SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 + 16 + /* vcn_v1_0_dec_ring_emit_vm_flush */ 1095 SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
1096 SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 +
1097 8 + /* vcn_v1_0_dec_ring_emit_vm_flush */
1108 14 + 14 + /* vcn_v1_0_dec_ring_emit_fence x2 vm fence */ 1098 14 + 14 + /* vcn_v1_0_dec_ring_emit_fence x2 vm fence */
1109 6, 1099 6,
1110 .emit_ib_size = 8, /* vcn_v1_0_dec_ring_emit_ib */ 1100 .emit_ib_size = 8, /* vcn_v1_0_dec_ring_emit_ib */
@@ -1133,7 +1123,9 @@ static const struct amdgpu_ring_funcs vcn_v1_0_enc_ring_vm_funcs = {
1133 .get_wptr = vcn_v1_0_enc_ring_get_wptr, 1123 .get_wptr = vcn_v1_0_enc_ring_get_wptr,
1134 .set_wptr = vcn_v1_0_enc_ring_set_wptr, 1124 .set_wptr = vcn_v1_0_enc_ring_set_wptr,
1135 .emit_frame_size = 1125 .emit_frame_size =
1136 SOC15_FLUSH_GPU_TLB_NUM_WREG * 3 + 8 + /* vcn_v1_0_enc_ring_emit_vm_flush */ 1126 SOC15_FLUSH_GPU_TLB_NUM_WREG * 3 +
1127 SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 4 +
1128 4 + /* vcn_v1_0_enc_ring_emit_vm_flush */
1137 5 + 5 + /* vcn_v1_0_enc_ring_emit_fence x2 vm fence */ 1129 5 + 5 + /* vcn_v1_0_enc_ring_emit_fence x2 vm fence */
1138 1, /* vcn_v1_0_enc_ring_insert_end */ 1130 1, /* vcn_v1_0_enc_ring_insert_end */
1139 .emit_ib_size = 5, /* vcn_v1_0_enc_ring_emit_ib */ 1131 .emit_ib_size = 5, /* vcn_v1_0_enc_ring_emit_ib */