]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu/gmc: Fix AMDGPU_GART_PLACEMENT_LOW to not overlap with VRAM
authorTimur Kristóf <timur.kristof@gmail.com>
Sat, 18 Apr 2026 21:49:30 +0000 (23:49 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 24 Apr 2026 15:09:11 +0000 (11:09 -0400)
When the GART placement is set to AMDGPU_GART_PLACEMENT_LOW:
Make sure that GART does not overlap with VRAM when
VRAM is configured to be in the low address space.

Solve this according to the following logic:
- When GART fits before VRAM, use zero address for GART
- Otherwise, put GART after the end of VRAM, aligned to 4 GiB

Previously, I had assumed this was not possible
so it was OK to not handle it, but now we got a report
from a user who has a board that is configured this way.

Fixes: 917f91d8d8e8 ("drm/amdgpu/gmc: add a way to force a particular placement for GART")
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 3d9de5d86a1658cadb311461b001eb1df67263ad)

drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c

index 285e217fba040b039a2a667c9b8000023611d146..3d9497d121ca20d97b9fdf46833272bb8aadecb9 100644 (file)
@@ -314,7 +314,10 @@ void amdgpu_gmc_gart_location(struct amdgpu_device *adev, struct amdgpu_gmc *mc,
                mc->gart_start = max_mc_address - mc->gart_size + 1;
                break;
        case AMDGPU_GART_PLACEMENT_LOW:
-               mc->gart_start = 0;
+               if (size_bf >= mc->gart_size)
+                       mc->gart_start = 0;
+               else
+                       mc->gart_start = ALIGN(mc->fb_end, four_gb);
                break;
        case AMDGPU_GART_PLACEMENT_BEST_FIT:
        default: