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);
205 r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem); in radeon_bo_move()
223 if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { in radeon_bo_move()
235 radeon_ttm_tt_unbind(bo->bdev, bo->ttm); in radeon_bo_move()
328 struct ttm_tt ttm; member
338 static int radeon_ttm_tt_pin_userptr(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_pin_userptr() argument
341 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_pin_userptr()
355 unsigned long end = gtt->userptr + (u64)ttm->num_pages * PAGE_SIZE; in radeon_ttm_tt_pin_userptr()
363 unsigned num_pages = ttm->num_pages - pinned; in radeon_ttm_tt_pin_userptr()
365 struct page **pages = ttm->pages + pinned; in radeon_ttm_tt_pin_userptr()
374 } while (pinned < ttm->num_pages); in radeon_ttm_tt_pin_userptr()
376 r = sg_alloc_table_from_pages(ttm->sg, ttm->pages, ttm->num_pages, 0, in radeon_ttm_tt_pin_userptr()
377 (u64)ttm->num_pages << PAGE_SHIFT, in radeon_ttm_tt_pin_userptr()
382 r = dma_map_sgtable(rdev->dev, ttm->sg, direction, 0); in radeon_ttm_tt_pin_userptr()
386 drm_prime_sg_to_dma_addr_array(ttm->sg, gtt->ttm.dma_address, in radeon_ttm_tt_pin_userptr()
387 ttm->num_pages); in radeon_ttm_tt_pin_userptr()
392 kfree(ttm->sg); in radeon_ttm_tt_pin_userptr()
395 release_pages(ttm->pages, pinned); in radeon_ttm_tt_pin_userptr()
399 static void radeon_ttm_tt_unpin_userptr(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_unpin_userptr() argument
402 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_unpin_userptr()
410 if (!ttm->sg || !ttm->sg->sgl) in radeon_ttm_tt_unpin_userptr()
414 dma_unmap_sgtable(rdev->dev, ttm->sg, direction, 0); in radeon_ttm_tt_unpin_userptr()
416 for_each_sgtable_page(ttm->sg, &sg_iter, 0) { in radeon_ttm_tt_unpin_userptr()
425 sg_free_table(ttm->sg); in radeon_ttm_tt_unpin_userptr()
428 static bool radeon_ttm_backend_is_bound(struct ttm_tt *ttm) in radeon_ttm_backend_is_bound() argument
430 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_is_bound()
436 struct ttm_tt *ttm, in radeon_ttm_backend_bind() argument
439 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_bind()
449 radeon_ttm_tt_pin_userptr(bdev, ttm); in radeon_ttm_backend_bind()
454 if (!ttm->num_pages) { in radeon_ttm_backend_bind()
456 ttm->num_pages, bo_mem, ttm); in radeon_ttm_backend_bind()
458 if (ttm->caching == ttm_cached) in radeon_ttm_backend_bind()
460 r = radeon_gart_bind(rdev, gtt->offset, ttm->num_pages, in radeon_ttm_backend_bind()
461 ttm->pages, gtt->ttm.dma_address, flags); in radeon_ttm_backend_bind()
464 ttm->num_pages, (unsigned)gtt->offset); in radeon_ttm_backend_bind()
471 static void radeon_ttm_backend_unbind(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_backend_unbind() argument
473 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_unbind()
477 radeon_ttm_tt_unpin_userptr(bdev, ttm); in radeon_ttm_backend_unbind()
482 radeon_gart_unbind(rdev, gtt->offset, ttm->num_pages); in radeon_ttm_backend_unbind()
487 static void radeon_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_backend_destroy() argument
489 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_destroy()
491 ttm_tt_fini(>t->ttm); in radeon_ttm_backend_destroy()
522 if (ttm_sg_tt_init(>t->ttm, bo, page_flags, caching)) { in radeon_ttm_tt_create()
526 return >t->ttm; in radeon_ttm_tt_create()
530 struct ttm_tt *ttm) in radeon_ttm_tt_to_gtt() argument
537 if (!ttm) in radeon_ttm_tt_to_gtt()
539 return container_of(ttm, struct radeon_ttm_tt, ttm); in radeon_ttm_tt_to_gtt()
543 struct ttm_tt *ttm, in radeon_ttm_tt_populate() argument
547 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_populate()
548 bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); in radeon_ttm_tt_populate()
551 ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL); in radeon_ttm_tt_populate()
552 if (!ttm->sg) in radeon_ttm_tt_populate()
555 ttm->page_flags |= TTM_TT_FLAG_EXTERNAL; in radeon_ttm_tt_populate()
559 if (slave && ttm->sg) { in radeon_ttm_tt_populate()
560 drm_prime_sg_to_dma_addr_array(ttm->sg, gtt->ttm.dma_address, in radeon_ttm_tt_populate()
561 ttm->num_pages); in radeon_ttm_tt_populate()
565 return ttm_pool_alloc(&rdev->mman.bdev.pool, ttm, ctx); in radeon_ttm_tt_populate()
568 static void radeon_ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_unpopulate() argument
571 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_unpopulate()
572 bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); in radeon_ttm_tt_unpopulate()
574 radeon_ttm_tt_unbind(bdev, ttm); in radeon_ttm_tt_unpopulate()
577 kfree(ttm->sg); in radeon_ttm_tt_unpopulate()
578 ttm->page_flags &= ~TTM_TT_FLAG_EXTERNAL; in radeon_ttm_tt_unpopulate()
585 return ttm_pool_free(&rdev->mman.bdev.pool, ttm); in radeon_ttm_tt_unpopulate()
589 struct ttm_tt *ttm, uint64_t addr, in radeon_ttm_tt_set_userptr() argument
592 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_set_userptr()
604 struct ttm_tt *ttm) in radeon_ttm_tt_is_bound() argument
609 return ttm_agp_is_bound(ttm); in radeon_ttm_tt_is_bound()
611 return radeon_ttm_backend_is_bound(ttm); in radeon_ttm_tt_is_bound()
615 struct ttm_tt *ttm, in radeon_ttm_tt_bind() argument
626 return ttm_agp_bind(ttm, bo_mem); in radeon_ttm_tt_bind()
629 return radeon_ttm_backend_bind(bdev, ttm, bo_mem); in radeon_ttm_tt_bind()
633 struct ttm_tt *ttm) in radeon_ttm_tt_unbind() argument
639 ttm_agp_unbind(ttm); in radeon_ttm_tt_unbind()
643 radeon_ttm_backend_unbind(bdev, ttm); in radeon_ttm_tt_unbind()
647 struct ttm_tt *ttm) in radeon_ttm_tt_destroy() argument
653 ttm_agp_destroy(ttm); in radeon_ttm_tt_destroy()
657 radeon_ttm_backend_destroy(bdev, ttm); in radeon_ttm_tt_destroy()
661 struct ttm_tt *ttm) in radeon_ttm_tt_has_userptr() argument
663 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_has_userptr()
672 struct ttm_tt *ttm) in radeon_ttm_tt_is_readonly() argument
674 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_is_readonly()