aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-02-04 04:32:35 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-02-19 14:20:18 -0500
commitc633c00bf06779ec6d5e2c01748d4753ede98f8a (patch)
tree012bb3f787d03d71b7c13d16e7bf483d20ff6828
parentec47734a6d0e82c132e3e0883f2f663f138da43a (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>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c28
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/si_dma.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v3_0.c3
-rwxr-xr-xdrivers/gpu/drm/amd/amdgpu/vce_v4_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c10
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 */
875static void cik_sdma_ring_emit_vm_flush(struct amdgpu_ring *ring, 875static 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
2328static void gfx_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 2328static 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 */
3221static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 3221static 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
6313static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 6313static 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
3678static void gfx_v9_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 3678static 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
365static uint64_t gmc_v6_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, 365static 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
438static uint64_t gmc_v7_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, 438static 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
455static 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 = {
1327static const struct amdgpu_gmc_funcs gmc_v7_0_gmc_funcs = { 1330static 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
614static uint64_t gmc_v8_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, 614static 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
631static 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 = {
1662static const struct amdgpu_gmc_funcs gmc_v8_0_gmc_funcs = { 1665static 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
370static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring, 370static 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
397static 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,
529static const struct amdgpu_gmc_funcs gmc_v9_0_gmc_funcs = { 534static 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 */
854static void sdma_v2_4_ring_emit_vm_flush(struct amdgpu_ring *ring, 854static 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 */
1119static void sdma_v3_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 1119static 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 */
1125static void sdma_v4_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 1125static 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
1132static void sdma_v4_0_ring_emit_wreg(struct amdgpu_ring *ring, 1131static 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 */
462static void si_dma_ring_emit_vm_flush(struct amdgpu_ring *ring, 462static 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
1060static void uvd_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 1060static 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
1109static void uvd_v6_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, 1108static 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
1263static void uvd_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 1263static 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
1304static void uvd_v7_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, 1303static 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
846static void vce_v3_0_emit_vm_flush(struct amdgpu_ring *ring, 846static 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
977static void vce_v4_0_emit_vm_flush(struct amdgpu_ring *ring, 977static 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
861static void vcn_v1_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring, 861static 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
999static void vcn_v1_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring, 998static 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,