summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorMukul Joshi <mukul.joshi@amd.com>2025-07-23 22:34:11 -0400
committerAlex Deucher <alexander.deucher@amd.com>2026-01-05 16:26:15 -0500
commit44fc86f2a338e6c202565611b9725c9428ae7481 (patch)
tree3a3dba32439f92645c6a1d63cca4b167bf312527 /drivers/gpu
parentd3336c935ecebb0185cce50848d9fdea665085f2 (diff)
drm/amdgpu: Program IH_VMID_LUT_INDEX register on GFX 12.1
For querying VMID <-> PASID mapping on GFX 12.1, we need to first program the IH_VMID_LUT_INDEX before fetching the LUT mapping. Without this TLB flush may not work. Signed-off-by: Mukul Joshi <mukul.joshi@amd.com> Reviewed-by: Michael Chen <michael.chen@amd.com> Reviewed-by: Alex Sierra <alex.sierra@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v12_1.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_1.c b/drivers/gpu/drm/amd/amdgpu/gmc_v12_1.c
index 061d1be72340..d68e5a2377b6 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_1.c
@@ -230,8 +230,18 @@ static int gmc_v12_1_process_interrupt(struct amdgpu_device *adev,
}
static bool gmc_v12_1_get_vmid_pasid_mapping_info(struct amdgpu_device *adev,
- uint8_t vmid, uint16_t *p_pasid)
+ uint8_t vmid, uint8_t inst,
+ uint16_t *p_pasid)
{
+ uint16_t index;
+
+ if (inst/4)
+ index = 0xA + inst%4;
+ else
+ index = 0x2 + inst%4;
+
+ WREG32(SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_LUT_INDEX), index);
+
*p_pasid = RREG32(SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid) & 0xffff;
return !!(*p_pasid);
@@ -350,7 +360,7 @@ static void gmc_v12_1_flush_gpu_tlb_pasid(struct amdgpu_device *adev,
for (vmid = 1; vmid < 16; vmid++) {
bool valid;
- valid = gmc_v12_1_get_vmid_pasid_mapping_info(adev, vmid,
+ valid = gmc_v12_1_get_vmid_pasid_mapping_info(adev, vmid, inst,
&queried);
if (!valid || queried != pasid)
continue;