diff options
author | Christian König <christian.koenig@amd.com> | 2018-01-12 11:08:22 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-02-19 14:18:08 -0500 |
commit | d9a701ccd6dafc30f48ad8c1b7d8ab4477547707 (patch) | |
tree | a7250386b2bd134940f7bc5e83355c5a6d8d35b9 /drivers/gpu/drm/amd/amdgpu/cik_sdma.c | |
parent | 4fef88bd002985908064ea6760623f09ac44355b (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.c | 15 |
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, |