aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-01-12 11:08:22 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-02-19 14:18:08 -0500
commitd9a701ccd6dafc30f48ad8c1b7d8ab4477547707 (patch)
treea7250386b2bd134940f7bc5e83355c5a6d8d35b9 /drivers/gpu/drm/amd/amdgpu/cik_sdma.c
parent4fef88bd002985908064ea6760623f09ac44355b (diff)
drm/amdgpu: implement gmc_v7_0_emit_flush_gpu_tlb
Unify tlb flushing for gmc v7. Signed-off-by: Christian König <christian.koenig@amd.com> Acked-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cik_sdma.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index fbbac8498044..1d32dedb2534 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -886,18 +886,7 @@ static void cik_sdma_ring_emit_vm_flush(struct amdgpu_ring *ring,
886 u32 extra_bits = (SDMA_POLL_REG_MEM_EXTRA_OP(0) | 886 u32 extra_bits = (SDMA_POLL_REG_MEM_EXTRA_OP(0) |
887 SDMA_POLL_REG_MEM_EXTRA_FUNC(0)); /* always */ 887 SDMA_POLL_REG_MEM_EXTRA_FUNC(0)); /* always */
888 888
889 amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_SRBM_WRITE, 0, 0xf000)); 889 amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr);
890 if (vmid < 8) {
891 amdgpu_ring_write(ring, (mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR + vmid));
892 } else {
893 amdgpu_ring_write(ring, (mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR + vmid - 8));
894 }
895 amdgpu_ring_write(ring, pd_addr >> 12);
896
897 /* flush TLB */
898 amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_SRBM_WRITE, 0, 0xf000));
899 amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST);
900 amdgpu_ring_write(ring, 1 << vmid);
901 890
902 amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_POLL_REG_MEM, 0, extra_bits)); 891 amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_POLL_REG_MEM, 0, extra_bits));
903 amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST << 2); 892 amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST << 2);
@@ -1290,7 +1279,7 @@ static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = {
1290 6 + /* cik_sdma_ring_emit_hdp_flush */ 1279 6 + /* cik_sdma_ring_emit_hdp_flush */
1291 3 + /* cik_sdma_ring_emit_hdp_invalidate */ 1280 3 + /* cik_sdma_ring_emit_hdp_invalidate */
1292 6 + /* cik_sdma_ring_emit_pipeline_sync */ 1281 6 + /* cik_sdma_ring_emit_pipeline_sync */
1293 12 + /* cik_sdma_ring_emit_vm_flush */ 1282 CIK_FLUSH_GPU_TLB_NUM_WREG * 3 + 6 + /* cik_sdma_ring_emit_vm_flush */
1294 9 + 9 + 9, /* cik_sdma_ring_emit_fence x3 for user fence, vm fence */ 1283 9 + 9 + 9, /* cik_sdma_ring_emit_fence x3 for user fence, vm fence */
1295 .emit_ib_size = 7 + 4, /* cik_sdma_ring_emit_ib */ 1284 .emit_ib_size = 7 + 4, /* cik_sdma_ring_emit_ib */
1296 .emit_ib = cik_sdma_ring_emit_ib, 1285 .emit_ib = cik_sdma_ring_emit_ib,