]> www.infradead.org Git - users/willy/xarray.git/commitdiff
drm/amdkfd: apply uncached flag for aldebaran
authorEric Huang <jinhuieric.huang@amd.com>
Wed, 13 May 2020 18:29:59 +0000 (14:29 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 24 Mar 2021 03:00:48 +0000 (23:00 -0400)
The flag is only applied on fine-grained memory.

Signed-off-by: Eric Huang <jinhuieric.huang@amd.com>
Reviewed-by: Oak Zeng <Oak.Zeng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

index 0792eaffd2ede6ca47da11352fc1ebb76a593024..ab516a1a54cdd14cea68f9ade3d537100de4b788 100644 (file)
@@ -405,6 +405,7 @@ static uint64_t get_pte_flags(struct amdgpu_device *adev, struct kgd_mem *mem)
 {
        struct amdgpu_device *bo_adev = amdgpu_ttm_adev(mem->bo->tbo.bdev);
        bool coherent = mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_COHERENT;
+       bool uncached = mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_UNCACHED;
        uint32_t mapping_flags;
        uint64_t pte_flags;
        bool snoop = false;
@@ -429,7 +430,12 @@ static uint64_t get_pte_flags(struct amdgpu_device *adev, struct kgd_mem *mem)
                }
                break;
        case CHIP_ALDEBARAN:
-               if (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
+               if (coherent && uncached) {
+                       if (adev->gmc.xgmi.connected_to_cpu ||
+                               !(mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM))
+                               snoop = true;
+                       mapping_flags |= AMDGPU_VM_MTYPE_UC;
+               } else if (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
                        if (bo_adev == adev) {
                                mapping_flags |= AMDGPU_VM_MTYPE_RW;
                                if (adev->gmc.xgmi.connected_to_cpu)