diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 15 |
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++) { |