Lines Matching refs:ttm

64 static int radeon_ttm_tt_bind(struct ttm_device *bdev, struct ttm_tt *ttm,
66 static void radeon_ttm_tt_unbind(struct ttm_device *bdev, struct ttm_tt *ttm);
206 r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem); in radeon_bo_move()
217 bo->ttm == NULL)) { in radeon_bo_move()
229 radeon_ttm_tt_unbind(bo->bdev, bo->ttm); in radeon_bo_move()
322 struct ttm_tt ttm; member
332 static int radeon_ttm_tt_pin_userptr(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_pin_userptr() argument
338 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_pin_userptr()
352 unsigned long end = gtt->userptr + (u64)ttm->num_pages * PAGE_SIZE; in radeon_ttm_tt_pin_userptr()
360 unsigned num_pages = ttm->num_pages - pinned; in radeon_ttm_tt_pin_userptr()
362 struct vm_page **pages = ttm->pages + pinned; in radeon_ttm_tt_pin_userptr()
371 } while (pinned < ttm->num_pages); in radeon_ttm_tt_pin_userptr()
373 r = sg_alloc_table_from_pages(ttm->sg, ttm->pages, ttm->num_pages, 0, in radeon_ttm_tt_pin_userptr()
374 (u64)ttm->num_pages << PAGE_SHIFT, in radeon_ttm_tt_pin_userptr()
379 r = dma_map_sgtable(rdev->dev, ttm->sg, direction, 0); in radeon_ttm_tt_pin_userptr()
383 drm_prime_sg_to_dma_addr_array(ttm->sg, gtt->ttm.dma_address, in radeon_ttm_tt_pin_userptr()
384 ttm->num_pages); in radeon_ttm_tt_pin_userptr()
389 kfree(ttm->sg); in radeon_ttm_tt_pin_userptr()
392 release_pages(ttm->pages, pinned); in radeon_ttm_tt_pin_userptr()
397 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()
429 static bool radeon_ttm_backend_is_bound(struct ttm_tt *ttm) in radeon_ttm_backend_is_bound() argument
431 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_is_bound()
437 struct ttm_tt *ttm, in radeon_ttm_backend_bind() argument
440 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_bind()
450 radeon_ttm_tt_pin_userptr(bdev, ttm); in radeon_ttm_backend_bind()
455 if (!ttm->num_pages) { in radeon_ttm_backend_bind()
457 ttm->num_pages, bo_mem, ttm); in radeon_ttm_backend_bind()
459 if (ttm->caching == ttm_cached) in radeon_ttm_backend_bind()
461 r = radeon_gart_bind(rdev, gtt->offset, ttm->num_pages, in radeon_ttm_backend_bind()
462 ttm->pages, gtt->ttm.dma_address, flags); in radeon_ttm_backend_bind()
465 ttm->num_pages, (unsigned)gtt->offset); in radeon_ttm_backend_bind()
472 static void radeon_ttm_backend_unbind(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_backend_unbind() argument
474 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_unbind()
478 radeon_ttm_tt_unpin_userptr(bdev, ttm); in radeon_ttm_backend_unbind()
483 radeon_gart_unbind(rdev, gtt->offset, ttm->num_pages); in radeon_ttm_backend_unbind()
488 static void radeon_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_backend_destroy() argument
490 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_destroy()
492 ttm_tt_fini(&gtt->ttm); in radeon_ttm_backend_destroy()
523 if (ttm_sg_tt_init(&gtt->ttm, bo, page_flags, caching)) { in radeon_ttm_tt_create()
527 return &gtt->ttm; in radeon_ttm_tt_create()
531 struct ttm_tt *ttm) in radeon_ttm_tt_to_gtt() argument
538 if (!ttm) in radeon_ttm_tt_to_gtt()
540 return container_of(ttm, struct radeon_ttm_tt, ttm); in radeon_ttm_tt_to_gtt()
544 struct ttm_tt *ttm, in radeon_ttm_tt_populate() argument
548 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_populate()
549 bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); in radeon_ttm_tt_populate()
552 ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL); in radeon_ttm_tt_populate()
553 if (!ttm->sg) in radeon_ttm_tt_populate()
556 ttm->page_flags |= TTM_TT_FLAG_EXTERNAL; in radeon_ttm_tt_populate()
560 if (slave && ttm->sg) { in radeon_ttm_tt_populate()
561 drm_prime_sg_to_dma_addr_array(ttm->sg, gtt->ttm.dma_address, in radeon_ttm_tt_populate()
562 ttm->num_pages); in radeon_ttm_tt_populate()
566 return ttm_pool_alloc(&rdev->mman.bdev.pool, ttm, ctx); in radeon_ttm_tt_populate()
569 static void radeon_ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm) in radeon_ttm_tt_unpopulate() argument
572 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_unpopulate()
573 bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); in radeon_ttm_tt_unpopulate()
575 radeon_ttm_tt_unbind(bdev, ttm); in radeon_ttm_tt_unpopulate()
578 kfree(ttm->sg); in radeon_ttm_tt_unpopulate()
579 ttm->page_flags &= ~TTM_TT_FLAG_EXTERNAL; in radeon_ttm_tt_unpopulate()
586 return ttm_pool_free(&rdev->mman.bdev.pool, ttm); in radeon_ttm_tt_unpopulate()
590 struct ttm_tt *ttm, uint64_t addr, in radeon_ttm_tt_set_userptr() argument
596 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_set_userptr()
609 struct ttm_tt *ttm) in radeon_ttm_tt_is_bound() argument
614 return ttm_agp_is_bound(ttm); in radeon_ttm_tt_is_bound()
616 return radeon_ttm_backend_is_bound(ttm); in radeon_ttm_tt_is_bound()
620 struct ttm_tt *ttm, in radeon_ttm_tt_bind() argument
631 return ttm_agp_bind(ttm, bo_mem); in radeon_ttm_tt_bind()
634 return radeon_ttm_backend_bind(bdev, ttm, bo_mem); in radeon_ttm_tt_bind()
638 struct ttm_tt *ttm) in radeon_ttm_tt_unbind() argument
644 ttm_agp_unbind(ttm); in radeon_ttm_tt_unbind()
648 radeon_ttm_backend_unbind(bdev, ttm); in radeon_ttm_tt_unbind()
652 struct ttm_tt *ttm) in radeon_ttm_tt_destroy() argument
658 ttm_agp_destroy(ttm); in radeon_ttm_tt_destroy()
662 radeon_ttm_backend_destroy(bdev, ttm); in radeon_ttm_tt_destroy()
666 struct ttm_tt *ttm) in radeon_ttm_tt_has_userptr() argument
668 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_has_userptr()
677 struct ttm_tt *ttm) in radeon_ttm_tt_is_readonly() argument
679 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm); in radeon_ttm_tt_is_readonly()