diff options
author | Christian König <christian.koenig@amd.com> | 2018-01-26 09:00:43 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-02-19 14:19:12 -0500 |
commit | f732b6b3c0e62bf889702d6af2b1e5436e4e9a0a (patch) | |
tree | 81a0dab49e09323452d2788b31d40d63c6918980 /drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |
parent | 2b124b0b7085ac2216ac4703e3054963cadc7f47 (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.c | 20 |
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 | ||
884 | static void vcn_v1_0_dec_ring_emit_wreg(struct amdgpu_ring *ring, | 877 | static 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 | ||
1024 | static void vcn_v1_0_enc_ring_emit_wreg(struct amdgpu_ring *ring, | 1012 | static 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 */ |