diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 20 |
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(>t->list); | 695 | return gtt && !list_empty(>t->list); |
697 | } | 696 | } |
698 | 697 | ||
699 | int amdgpu_ttm_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem) | 698 | int 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 | ||