summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
diff options
context:
space:
mode:
authorPhilip Yang <Philip.Yang@amd.com>2023-01-27 02:54:29 +0300
committerAlex Deucher <alexander.deucher@amd.com>2023-06-09 17:36:27 +0300
commit7f6db89418f9d26eb68e050ff16de8e9827011ca (patch)
tree1451c5e95d70afb2cec97abe5559ea1c9ee000b3 /drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
parent2046ed6c8aa951e4ae83c5022bb0a7c777386097 (diff)
downloadlinux-7f6db89418f9d26eb68e050ff16de8e9827011ca.tar.xz
drm/amdgpu: dGPU mode placement support memory partition
dGPU mode uses VRAM manager to validate bo, amdgpu bo placement use the mem_id to get the allocation range first, last page frame number from xcp manager, pass to drm buddy allocator as the allowed range. Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 628632efabc8..85ad355815fe 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -132,13 +132,18 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)
if (domain & AMDGPU_GEM_DOMAIN_VRAM) {
unsigned int visible_pfn = adev->gmc.visible_vram_size >> PAGE_SHIFT;
- places[c].fpfn = 0;
- places[c].lpfn = 0;
+ if (adev->gmc.mem_partitions && abo->mem_id >= 0) {
+ places[c].fpfn = adev->gmc.mem_partitions[abo->mem_id].range.fpfn;
+ places[c].lpfn = adev->gmc.mem_partitions[abo->mem_id].range.lpfn;
+ } else {
+ places[c].fpfn = 0;
+ places[c].lpfn = 0;
+ }
places[c].mem_type = TTM_PL_VRAM;
places[c].flags = 0;
if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)
- places[c].lpfn = visible_pfn;
+ places[c].lpfn = min_not_zero(places[c].lpfn, visible_pfn);
else if (adev->gmc.real_vram_size != adev->gmc.visible_vram_size)
places[c].flags |= TTM_PL_FLAG_TOPDOWN;