]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amdgpu: Restore uncached behaviour on GFX12
authorDavid Belanger <david.belanger@amd.com>
Tue, 2 Jul 2024 21:56:41 +0000 (17:56 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Mar 2025 21:04:57 +0000 (22:04 +0100)
commit 35b6162bb790555ad56b7f0d120e307b8334d778 upstream.

Always use MTYPE_UC if UNCACHED flag is specified.

This makes kernarg region uncached and it restores
usermode cache disable debug flag functionality.

Do not set MTYPE_UC for COHERENT flag, on GFX12 coherence is handled by
shader code.

Signed-off-by: David Belanger <david.belanger@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit eb6cdfb807d038d9b9986b5c87188f28a4071eae)
Cc: stable@vger.kernel.org # 6.12.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index 69f1aaeac99dd0accd234165a79c369f7c3d9c33..c75b2cf06c7f0a87a737c14040849446248176f2 100644 (file)
@@ -501,9 +501,6 @@ static void gmc_v12_0_get_vm_pte(struct amdgpu_device *adev,
                                 uint64_t *flags)
 {
        struct amdgpu_bo *bo = mapping->bo_va->base.bo;
-       struct amdgpu_device *bo_adev;
-       bool coherent, is_system;
-
 
        *flags &= ~AMDGPU_PTE_EXECUTABLE;
        *flags |= mapping->flags & AMDGPU_PTE_EXECUTABLE;
@@ -519,26 +516,11 @@ static void gmc_v12_0_get_vm_pte(struct amdgpu_device *adev,
                *flags &= ~AMDGPU_PTE_VALID;
        }
 
-       if (!bo)
-               return;
-
-       if (bo->flags & (AMDGPU_GEM_CREATE_COHERENT |
-                              AMDGPU_GEM_CREATE_UNCACHED))
-               *flags = AMDGPU_PTE_MTYPE_GFX12(*flags, MTYPE_UC);
-
-       bo_adev = amdgpu_ttm_adev(bo->tbo.bdev);
-       coherent = bo->flags & AMDGPU_GEM_CREATE_COHERENT;
-       is_system = bo->tbo.resource &&
-               (bo->tbo.resource->mem_type == TTM_PL_TT ||
-                bo->tbo.resource->mem_type == AMDGPU_PL_PREEMPT);
-
        if (bo && bo->flags & AMDGPU_GEM_CREATE_GFX12_DCC)
                *flags |= AMDGPU_PTE_DCC;
 
-       /* WA for HW bug */
-       if (is_system || ((bo_adev != adev) && coherent))
-               *flags = AMDGPU_PTE_MTYPE_GFX12(*flags, MTYPE_NC);
-
+       if (bo && bo->flags & AMDGPU_GEM_CREATE_UNCACHED)
+               *flags = AMDGPU_PTE_MTYPE_GFX12(*flags, MTYPE_UC);
 }
 
 static unsigned gmc_v12_0_get_vbios_fb_size(struct amdgpu_device *adev)
index 3e2911895c740dd53fcd8d2f49d17a818250589b..1b04d54f9a69cd22e16484d359b8f4d73f859309 100644 (file)
@@ -1276,13 +1276,7 @@ svm_range_get_pte_flags(struct kfd_node *node,
                break;
        case IP_VERSION(12, 0, 0):
        case IP_VERSION(12, 0, 1):
-               if (domain == SVM_RANGE_VRAM_DOMAIN) {
-                       if (bo_node != node)
-                               mapping_flags |= AMDGPU_VM_MTYPE_NC;
-               } else {
-                       mapping_flags |= coherent ?
-                               AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;
-               }
+               mapping_flags |= AMDGPU_VM_MTYPE_NC;
                break;
        default:
                mapping_flags |= coherent ?