Lines Matching refs:ttm

56 static int radeon_ttm_tt_bind(struct ttm_device *bdev, struct ttm_tt *ttm,
58 static void radeon_ttm_tt_unbind(struct ttm_device *bdev, struct ttm_tt *ttm);
198 r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem); in radeon_bo_move()
209 bo->ttm == NULL)) { in radeon_bo_move()
221 radeon_ttm_tt_unbind(bo->bdev, bo->ttm); in radeon_bo_move()
314 struct ttm_tt ttm; member
324 static int radeon_ttm_tt_pin_userptr(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_pin_userptr() argument
327 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_pin_userptr()
341 unsigned long end = gtt->userptr + (u64)ttm->num_pages * PAGE_SIZE; in radeon_ttm_tt_pin_userptr()
349 unsigned num_pages = ttm->num_pages - pinned; in radeon_ttm_tt_pin_userptr()
351 struct page **pages = ttm->pages + pinned; in radeon_ttm_tt_pin_userptr()
360 } while (pinned < ttm->num_pages); in radeon_ttm_tt_pin_userptr()
362 r = sg_alloc_table_from_pages(ttm->sg, ttm->pages, ttm->num_pages, 0, in radeon_ttm_tt_pin_userptr()
363 (u64)ttm->num_pages << PAGE_SHIFT, in radeon_ttm_tt_pin_userptr()
368 r = dma_map_sgtable(rdev->dev, ttm->sg, direction, 0); in radeon_ttm_tt_pin_userptr()
372 drm_prime_sg_to_dma_addr_array(ttm->sg, gtt->ttm.dma_address, in radeon_ttm_tt_pin_userptr()
373 ttm->num_pages); in radeon_ttm_tt_pin_userptr()
378 kfree(ttm->sg); in radeon_ttm_tt_pin_userptr()
381 release_pages(ttm->pages, pinned); in radeon_ttm_tt_pin_userptr()
385 static void radeon_ttm_tt_unpin_userptr(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_unpin_userptr() argument
388 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_unpin_userptr()
396 if (!ttm->sg || !ttm->sg->sgl) in radeon_ttm_tt_unpin_userptr()
400 dma_unmap_sgtable(rdev->dev, ttm->sg, direction, 0); in radeon_ttm_tt_unpin_userptr()
402 for_each_sgtable_page(ttm->sg, &sg_iter, 0) { in radeon_ttm_tt_unpin_userptr()
411 sg_free_table(ttm->sg); in radeon_ttm_tt_unpin_userptr()
414 static bool radeon_ttm_backend_is_bound(struct ttm_tt *ttm) in radeon_ttm_backend_is_bound() argument
416 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_is_bound()
422 struct ttm_tt *ttm, in radeon_ttm_backend_bind() argument
425 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_bind()
435 radeon_ttm_tt_pin_userptr(bdev, ttm); in radeon_ttm_backend_bind()
440 if (!ttm->num_pages) { in radeon_ttm_backend_bind()
442 ttm->num_pages, bo_mem, ttm); in radeon_ttm_backend_bind()
444 if (ttm->caching == ttm_cached) in radeon_ttm_backend_bind()
446 r = radeon_gart_bind(rdev, gtt->offset, ttm->num_pages, in radeon_ttm_backend_bind()
447 ttm->pages, gtt->ttm.dma_address, flags); in radeon_ttm_backend_bind()
450 ttm->num_pages, (unsigned)gtt->offset); in radeon_ttm_backend_bind()
457 static void radeon_ttm_backend_unbind(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_backend_unbind() argument
459 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_unbind()
463 radeon_ttm_tt_unpin_userptr(bdev, ttm); in radeon_ttm_backend_unbind()
468 radeon_gart_unbind(rdev, gtt->offset, ttm->num_pages); in radeon_ttm_backend_unbind()
473 static void radeon_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_backend_destroy() argument
475 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_destroy()
477 ttm_tt_fini(&gtt->ttm); in radeon_ttm_backend_destroy()
508 if (ttm_sg_tt_init(&gtt->ttm, bo, page_flags, caching)) { in radeon_ttm_tt_create()
512 return &gtt->ttm; in radeon_ttm_tt_create()
516 struct ttm_tt *ttm) in radeon_ttm_tt_to_gtt() argument
523 if (!ttm) in radeon_ttm_tt_to_gtt()
525 return container_of(ttm, struct radeon_ttm_tt, ttm); in radeon_ttm_tt_to_gtt()
529 struct ttm_tt *ttm, in radeon_ttm_tt_populate() argument
533 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_populate()
534 bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); in radeon_ttm_tt_populate()
537 ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL); in radeon_ttm_tt_populate()
538 if (!ttm->sg) in radeon_ttm_tt_populate()
541 ttm->page_flags |= TTM_TT_FLAG_EXTERNAL; in radeon_ttm_tt_populate()
545 if (slave && ttm->sg) { in radeon_ttm_tt_populate()
546 drm_prime_sg_to_dma_addr_array(ttm->sg, gtt->ttm.dma_address, in radeon_ttm_tt_populate()
547 ttm->num_pages); in radeon_ttm_tt_populate()
551 return ttm_pool_alloc(&rdev->mman.bdev.pool, ttm, ctx); in radeon_ttm_tt_populate()
554 static void radeon_ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_unpopulate() argument
557 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_unpopulate()
558 bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); in radeon_ttm_tt_unpopulate()
560 radeon_ttm_tt_unbind(bdev, ttm); in radeon_ttm_tt_unpopulate()
563 kfree(ttm->sg); in radeon_ttm_tt_unpopulate()
564 ttm->page_flags &= ~TTM_TT_FLAG_EXTERNAL; in radeon_ttm_tt_unpopulate()
571 return ttm_pool_free(&rdev->mman.bdev.pool, ttm); in radeon_ttm_tt_unpopulate()
575 struct ttm_tt *ttm, uint64_t addr, in radeon_ttm_tt_set_userptr() argument
578 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_set_userptr()
590 struct ttm_tt *ttm) in radeon_ttm_tt_is_bound() argument
595 return ttm_agp_is_bound(ttm); in radeon_ttm_tt_is_bound()
597 return radeon_ttm_backend_is_bound(ttm); in radeon_ttm_tt_is_bound()
601 struct ttm_tt *ttm, in radeon_ttm_tt_bind() argument
612 return ttm_agp_bind(ttm, bo_mem); in radeon_ttm_tt_bind()
615 return radeon_ttm_backend_bind(bdev, ttm, bo_mem); in radeon_ttm_tt_bind()
619 struct ttm_tt *ttm) in radeon_ttm_tt_unbind() argument
625 ttm_agp_unbind(ttm); in radeon_ttm_tt_unbind()
629 radeon_ttm_backend_unbind(bdev, ttm); in radeon_ttm_tt_unbind()
633 struct ttm_tt *ttm) in radeon_ttm_tt_destroy() argument
639 ttm_agp_destroy(ttm); in radeon_ttm_tt_destroy()
643 radeon_ttm_backend_destroy(bdev, ttm); in radeon_ttm_tt_destroy()
647 struct ttm_tt *ttm) in radeon_ttm_tt_has_userptr() argument
649 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_has_userptr()
658 struct ttm_tt *ttm) in radeon_ttm_tt_is_readonly() argument
660 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_is_readonly()