aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index dfb12237a6b0..e21e823f67a5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -160,7 +160,7 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
160 man->default_caching = TTM_PL_FLAG_CACHED; 160 man->default_caching = TTM_PL_FLAG_CACHED;
161 break; 161 break;
162 case TTM_PL_TT: 162 case TTM_PL_TT:
163 man->func = &ttm_bo_manager_func; 163 man->func = &amdgpu_gtt_mgr_func;
164 man->gpu_offset = adev->mc.gtt_start; 164 man->gpu_offset = adev->mc.gtt_start;
165 man->available_caching = TTM_PL_MASK_CACHING; 165 man->available_caching = TTM_PL_MASK_CACHING;
166 man->default_caching = TTM_PL_FLAG_CACHED; 166 man->default_caching = TTM_PL_FLAG_CACHED;
@@ -277,7 +277,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
277 277
278 switch (old_mem->mem_type) { 278 switch (old_mem->mem_type) {
279 case TTM_PL_TT: 279 case TTM_PL_TT:
280 r = amdgpu_ttm_bind(bo->ttm, old_mem); 280 r = amdgpu_ttm_bind(bo, old_mem);
281 if (r) 281 if (r)
282 return r; 282 return r;
283 283
@@ -290,7 +290,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
290 } 290 }
291 switch (new_mem->mem_type) { 291 switch (new_mem->mem_type) {
292 case TTM_PL_TT: 292 case TTM_PL_TT:
293 r = amdgpu_ttm_bind(bo->ttm, new_mem); 293 r = amdgpu_ttm_bind(bo, new_mem);
294 if (r) 294 if (r)
295 return r; 295 return r;
296 296
@@ -675,7 +675,6 @@ static int amdgpu_ttm_backend_bind(struct ttm_tt *ttm,
675 return r; 675 return r;
676 } 676 }
677 } 677 }
678 gtt->offset = (u64)bo_mem->start << PAGE_SHIFT;
679 if (!ttm->num_pages) { 678 if (!ttm->num_pages) {
680 WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n", 679 WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n",
681 ttm->num_pages, bo_mem, ttm); 680 ttm->num_pages, bo_mem, ttm);
@@ -696,16 +695,25 @@ bool amdgpu_ttm_is_bound(struct ttm_tt *ttm)
696 return gtt && !list_empty(&gtt->list); 695 return gtt && !list_empty(&gtt->list);
697} 696}
698 697
699int amdgpu_ttm_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem) 698int amdgpu_ttm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *bo_mem)
700{ 699{
701 struct amdgpu_ttm_tt *gtt = (void *)ttm; 700 struct ttm_tt *ttm = bo->ttm;
701 struct amdgpu_ttm_tt *gtt = (void *)bo->ttm;
702 uint32_t flags; 702 uint32_t flags;
703 int r; 703 int r;
704 704
705 if (!ttm || amdgpu_ttm_is_bound(ttm)) 705 if (!ttm || amdgpu_ttm_is_bound(ttm))
706 return 0; 706 return 0;
707 707
708 r = amdgpu_gtt_mgr_alloc(&bo->bdev->man[TTM_PL_TT], bo,
709 NULL, bo_mem);
710 if (r) {
711 DRM_ERROR("Failed to allocate GTT address space (%d)\n", r);
712 return r;
713 }
714
708 flags = amdgpu_ttm_tt_pte_flags(gtt->adev, ttm, bo_mem); 715 flags = amdgpu_ttm_tt_pte_flags(gtt->adev, ttm, bo_mem);
716 gtt->offset = (u64)bo_mem->start << PAGE_SHIFT;
709 r = amdgpu_gart_bind(gtt->adev, gtt->offset, ttm->num_pages, 717 r = amdgpu_gart_bind(gtt->adev, gtt->offset, ttm->num_pages,
710 ttm->pages, gtt->ttm.dma_address, flags); 718 ttm->pages, gtt->ttm.dma_address, flags);
711 719