|
@@ -368,17 +368,15 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev,
|
|
|
}
|
|
|
|
|
|
static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring,
|
|
|
- unsigned vmid, unsigned pasid,
|
|
|
- uint64_t pd_addr)
|
|
|
+ unsigned vmid, uint64_t pd_addr)
|
|
|
{
|
|
|
struct amdgpu_device *adev = ring->adev;
|
|
|
struct amdgpu_vmhub *hub = &adev->vmhub[ring->funcs->vmhub];
|
|
|
uint32_t req = gmc_v9_0_get_invalidate_req(vmid);
|
|
|
uint64_t flags = AMDGPU_PTE_VALID;
|
|
|
unsigned eng = ring->vm_inv_eng;
|
|
|
- uint32_t reg;
|
|
|
|
|
|
- amdgpu_gmc_get_vm_pde(ring->adev, -1, &pd_addr, &flags);
|
|
|
+ amdgpu_gmc_get_vm_pde(adev, -1, &pd_addr, &flags);
|
|
|
pd_addr |= flags;
|
|
|
|
|
|
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,
|
|
|
amdgpu_ring_emit_wreg(ring, hub->ctx0_ptb_addr_hi32 + (2 * vmid),
|
|
|
upper_32_bits(pd_addr));
|
|
|
|
|
|
- if (ring->funcs->vmhub == AMDGPU_GFXHUB)
|
|
|
- reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid;
|
|
|
- else
|
|
|
- reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT_MM) + vmid;
|
|
|
-
|
|
|
- amdgpu_ring_emit_wreg(ring, reg, pasid);
|
|
|
-
|
|
|
amdgpu_ring_emit_wreg(ring, hub->vm_inv_eng0_req + eng, req);
|
|
|
|
|
|
/* wait for the invalidate to complete */
|
|
@@ -403,6 +394,20 @@ static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring,
|
|
|
return pd_addr;
|
|
|
}
|
|
|
|
|
|
+static void gmc_v9_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid,
|
|
|
+ unsigned pasid)
|
|
|
+{
|
|
|
+ struct amdgpu_device *adev = ring->adev;
|
|
|
+ uint32_t reg;
|
|
|
+
|
|
|
+ if (ring->funcs->vmhub == AMDGPU_GFXHUB)
|
|
|
+ reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid;
|
|
|
+ else
|
|
|
+ reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT_MM) + vmid;
|
|
|
+
|
|
|
+ amdgpu_ring_emit_wreg(ring, reg, pasid);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* gmc_v9_0_set_pte_pde - update the page tables using MMIO
|
|
|
*
|
|
@@ -529,6 +534,7 @@ static void gmc_v9_0_get_vm_pde(struct amdgpu_device *adev, int level,
|
|
|
static const struct amdgpu_gmc_funcs gmc_v9_0_gmc_funcs = {
|
|
|
.flush_gpu_tlb = gmc_v9_0_flush_gpu_tlb,
|
|
|
.emit_flush_gpu_tlb = gmc_v9_0_emit_flush_gpu_tlb,
|
|
|
+ .emit_pasid_mapping = gmc_v9_0_emit_pasid_mapping,
|
|
|
.set_pte_pde = gmc_v9_0_set_pte_pde,
|
|
|
.get_vm_pte_flags = gmc_v9_0_get_vm_pte_flags,
|
|
|
.get_vm_pde = gmc_v9_0_get_vm_pde
|