]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: flush tlb properly for GMC v12.1 in early phase
authorLe Ma <le.ma@amd.com>
Mon, 16 Jun 2025 10:56:41 +0000 (18:56 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 16 Dec 2025 18:23:07 +0000 (13:23 -0500)
Flush tlb properly for GMC v12.1

Signed-off-by: Le Ma <le.ma@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c
drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c

index 0c18b07cae3b717728abdc2a8f2db9989fe06262..a30fac3d57609418390633a160ce95378e72ee72 100644 (file)
@@ -2493,7 +2493,7 @@ static int gfx_v12_1_cp_resume(struct amdgpu_device *adev)
 
 static int gfx_v12_1_gfxhub_enable(struct amdgpu_device *adev)
 {
-       int r;
+       int r, i;
        bool value;
 
        r = adev->gfxhub.funcs->gart_enable(adev);
@@ -2506,7 +2506,10 @@ static int gfx_v12_1_gfxhub_enable(struct amdgpu_device *adev)
        adev->gfxhub.funcs->set_fault_enable_default(adev, value);
        /* TODO investigate why TLB flush is needed,
         * are we missing a flush somewhere else? */
-       adev->gmc.gmc_funcs->flush_gpu_tlb(adev, 0, AMDGPU_GFXHUB(0), 0);
+       for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS) {
+               if (AMDGPU_IS_GFXHUB(i))
+                       adev->gmc.gmc_funcs->flush_gpu_tlb(adev, 0, AMDGPU_GFXHUB(i), 0);
+       }
 
        return 0;
 }
index 90c5159a5a85b038513afccc3297f8e5ed2694ab..e63ad5f18a8e1d63b920663968287eea18fbb7d4 100644 (file)
@@ -974,7 +974,7 @@ static int gmc_v12_0_gart_enable(struct amdgpu_device *adev)
        value = amdgpu_vm_fault_stop != AMDGPU_VM_FAULT_STOP_ALWAYS;
 
        adev->mmhub.funcs->set_fault_enable_default(adev, value);
-       gmc_v12_0_flush_gpu_tlb(adev, 0, AMDGPU_MMHUB0(0), 0);
+       adev->gmc.gmc_funcs->flush_gpu_tlb(adev, 0, AMDGPU_MMHUB0(0), 0);
 
        dev_info(adev->dev, "PCIE GART of %uM enabled (table at 0x%016llX).\n",
                 (unsigned)(adev->gmc.gart_size >> 20),