Lines Matching refs:ttm

47 #include <drm/ttm/ttm_bo_api.h>
48 #include <drm/ttm/ttm_bo_driver.h>
49 #include <drm/ttm/ttm_module.h>
50 #include <drm/ttm/ttm_page_alloc.h>
51 #include <drm/ttm/ttm_placement.h>
60 struct ttm_tt *ttm,
147 if (radeon_ttm_tt_has_userptr(rdev, bo->ttm))
235 r = ttm_tt_set_placement_caching(bo->ttm, tmp_mem.placement);
240 r = ttm_tt_populate(bo->bdev, bo->ttm, &ctx);
245 r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, &tmp_mem);
317 if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
421 struct ttm_dma_tt ttm;
431 static int radeon_ttm_tt_pin_userptr(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
434 struct radeon_ttm_tt *gtt = (void *)ttm;
448 unsigned long end = gtt->userptr + ttm->num_pages * PAGE_SIZE;
456 unsigned num_pages = ttm->num_pages - pinned;
458 struct page **pages = ttm->pages + pinned;
467 } while (pinned < ttm->num_pages);
469 r = sg_alloc_table_from_pages(ttm->sg, ttm->pages, ttm->num_pages, 0,
470 ttm->num_pages << PAGE_SHIFT,
475 r = dma_map_sgtable(rdev->dev, ttm->sg, direction, 0);
479 drm_prime_sg_to_page_addr_arrays(ttm->sg, ttm->pages,
480 gtt->ttm.dma_address, ttm->num_pages);
485 kfree(ttm->sg);
488 release_pages(ttm->pages, pinned);
492 static void radeon_ttm_tt_unpin_userptr(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
495 struct radeon_ttm_tt *gtt = (void *)ttm;
503 if (!ttm->sg->sgl)
507 dma_unmap_sgtable(rdev->dev, ttm->sg, direction, 0);
509 for_each_sgtable_page(ttm->sg, &sg_iter, 0) {
518 sg_free_table(ttm->sg);
521 static bool radeon_ttm_backend_is_bound(struct ttm_tt *ttm)
523 struct radeon_ttm_tt *gtt = (void*)ttm;
529 struct ttm_tt *ttm,
532 struct radeon_ttm_tt *gtt = (void*)ttm;
542 radeon_ttm_tt_pin_userptr(bdev, ttm);
547 if (!ttm->num_pages) {
549 ttm->num_pages, bo_mem, ttm);
551 if (ttm->caching_state == tt_cached)
553 r = radeon_gart_bind(rdev, gtt->offset, ttm->num_pages,
554 ttm->pages, gtt->ttm.dma_address, flags);
557 ttm->num_pages, (unsigned)gtt->offset);
564 static void radeon_ttm_backend_unbind(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
566 struct radeon_ttm_tt *gtt = (void *)ttm;
570 radeon_ttm_tt_unpin_userptr(bdev, ttm);
575 radeon_gart_unbind(rdev, gtt->offset, ttm->num_pages);
580 static void radeon_ttm_backend_destroy(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
582 struct radeon_ttm_tt *gtt = (void *)ttm;
584 radeon_ttm_backend_unbind(bdev, ttm);
585 ttm_tt_destroy_common(bdev, ttm);
587 ttm_dma_tt_fini(&gtt->ttm);
609 if (ttm_dma_tt_init(&gtt->ttm, bo, page_flags)) {
613 return &gtt->ttm.ttm;
617 struct ttm_tt *ttm)
624 if (!ttm)
626 return container_of(ttm, struct radeon_ttm_tt, ttm.ttm);
630 struct ttm_tt *ttm,
634 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm);
635 bool slave = !!(ttm->page_flags & TTM_PAGE_FLAG_SG);
638 ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL);
639 if (!ttm->sg)
642 ttm->page_flags |= TTM_PAGE_FLAG_SG;
643 ttm_tt_set_populated(ttm);
647 if (slave && ttm->sg) {
648 drm_prime_sg_to_page_addr_arrays(ttm->sg, ttm->pages,
649 gtt->ttm.dma_address, ttm->num_pages);
650 ttm_tt_set_populated(ttm);
656 return ttm_pool_populate(ttm, ctx);
662 return ttm_dma_populate(&gtt->ttm, rdev->dev, ctx);
666 return ttm_populate_and_map_pages(rdev->dev, &gtt->ttm, ctx);
669 static void radeon_ttm_tt_unpopulate(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
672 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm);
673 bool slave = !!(ttm->page_flags & TTM_PAGE_FLAG_SG);
676 kfree(ttm->sg);
677 ttm->page_flags &= ~TTM_PAGE_FLAG_SG;
686 ttm_pool_unpopulate(ttm);
693 ttm_dma_unpopulate(&gtt->ttm, rdev->dev);
698 ttm_unmap_and_unpopulate_pages(rdev->dev, &gtt->ttm);
702 struct ttm_tt *ttm, uint64_t addr,
705 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm);
717 struct ttm_tt *ttm)
722 return ttm_agp_is_bound(ttm);
724 return radeon_ttm_backend_is_bound(ttm);
728 struct ttm_tt *ttm,
739 return ttm_agp_bind(ttm, bo_mem);
742 return radeon_ttm_backend_bind(bdev, ttm, bo_mem);
746 struct ttm_tt *ttm)
752 ttm_agp_unbind(ttm);
756 radeon_ttm_backend_unbind(bdev, ttm);
760 struct ttm_tt *ttm)
766 ttm_agp_unbind(ttm);
767 ttm_tt_destroy_common(bdev, ttm);
768 ttm_agp_destroy(ttm);
772 radeon_ttm_backend_destroy(bdev, ttm);
776 struct ttm_tt *ttm)
778 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm);
787 struct ttm_tt *ttm)
789 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(rdev, ttm);
891 DRM_INFO("radeon: ttm finalized\n");