summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
diff options
context:
space:
mode:
authorGraham Sider <Graham.Sider@amd.com>2022-04-21 17:32:02 +0300
committerAlex Deucher <alexander.deucher@amd.com>2022-05-11 00:53:11 +0300
commit3cc69021e5d4e4fe5322d425f4abf8128f0599b7 (patch)
tree83e3742f26f0dde22016c5e74aad04ca4fae87bf /drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
parent3055e5d155b246dd87766655a8a89af4ba8369af (diff)
downloadlinux-3cc69021e5d4e4fe5322d425f4abf8128f0599b7.tar.xz
drm/amdgpu: Implement get_vmid_pasid_mapping for gfx11
Implement gmc_v11_0_get_vmid_pasid_mapping_info to fix gmc_v11_0_flush_gpu_tlb_pasid logic. Change from gfx10 to use IH_VMID_*_LUT registers for VMID -> PASID mapping. Signed-off-by: Graham Sider <Graham.Sider@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
index 8d733eeac556..477f67d9b07c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
@@ -155,21 +155,13 @@ static bool gmc_v11_0_use_invalidate_semaphore(struct amdgpu_device *adev,
(!amdgpu_sriov_vf(adev)));
}
-static bool gmc_v11_0_get_atc_vmid_pasid_mapping_info(
+static bool gmc_v11_0_get_vmid_pasid_mapping_info(
struct amdgpu_device *adev,
uint8_t vmid, uint16_t *p_pasid)
{
-#if 0 // TODO:
- uint32_t value;
+ *p_pasid = RREG32(SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid) & 0xffff;
- value = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
- + vmid);
- *p_pasid = value & ATC_VMID0_PASID_MAPPING__PASID_MASK;
-
- return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK);
-#else
- return 0;
-#endif
+ return !!(*p_pasid);
}
/*
@@ -340,7 +332,7 @@ static int gmc_v11_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,
for (vmid = 1; vmid < 16; vmid++) {
- ret = gmc_v11_0_get_atc_vmid_pasid_mapping_info(adev, vmid,
+ ret = gmc_v11_0_get_vmid_pasid_mapping_info(adev, vmid,
&queried_pasid);
if (ret && queried_pasid == pasid) {
if (all_hub) {