aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 5aac350b007f..758d8cf8fd17 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -122,20 +122,19 @@ static void amdgpu_ttm_placement_init(struct amdgpu_device *adev,
122 122
123 if (domain & AMDGPU_GEM_DOMAIN_VRAM) { 123 if (domain & AMDGPU_GEM_DOMAIN_VRAM) {
124 unsigned visible_pfn = adev->mc.visible_vram_size >> PAGE_SHIFT; 124 unsigned visible_pfn = adev->mc.visible_vram_size >> PAGE_SHIFT;
125 unsigned lpfn = 0;
126
127 /* This forces a reallocation if the flag wasn't set before */
128 if (flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)
129 lpfn = adev->mc.real_vram_size >> PAGE_SHIFT;
130 125
131 places[c].fpfn = 0; 126 places[c].fpfn = 0;
132 places[c].lpfn = lpfn; 127 places[c].lpfn = 0;
133 places[c].flags = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | 128 places[c].flags = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED |
134 TTM_PL_FLAG_VRAM; 129 TTM_PL_FLAG_VRAM;
130
135 if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) 131 if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)
136 places[c].lpfn = visible_pfn; 132 places[c].lpfn = visible_pfn;
137 else 133 else
138 places[c].flags |= TTM_PL_FLAG_TOPDOWN; 134 places[c].flags |= TTM_PL_FLAG_TOPDOWN;
135
136 if (flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)
137 places[c].flags |= TTM_PL_FLAG_CONTIGUOUS;
139 c++; 138 c++;
140 } 139 }
141 140
@@ -928,8 +927,7 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo)
928 size = bo->mem.num_pages << PAGE_SHIFT; 927 size = bo->mem.num_pages << PAGE_SHIFT;
929 offset = bo->mem.start << PAGE_SHIFT; 928 offset = bo->mem.start << PAGE_SHIFT;
930 /* TODO: figure out how to map scattered VRAM to the CPU */ 929 /* TODO: figure out how to map scattered VRAM to the CPU */
931 if ((offset + size) <= adev->mc.visible_vram_size && 930 if ((offset + size) <= adev->mc.visible_vram_size)
932 (abo->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS))
933 return 0; 931 return 0;
934 932
935 /* Can't move a pinned BO to visible VRAM */ 933 /* Can't move a pinned BO to visible VRAM */
@@ -937,7 +935,6 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo)
937 return -EINVAL; 935 return -EINVAL;
938 936
939 /* hurrah the memory is not visible ! */ 937 /* hurrah the memory is not visible ! */
940 abo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
941 amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM); 938 amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM);
942 lpfn = adev->mc.visible_vram_size >> PAGE_SHIFT; 939 lpfn = adev->mc.visible_vram_size >> PAGE_SHIFT;
943 for (i = 0; i < abo->placement.num_placement; i++) { 940 for (i = 0; i < abo->placement.num_placement; i++) {