diff options
author | Christian König <christian.koenig@amd.com> | 2018-02-04 04:32:35 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-02-19 14:20:18 -0500 |
commit | c633c00bf06779ec6d5e2c01748d4753ede98f8a (patch) | |
tree | 012bb3f787d03d71b7c13d16e7bf483d20ff6828 | |
parent | ec47734a6d0e82c132e3e0883f2f663f138da43a (diff) |
drm/amdgpu: separate PASID mapping from VM flush v2
Stuffing the PASID mapping into the VM flush isn't flexible enough since
the PASID mapping changes not as often as we need a VM flush.
v2: add missing use of gmc_v7_0_emit_pasid_mapping
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
22 files changed, 79 insertions, 76 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 44cf4b9a5703..c6123e586589 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -1774,7 +1774,8 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | |||
1774 | #define amdgpu_asic_flush_hdp(adev, r) (adev)->asic_funcs->flush_hdp((adev), (r)) | 1774 | #define amdgpu_asic_flush_hdp(adev, r) (adev)->asic_funcs->flush_hdp((adev), (r)) |
1775 | #define amdgpu_asic_invalidate_hdp(adev, r) (adev)->asic_funcs->invalidate_hdp((adev), (r)) | 1775 | #define amdgpu_asic_invalidate_hdp(adev, r) (adev)->asic_funcs->invalidate_hdp((adev), (r)) |
1776 | #define amdgpu_gmc_flush_gpu_tlb(adev, vmid) (adev)->gmc.gmc_funcs->flush_gpu_tlb((adev), (vmid)) | 1776 | #define amdgpu_gmc_flush_gpu_tlb(adev, vmid) (adev)->gmc.gmc_funcs->flush_gpu_tlb((adev), (vmid)) |
1777 | #define amdgpu_gmc_emit_flush_gpu_tlb(r, vmid, pasid, addr) (r)->adev->gmc.gmc_funcs->emit_flush_gpu_tlb((r), (vmid), (pasid), (addr)) | 1777 | #define amdgpu_gmc_emit_flush_gpu_tlb(r, vmid, addr) (r)->adev->gmc.gmc_funcs->emit_flush_gpu_tlb((r), (vmid), (addr)) |
1778 | #define amdgpu_gmc_emit_pasid_mapping(r, vmid, pasid) (r)->adev->gmc.gmc_funcs->emit_pasid_mapping((r), (vmid), (pasid)) | ||
1778 | #define amdgpu_gmc_set_pte_pde(adev, pt, idx, addr, flags) (adev)->gmc.gmc_funcs->set_pte_pde((adev), (pt), (idx), (addr), (flags)) | 1779 | #define amdgpu_gmc_set_pte_pde(adev, pt, idx, addr, flags) (adev)->gmc.gmc_funcs->set_pte_pde((adev), (pt), (idx), (addr), (flags)) |
1779 | #define amdgpu_gmc_get_vm_pde(adev, level, dst, flags) (adev)->gmc.gmc_funcs->get_vm_pde((adev), (level), (dst), (flags)) | 1780 | #define amdgpu_gmc_get_vm_pde(adev, level, dst, flags) (adev)->gmc.gmc_funcs->get_vm_pde((adev), (level), (dst), (flags)) |
1780 | #define amdgpu_gmc_get_pte_flags(adev, flags) (adev)->gmc.gmc_funcs->get_vm_pte_flags((adev),(flags)) | 1781 | #define amdgpu_gmc_get_pte_flags(adev, flags) (adev)->gmc.gmc_funcs->get_vm_pte_flags((adev),(flags)) |
@@ -1789,7 +1790,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | |||
1789 | #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) | 1790 | #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) |
1790 | #define amdgpu_ring_emit_ib(r, ib, vmid, c) (r)->funcs->emit_ib((r), (ib), (vmid), (c)) | 1791 | #define amdgpu_ring_emit_ib(r, ib, vmid, c) (r)->funcs->emit_ib((r), (ib), (vmid), (c)) |
1791 | #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r)) | 1792 | #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r)) |
1792 | #define amdgpu_ring_emit_vm_flush(r, vmid, pasid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (pasid), (addr)) | 1793 | #define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr)) |
1793 | #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags)) | 1794 | #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags)) |
1794 | #define amdgpu_ring_emit_gds_switch(r, v, db, ds, wb, ws, ab, as) (r)->funcs->emit_gds_switch((r), (v), (db), (ds), (wb), (ws), (ab), (as)) | 1795 | #define amdgpu_ring_emit_gds_switch(r, v, db, ds, wb, ws, ab, as) (r)->funcs->emit_gds_switch((r), (v), (db), (ds), (wb), (ws), (ab), (as)) |
1795 | #define amdgpu_ring_emit_hdp_flush(r) (r)->funcs->emit_hdp_flush((r)) | 1796 | #define amdgpu_ring_emit_hdp_flush(r) (r)->funcs->emit_hdp_flush((r)) |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h index b3d1bd2f51cf..893c2490b783 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | |||
@@ -54,7 +54,10 @@ struct amdgpu_gmc_funcs { | |||
54 | uint32_t vmid); | 54 | uint32_t vmid); |
55 | /* flush the vm tlb via ring */ | 55 | /* flush the vm tlb via ring */ |
56 | uint64_t (*emit_flush_gpu_tlb)(struct amdgpu_ring *ring, unsigned vmid, | 56 | uint64_t (*emit_flush_gpu_tlb)(struct amdgpu_ring *ring, unsigned vmid, |
57 | unsigned pasid, uint64_t pd_addr); | 57 | uint64_t pd_addr); |
58 | /* Change the VMID -> PASID mapping */ | ||
59 | void (*emit_pasid_mapping)(struct amdgpu_ring *ring, unsigned vmid, | ||
60 | unsigned pasid); | ||
58 | /* write pte/pde updates using the cpu */ | 61 | /* write pte/pde updates using the cpu */ |
59 | int (*set_pte_pde)(struct amdgpu_device *adev, | 62 | int (*set_pte_pde)(struct amdgpu_device *adev, |
60 | void *cpu_pt_addr, /* cpu addr of page table */ | 63 | void *cpu_pt_addr, /* cpu addr of page table */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 075976855651..1d0d250cbfdf 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | |||
@@ -126,7 +126,7 @@ struct amdgpu_ring_funcs { | |||
126 | uint64_t seq, unsigned flags); | 126 | uint64_t seq, unsigned flags); |
127 | void (*emit_pipeline_sync)(struct amdgpu_ring *ring); | 127 | void (*emit_pipeline_sync)(struct amdgpu_ring *ring); |
128 | void (*emit_vm_flush)(struct amdgpu_ring *ring, unsigned vmid, | 128 | void (*emit_vm_flush)(struct amdgpu_ring *ring, unsigned vmid, |
129 | unsigned pasid, uint64_t pd_addr); | 129 | uint64_t pd_addr); |
130 | void (*emit_hdp_flush)(struct amdgpu_ring *ring); | 130 | void (*emit_hdp_flush)(struct amdgpu_ring *ring); |
131 | void (*emit_gds_switch)(struct amdgpu_ring *ring, uint32_t vmid, | 131 | void (*emit_gds_switch)(struct amdgpu_ring *ring, uint32_t vmid, |
132 | uint32_t gds_base, uint32_t gds_size, | 132 | uint32_t gds_base, uint32_t gds_size, |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 0572d6072baa..afa16a862eaa 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -612,8 +612,11 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job, bool need_ | |||
612 | struct dma_fence *fence; | 612 | struct dma_fence *fence; |
613 | 613 | ||
614 | trace_amdgpu_vm_flush(ring, job->vmid, job->vm_pd_addr); | 614 | trace_amdgpu_vm_flush(ring, job->vmid, job->vm_pd_addr); |
615 | amdgpu_ring_emit_vm_flush(ring, job->vmid, job->pasid, | 615 | amdgpu_ring_emit_vm_flush(ring, job->vmid, job->vm_pd_addr); |
616 | job->vm_pd_addr); | 616 | if (adev->gmc.gmc_funcs->emit_pasid_mapping && |
617 | ring->funcs->emit_wreg) | ||
618 | amdgpu_gmc_emit_pasid_mapping(ring, job->vmid, | ||
619 | job->pasid); | ||
617 | 620 | ||
618 | r = amdgpu_fence_emit(ring, &fence); | 621 | r = amdgpu_fence_emit(ring, &fence); |
619 | if (r) | 622 | if (r) |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index d78bf183488b..69568cd1bb99 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c | |||
@@ -873,13 +873,12 @@ static void cik_sdma_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
873 | * using sDMA (CIK). | 873 | * using sDMA (CIK). |
874 | */ | 874 | */ |
875 | static void cik_sdma_ring_emit_vm_flush(struct amdgpu_ring *ring, | 875 | static void cik_sdma_ring_emit_vm_flush(struct amdgpu_ring *ring, |
876 | unsigned vmid, unsigned pasid, | 876 | unsigned vmid, uint64_t pd_addr) |
877 | uint64_t pd_addr) | ||
878 | { | 877 | { |
879 | u32 extra_bits = (SDMA_POLL_REG_MEM_EXTRA_OP(0) | | 878 | u32 extra_bits = (SDMA_POLL_REG_MEM_EXTRA_OP(0) | |
880 | SDMA_POLL_REG_MEM_EXTRA_FUNC(0)); /* always */ | 879 | SDMA_POLL_REG_MEM_EXTRA_FUNC(0)); /* always */ |
881 | 880 | ||
882 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 881 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
883 | 882 | ||
884 | amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_POLL_REG_MEM, 0, extra_bits)); | 883 | amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_POLL_REG_MEM, 0, extra_bits)); |
885 | amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST << 2); | 884 | amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST << 2); |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c index 3517fd9e11c9..0fff5b8cd318 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | |||
@@ -2326,12 +2326,11 @@ static void gfx_v6_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
2326 | } | 2326 | } |
2327 | 2327 | ||
2328 | static void gfx_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 2328 | static void gfx_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
2329 | unsigned vmid, unsigned pasid, | 2329 | unsigned vmid, uint64_t pd_addr) |
2330 | uint64_t pd_addr) | ||
2331 | { | 2330 | { |
2332 | int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX); | 2331 | int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX); |
2333 | 2332 | ||
2334 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 2333 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
2335 | 2334 | ||
2336 | /* wait for the invalidate to complete */ | 2335 | /* wait for the invalidate to complete */ |
2337 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); | 2336 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 764e068fc2dd..972d421caada 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -3219,12 +3219,11 @@ static void gfx_v7_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
3219 | * using the CP (CIK). | 3219 | * using the CP (CIK). |
3220 | */ | 3220 | */ |
3221 | static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 3221 | static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
3222 | unsigned vmid, unsigned pasid, | 3222 | unsigned vmid, uint64_t pd_addr) |
3223 | uint64_t pd_addr) | ||
3224 | { | 3223 | { |
3225 | int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX); | 3224 | int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX); |
3226 | 3225 | ||
3227 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 3226 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
3228 | 3227 | ||
3229 | /* wait for the invalidate to complete */ | 3228 | /* wait for the invalidate to complete */ |
3230 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); | 3229 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 8a65b5327a02..27943e57681c 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -6311,12 +6311,11 @@ static void gfx_v8_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
6311 | } | 6311 | } |
6312 | 6312 | ||
6313 | static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 6313 | static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
6314 | unsigned vmid, unsigned pasid, | 6314 | unsigned vmid, uint64_t pd_addr) |
6315 | uint64_t pd_addr) | ||
6316 | { | 6315 | { |
6317 | int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX); | 6316 | int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX); |
6318 | 6317 | ||
6319 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 6318 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
6320 | 6319 | ||
6321 | /* wait for the invalidate to complete */ | 6320 | /* wait for the invalidate to complete */ |
6322 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); | 6321 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index f7363f821cff..848008ef46b8 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | |||
@@ -3676,10 +3676,9 @@ static void gfx_v9_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
3676 | } | 3676 | } |
3677 | 3677 | ||
3678 | static void gfx_v9_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 3678 | static void gfx_v9_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
3679 | unsigned vmid, unsigned pasid, | 3679 | unsigned vmid, uint64_t pd_addr) |
3680 | uint64_t pd_addr) | ||
3681 | { | 3680 | { |
3682 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 3681 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
3683 | 3682 | ||
3684 | /* compute doesn't have PFP */ | 3683 | /* compute doesn't have PFP */ |
3685 | if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) { | 3684 | if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) { |
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c index 1945fe842188..2c0ed9dd0c91 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | |||
@@ -363,8 +363,7 @@ static void gmc_v6_0_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid) | |||
363 | } | 363 | } |
364 | 364 | ||
365 | static uint64_t gmc_v6_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | 365 | static uint64_t gmc_v6_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, |
366 | unsigned vmid, unsigned pasid, | 366 | unsigned vmid, uint64_t pd_addr) |
367 | uint64_t pd_addr) | ||
368 | { | 367 | { |
369 | uint32_t reg; | 368 | uint32_t reg; |
370 | 369 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c index 761def04f93f..4edd17059868 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | |||
@@ -436,8 +436,7 @@ static void gmc_v7_0_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid) | |||
436 | } | 436 | } |
437 | 437 | ||
438 | static uint64_t gmc_v7_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | 438 | static uint64_t gmc_v7_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, |
439 | unsigned vmid, unsigned pasid, | 439 | unsigned vmid, uint64_t pd_addr) |
440 | uint64_t pd_addr) | ||
441 | { | 440 | { |
442 | uint32_t reg; | 441 | uint32_t reg; |
443 | 442 | ||
@@ -447,14 +446,18 @@ static uint64_t gmc_v7_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | |||
447 | reg = mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR + vmid - 8; | 446 | reg = mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR + vmid - 8; |
448 | amdgpu_ring_emit_wreg(ring, reg, pd_addr >> 12); | 447 | amdgpu_ring_emit_wreg(ring, reg, pd_addr >> 12); |
449 | 448 | ||
450 | amdgpu_ring_emit_wreg(ring, mmIH_VMID_0_LUT + vmid, pasid); | ||
451 | |||
452 | /* bits 0-15 are the VM contexts0-15 */ | 449 | /* bits 0-15 are the VM contexts0-15 */ |
453 | amdgpu_ring_emit_wreg(ring, mmVM_INVALIDATE_REQUEST, 1 << vmid); | 450 | amdgpu_ring_emit_wreg(ring, mmVM_INVALIDATE_REQUEST, 1 << vmid); |
454 | 451 | ||
455 | return pd_addr; | 452 | return pd_addr; |
456 | } | 453 | } |
457 | 454 | ||
455 | static void gmc_v7_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid, | ||
456 | unsigned pasid) | ||
457 | { | ||
458 | amdgpu_ring_emit_wreg(ring, mmIH_VMID_0_LUT + vmid, pasid); | ||
459 | } | ||
460 | |||
458 | /** | 461 | /** |
459 | * gmc_v7_0_set_pte_pde - update the page tables using MMIO | 462 | * gmc_v7_0_set_pte_pde - update the page tables using MMIO |
460 | * | 463 | * |
@@ -1327,6 +1330,7 @@ static const struct amd_ip_funcs gmc_v7_0_ip_funcs = { | |||
1327 | static const struct amdgpu_gmc_funcs gmc_v7_0_gmc_funcs = { | 1330 | static const struct amdgpu_gmc_funcs gmc_v7_0_gmc_funcs = { |
1328 | .flush_gpu_tlb = gmc_v7_0_flush_gpu_tlb, | 1331 | .flush_gpu_tlb = gmc_v7_0_flush_gpu_tlb, |
1329 | .emit_flush_gpu_tlb = gmc_v7_0_emit_flush_gpu_tlb, | 1332 | .emit_flush_gpu_tlb = gmc_v7_0_emit_flush_gpu_tlb, |
1333 | .emit_pasid_mapping = gmc_v7_0_emit_pasid_mapping, | ||
1330 | .set_pte_pde = gmc_v7_0_set_pte_pde, | 1334 | .set_pte_pde = gmc_v7_0_set_pte_pde, |
1331 | .set_prt = gmc_v7_0_set_prt, | 1335 | .set_prt = gmc_v7_0_set_prt, |
1332 | .get_vm_pte_flags = gmc_v7_0_get_vm_pte_flags, | 1336 | .get_vm_pte_flags = gmc_v7_0_get_vm_pte_flags, |
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c index 2489be7ad62b..1e0ad0657e96 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | |||
@@ -612,8 +612,7 @@ static void gmc_v8_0_flush_gpu_tlb(struct amdgpu_device *adev, | |||
612 | } | 612 | } |
613 | 613 | ||
614 | static uint64_t gmc_v8_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | 614 | static uint64_t gmc_v8_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, |
615 | unsigned vmid, unsigned pasid, | 615 | unsigned vmid, uint64_t pd_addr) |
616 | uint64_t pd_addr) | ||
617 | { | 616 | { |
618 | uint32_t reg; | 617 | uint32_t reg; |
619 | 618 | ||
@@ -623,14 +622,18 @@ static uint64_t gmc_v8_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | |||
623 | reg = mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR + vmid - 8; | 622 | reg = mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR + vmid - 8; |
624 | amdgpu_ring_emit_wreg(ring, reg, pd_addr >> 12); | 623 | amdgpu_ring_emit_wreg(ring, reg, pd_addr >> 12); |
625 | 624 | ||
626 | amdgpu_ring_emit_wreg(ring, mmIH_VMID_0_LUT + vmid, pasid); | ||
627 | |||
628 | /* bits 0-15 are the VM contexts0-15 */ | 625 | /* bits 0-15 are the VM contexts0-15 */ |
629 | amdgpu_ring_emit_wreg(ring, mmVM_INVALIDATE_REQUEST, 1 << vmid); | 626 | amdgpu_ring_emit_wreg(ring, mmVM_INVALIDATE_REQUEST, 1 << vmid); |
630 | 627 | ||
631 | return pd_addr; | 628 | return pd_addr; |
632 | } | 629 | } |
633 | 630 | ||
631 | static void gmc_v8_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid, | ||
632 | unsigned pasid) | ||
633 | { | ||
634 | amdgpu_ring_emit_wreg(ring, mmIH_VMID_0_LUT + vmid, pasid); | ||
635 | } | ||
636 | |||
634 | /** | 637 | /** |
635 | * gmc_v8_0_set_pte_pde - update the page tables using MMIO | 638 | * gmc_v8_0_set_pte_pde - update the page tables using MMIO |
636 | * | 639 | * |
@@ -1662,6 +1665,7 @@ static const struct amd_ip_funcs gmc_v8_0_ip_funcs = { | |||
1662 | static const struct amdgpu_gmc_funcs gmc_v8_0_gmc_funcs = { | 1665 | static const struct amdgpu_gmc_funcs gmc_v8_0_gmc_funcs = { |
1663 | .flush_gpu_tlb = gmc_v8_0_flush_gpu_tlb, | 1666 | .flush_gpu_tlb = gmc_v8_0_flush_gpu_tlb, |
1664 | .emit_flush_gpu_tlb = gmc_v8_0_emit_flush_gpu_tlb, | 1667 | .emit_flush_gpu_tlb = gmc_v8_0_emit_flush_gpu_tlb, |
1668 | .emit_pasid_mapping = gmc_v8_0_emit_pasid_mapping, | ||
1665 | .set_pte_pde = gmc_v8_0_set_pte_pde, | 1669 | .set_pte_pde = gmc_v8_0_set_pte_pde, |
1666 | .set_prt = gmc_v8_0_set_prt, | 1670 | .set_prt = gmc_v8_0_set_prt, |
1667 | .get_vm_pte_flags = gmc_v8_0_get_vm_pte_flags, | 1671 | .get_vm_pte_flags = gmc_v8_0_get_vm_pte_flags, |
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c index d5b6d00d83a6..bc4bd5e7ac94 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | |||
@@ -368,17 +368,15 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev, | |||
368 | } | 368 | } |
369 | 369 | ||
370 | static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | 370 | static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, |
371 | unsigned vmid, unsigned pasid, | 371 | unsigned vmid, uint64_t pd_addr) |
372 | uint64_t pd_addr) | ||
373 | { | 372 | { |
374 | struct amdgpu_device *adev = ring->adev; | 373 | struct amdgpu_device *adev = ring->adev; |
375 | struct amdgpu_vmhub *hub = &adev->vmhub[ring->funcs->vmhub]; | 374 | struct amdgpu_vmhub *hub = &adev->vmhub[ring->funcs->vmhub]; |
376 | uint32_t req = gmc_v9_0_get_invalidate_req(vmid); | 375 | uint32_t req = gmc_v9_0_get_invalidate_req(vmid); |
377 | uint64_t flags = AMDGPU_PTE_VALID; | 376 | uint64_t flags = AMDGPU_PTE_VALID; |
378 | unsigned eng = ring->vm_inv_eng; | 377 | unsigned eng = ring->vm_inv_eng; |
379 | uint32_t reg; | ||
380 | 378 | ||
381 | amdgpu_gmc_get_vm_pde(ring->adev, -1, &pd_addr, &flags); | 379 | amdgpu_gmc_get_vm_pde(adev, -1, &pd_addr, &flags); |
382 | pd_addr |= flags; | 380 | pd_addr |= flags; |
383 | 381 | ||
384 | amdgpu_ring_emit_wreg(ring, hub->ctx0_ptb_addr_lo32 + (2 * vmid), | 382 | amdgpu_ring_emit_wreg(ring, hub->ctx0_ptb_addr_lo32 + (2 * vmid), |
@@ -387,13 +385,6 @@ static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | |||
387 | amdgpu_ring_emit_wreg(ring, hub->ctx0_ptb_addr_hi32 + (2 * vmid), | 385 | amdgpu_ring_emit_wreg(ring, hub->ctx0_ptb_addr_hi32 + (2 * vmid), |
388 | upper_32_bits(pd_addr)); | 386 | upper_32_bits(pd_addr)); |
389 | 387 | ||
390 | if (ring->funcs->vmhub == AMDGPU_GFXHUB) | ||
391 | reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid; | ||
392 | else | ||
393 | reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT_MM) + vmid; | ||
394 | |||
395 | amdgpu_ring_emit_wreg(ring, reg, pasid); | ||
396 | |||
397 | amdgpu_ring_emit_wreg(ring, hub->vm_inv_eng0_req + eng, req); | 388 | amdgpu_ring_emit_wreg(ring, hub->vm_inv_eng0_req + eng, req); |
398 | 389 | ||
399 | /* wait for the invalidate to complete */ | 390 | /* wait for the invalidate to complete */ |
@@ -403,6 +394,20 @@ static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, | |||
403 | return pd_addr; | 394 | return pd_addr; |
404 | } | 395 | } |
405 | 396 | ||
397 | static void gmc_v9_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid, | ||
398 | unsigned pasid) | ||
399 | { | ||
400 | struct amdgpu_device *adev = ring->adev; | ||
401 | uint32_t reg; | ||
402 | |||
403 | if (ring->funcs->vmhub == AMDGPU_GFXHUB) | ||
404 | reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid; | ||
405 | else | ||
406 | reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT_MM) + vmid; | ||
407 | |||
408 | amdgpu_ring_emit_wreg(ring, reg, pasid); | ||
409 | } | ||
410 | |||
406 | /** | 411 | /** |
407 | * gmc_v9_0_set_pte_pde - update the page tables using MMIO | 412 | * gmc_v9_0_set_pte_pde - update the page tables using MMIO |
408 | * | 413 | * |
@@ -529,6 +534,7 @@ static void gmc_v9_0_get_vm_pde(struct amdgpu_device *adev, int level, | |||
529 | static const struct amdgpu_gmc_funcs gmc_v9_0_gmc_funcs = { | 534 | static const struct amdgpu_gmc_funcs gmc_v9_0_gmc_funcs = { |
530 | .flush_gpu_tlb = gmc_v9_0_flush_gpu_tlb, | 535 | .flush_gpu_tlb = gmc_v9_0_flush_gpu_tlb, |
531 | .emit_flush_gpu_tlb = gmc_v9_0_emit_flush_gpu_tlb, | 536 | .emit_flush_gpu_tlb = gmc_v9_0_emit_flush_gpu_tlb, |
537 | .emit_pasid_mapping = gmc_v9_0_emit_pasid_mapping, | ||
532 | .set_pte_pde = gmc_v9_0_set_pte_pde, | 538 | .set_pte_pde = gmc_v9_0_set_pte_pde, |
533 | .get_vm_pte_flags = gmc_v9_0_get_vm_pte_flags, | 539 | .get_vm_pte_flags = gmc_v9_0_get_vm_pte_flags, |
534 | .get_vm_pde = gmc_v9_0_get_vm_pde | 540 | .get_vm_pde = gmc_v9_0_get_vm_pde |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index 792774eee909..6ccc9d43a7b8 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | |||
@@ -852,10 +852,9 @@ static void sdma_v2_4_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
852 | * using sDMA (VI). | 852 | * using sDMA (VI). |
853 | */ | 853 | */ |
854 | static void sdma_v2_4_ring_emit_vm_flush(struct amdgpu_ring *ring, | 854 | static void sdma_v2_4_ring_emit_vm_flush(struct amdgpu_ring *ring, |
855 | unsigned vmid, unsigned pasid, | 855 | unsigned vmid, uint64_t pd_addr) |
856 | uint64_t pd_addr) | ||
857 | { | 856 | { |
858 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 857 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
859 | 858 | ||
860 | /* wait for flush */ | 859 | /* wait for flush */ |
861 | amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_POLL_REGMEM) | | 860 | amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_POLL_REGMEM) | |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index 5680ced69359..0c2b12ec0e9f 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -1117,10 +1117,9 @@ static void sdma_v3_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
1117 | * using sDMA (VI). | 1117 | * using sDMA (VI). |
1118 | */ | 1118 | */ |
1119 | static void sdma_v3_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 1119 | static void sdma_v3_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1120 | unsigned vmid, unsigned pasid, | 1120 | unsigned vmid, uint64_t pd_addr) |
1121 | uint64_t pd_addr) | ||
1122 | { | 1121 | { |
1123 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 1122 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
1124 | 1123 | ||
1125 | /* wait for flush */ | 1124 | /* wait for flush */ |
1126 | amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_POLL_REGMEM) | | 1125 | amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_POLL_REGMEM) | |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index ce599fd24412..3d5385dda34c 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | |||
@@ -1123,10 +1123,9 @@ static void sdma_v4_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
1123 | * using sDMA (VEGA10). | 1123 | * using sDMA (VEGA10). |
1124 | */ | 1124 | */ |
1125 | static void sdma_v4_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 1125 | static void sdma_v4_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1126 | unsigned vmid, unsigned pasid, | 1126 | unsigned vmid, uint64_t pd_addr) |
1127 | uint64_t pd_addr) | ||
1128 | { | 1127 | { |
1129 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 1128 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
1130 | } | 1129 | } |
1131 | 1130 | ||
1132 | static void sdma_v4_0_ring_emit_wreg(struct amdgpu_ring *ring, | 1131 | static void sdma_v4_0_ring_emit_wreg(struct amdgpu_ring *ring, |
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c b/drivers/gpu/drm/amd/amdgpu/si_dma.c index 2db5bfba771e..acbf5afa4f38 100644 --- a/drivers/gpu/drm/amd/amdgpu/si_dma.c +++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c | |||
@@ -460,10 +460,9 @@ static void si_dma_ring_emit_pipeline_sync(struct amdgpu_ring *ring) | |||
460 | * using sDMA (VI). | 460 | * using sDMA (VI). |
461 | */ | 461 | */ |
462 | static void si_dma_ring_emit_vm_flush(struct amdgpu_ring *ring, | 462 | static void si_dma_ring_emit_vm_flush(struct amdgpu_ring *ring, |
463 | unsigned vmid, unsigned pasid, | 463 | unsigned vmid, uint64_t pd_addr) |
464 | uint64_t pd_addr) | ||
465 | { | 464 | { |
466 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 465 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
467 | 466 | ||
468 | /* wait for invalidate to complete */ | 467 | /* wait for invalidate to complete */ |
469 | amdgpu_ring_write(ring, DMA_PACKET(DMA_PACKET_POLL_REG_MEM, 0, 0, 0, 0)); | 468 | amdgpu_ring_write(ring, DMA_PACKET(DMA_PACKET_POLL_REG_MEM, 0, 0, 0, 0)); |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c index 0f192ab71205..a3e64e22c93c 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | |||
@@ -1058,10 +1058,9 @@ static void uvd_v6_0_ring_emit_wreg(struct amdgpu_ring *ring, | |||
1058 | } | 1058 | } |
1059 | 1059 | ||
1060 | static void uvd_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 1060 | static void uvd_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1061 | unsigned vmid, unsigned pasid, | 1061 | unsigned vmid, uint64_t pd_addr) |
1062 | uint64_t pd_addr) | ||
1063 | { | 1062 | { |
1064 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 1063 | amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
1065 | 1064 | ||
1066 | amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0)); | 1065 | amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0)); |
1067 | amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST << 2); | 1066 | amdgpu_ring_write(ring, mmVM_INVALIDATE_REQUEST << 2); |
@@ -1107,8 +1106,7 @@ static void uvd_v6_0_enc_ring_insert_end(struct amdgpu_ring *ring) | |||
1107 | } | 1106 | } |
1108 | 1107 | ||
1109 | static void uvd_v6_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, | 1108 | static void uvd_v6_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1110 | unsigned int vmid, unsigned pasid, | 1109 | unsigned int vmid, uint64_t pd_addr) |
1111 | uint64_t pd_addr) | ||
1112 | { | 1110 | { |
1113 | amdgpu_ring_write(ring, HEVC_ENC_CMD_UPDATE_PTB); | 1111 | amdgpu_ring_write(ring, HEVC_ENC_CMD_UPDATE_PTB); |
1114 | amdgpu_ring_write(ring, vmid); | 1112 | amdgpu_ring_write(ring, vmid); |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c index bf16440e7258..e54cc3ca2303 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | |||
@@ -1261,13 +1261,12 @@ static void uvd_v7_0_ring_emit_reg_wait(struct amdgpu_ring *ring, uint32_t reg, | |||
1261 | } | 1261 | } |
1262 | 1262 | ||
1263 | static void uvd_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | 1263 | static void uvd_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1264 | unsigned vmid, unsigned pasid, | 1264 | unsigned vmid, uint64_t pd_addr) |
1265 | uint64_t pd_addr) | ||
1266 | { | 1265 | { |
1267 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; | 1266 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; |
1268 | uint32_t data0, data1, mask; | 1267 | uint32_t data0, data1, mask; |
1269 | 1268 | ||
1270 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 1269 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
1271 | 1270 | ||
1272 | /* wait for reg writes */ | 1271 | /* wait for reg writes */ |
1273 | data0 = hub->ctx0_ptb_addr_lo32 + vmid * 2; | 1272 | data0 = hub->ctx0_ptb_addr_lo32 + vmid * 2; |
@@ -1302,12 +1301,11 @@ static void uvd_v7_0_enc_ring_emit_reg_wait(struct amdgpu_ring *ring, | |||
1302 | } | 1301 | } |
1303 | 1302 | ||
1304 | static void uvd_v7_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, | 1303 | static void uvd_v7_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1305 | unsigned int vmid, unsigned pasid, | 1304 | unsigned int vmid, uint64_t pd_addr) |
1306 | uint64_t pd_addr) | ||
1307 | { | 1305 | { |
1308 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; | 1306 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; |
1309 | 1307 | ||
1310 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 1308 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
1311 | 1309 | ||
1312 | /* wait for reg writes */ | 1310 | /* wait for reg writes */ |
1313 | uvd_v7_0_enc_ring_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, | 1311 | uvd_v7_0_enc_ring_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, |
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c index 6d616015085b..428d1928e44e 100644 --- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | |||
@@ -844,8 +844,7 @@ static void vce_v3_0_ring_emit_ib(struct amdgpu_ring *ring, | |||
844 | } | 844 | } |
845 | 845 | ||
846 | static void vce_v3_0_emit_vm_flush(struct amdgpu_ring *ring, | 846 | static void vce_v3_0_emit_vm_flush(struct amdgpu_ring *ring, |
847 | unsigned int vmid, unsigned pasid, | 847 | unsigned int vmid, uint64_t pd_addr) |
848 | uint64_t pd_addr) | ||
849 | { | 848 | { |
850 | amdgpu_ring_write(ring, VCE_CMD_UPDATE_PTB); | 849 | amdgpu_ring_write(ring, VCE_CMD_UPDATE_PTB); |
851 | amdgpu_ring_write(ring, vmid); | 850 | amdgpu_ring_write(ring, vmid); |
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c index 22c2067bd849..2329b310ccf2 100755 --- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | |||
@@ -975,12 +975,11 @@ static void vce_v4_0_emit_reg_wait(struct amdgpu_ring *ring, uint32_t reg, | |||
975 | } | 975 | } |
976 | 976 | ||
977 | static void vce_v4_0_emit_vm_flush(struct amdgpu_ring *ring, | 977 | static void vce_v4_0_emit_vm_flush(struct amdgpu_ring *ring, |
978 | unsigned int vmid, unsigned pasid, | 978 | unsigned int vmid, uint64_t pd_addr) |
979 | uint64_t pd_addr) | ||
980 | { | 979 | { |
981 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; | 980 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; |
982 | 981 | ||
983 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 982 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
984 | 983 | ||
985 | /* wait for reg writes */ | 984 | /* wait for reg writes */ |
986 | vce_v4_0_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, | 985 | vce_v4_0_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, |
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index d9f597c36b63..fdf4ac9313cf 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |||
@@ -859,13 +859,12 @@ static void vcn_v1_0_dec_ring_emit_reg_wait(struct amdgpu_ring *ring, | |||
859 | } | 859 | } |
860 | 860 | ||
861 | static void vcn_v1_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring, | 861 | static void vcn_v1_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring, |
862 | unsigned vmid, unsigned pasid, | 862 | unsigned vmid, uint64_t pd_addr) |
863 | uint64_t pd_addr) | ||
864 | { | 863 | { |
865 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; | 864 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; |
866 | uint32_t data0, data1, mask; | 865 | uint32_t data0, data1, mask; |
867 | 866 | ||
868 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 867 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
869 | 868 | ||
870 | /* wait for register write */ | 869 | /* wait for register write */ |
871 | data0 = hub->ctx0_ptb_addr_lo32 + vmid * 2; | 870 | data0 = hub->ctx0_ptb_addr_lo32 + vmid * 2; |
@@ -997,12 +996,11 @@ static void vcn_v1_0_enc_ring_emit_reg_wait(struct amdgpu_ring *ring, | |||
997 | } | 996 | } |
998 | 997 | ||
999 | static void vcn_v1_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, | 998 | static void vcn_v1_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, |
1000 | unsigned int vmid, unsigned pasid, | 999 | unsigned int vmid, uint64_t pd_addr) |
1001 | uint64_t pd_addr) | ||
1002 | { | 1000 | { |
1003 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; | 1001 | struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; |
1004 | 1002 | ||
1005 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pasid, pd_addr); | 1003 | pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); |
1006 | 1004 | ||
1007 | /* wait for reg writes */ | 1005 | /* wait for reg writes */ |
1008 | vcn_v1_0_enc_ring_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, | 1006 | vcn_v1_0_enc_ring_emit_reg_wait(ring, hub->ctx0_ptb_addr_lo32 + vmid * 2, |