Lines Matching refs:ttm

238 	if (radeon_ttm_tt_has_userptr(bo->ttm))  in radeon_verify_access()
337 r = ttm_tt_set_placement_caching(bo->ttm, tmp_mem.placement); in radeon_move_vram_ram()
342 r = ttm_tt_bind(bo->ttm, &tmp_mem); in radeon_move_vram_ram()
406 if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { in radeon_bo_move()
520 struct ttm_dma_tt ttm; member
530 static int radeon_ttm_tt_pin_userptr(struct ttm_tt *ttm) in radeon_ttm_tt_pin_userptr() argument
532 struct radeon_device *rdev = radeon_get_rdev(ttm->bdev); in radeon_ttm_tt_pin_userptr()
533 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_pin_userptr()
547 unsigned long end = gtt->userptr + ttm->num_pages * PAGE_SIZE; in radeon_ttm_tt_pin_userptr()
555 unsigned num_pages = ttm->num_pages - pinned; in radeon_ttm_tt_pin_userptr()
557 struct page **pages = ttm->pages + pinned; in radeon_ttm_tt_pin_userptr()
566 } while (pinned < ttm->num_pages); in radeon_ttm_tt_pin_userptr()
568 r = sg_alloc_table_from_pages(ttm->sg, ttm->pages, ttm->num_pages, 0, in radeon_ttm_tt_pin_userptr()
569 ttm->num_pages << PAGE_SHIFT, in radeon_ttm_tt_pin_userptr()
575 nents = dma_map_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction); in radeon_ttm_tt_pin_userptr()
576 if (nents != ttm->sg->nents) in radeon_ttm_tt_pin_userptr()
579 drm_prime_sg_to_page_addr_arrays(ttm->sg, ttm->pages, in radeon_ttm_tt_pin_userptr()
580 gtt->ttm.dma_address, ttm->num_pages); in radeon_ttm_tt_pin_userptr()
585 kfree(ttm->sg); in radeon_ttm_tt_pin_userptr()
588 release_pages(ttm->pages, pinned, 0); in radeon_ttm_tt_pin_userptr()
592 static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm) in radeon_ttm_tt_unpin_userptr() argument
594 struct radeon_device *rdev = radeon_get_rdev(ttm->bdev); in radeon_ttm_tt_unpin_userptr()
595 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_tt_unpin_userptr()
603 if (!ttm->sg->sgl) in radeon_ttm_tt_unpin_userptr()
607 dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction); in radeon_ttm_tt_unpin_userptr()
609 for_each_sg_page(ttm->sg->sgl, &sg_iter, ttm->sg->nents, 0) { in radeon_ttm_tt_unpin_userptr()
618 sg_free_table(ttm->sg); in radeon_ttm_tt_unpin_userptr()
621 static int radeon_ttm_backend_bind(struct ttm_tt *ttm, in radeon_ttm_backend_bind() argument
624 struct radeon_ttm_tt *gtt = (void*)ttm; in radeon_ttm_backend_bind()
630 radeon_ttm_tt_pin_userptr(ttm); in radeon_ttm_backend_bind()
635 if (!ttm->num_pages) { in radeon_ttm_backend_bind()
637 ttm->num_pages, bo_mem, ttm); in radeon_ttm_backend_bind()
639 if (ttm->caching_state == tt_cached) in radeon_ttm_backend_bind()
641 r = radeon_gart_bind(gtt->rdev, gtt->offset, ttm->num_pages, in radeon_ttm_backend_bind()
642 ttm->pages, gtt->ttm.dma_address, flags); in radeon_ttm_backend_bind()
645 ttm->num_pages, (unsigned)gtt->offset); in radeon_ttm_backend_bind()
651 static int radeon_ttm_backend_unbind(struct ttm_tt *ttm) in radeon_ttm_backend_unbind() argument
653 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_unbind()
655 radeon_gart_unbind(gtt->rdev, gtt->offset, ttm->num_pages); in radeon_ttm_backend_unbind()
658 radeon_ttm_tt_unpin_userptr(ttm); in radeon_ttm_backend_unbind()
663 static void radeon_ttm_backend_destroy(struct ttm_tt *ttm) in radeon_ttm_backend_destroy() argument
665 struct radeon_ttm_tt *gtt = (void *)ttm; in radeon_ttm_backend_destroy()
667 ttm_dma_tt_fini(&gtt->ttm); in radeon_ttm_backend_destroy()
696 gtt->ttm.ttm.func = &radeon_backend_func; in radeon_ttm_tt_create()
698 if (ttm_dma_tt_init(&gtt->ttm, bdev, size, page_flags, dummy_read_page)) { in radeon_ttm_tt_create()
702 return &gtt->ttm.ttm; in radeon_ttm_tt_create()
705 static struct radeon_ttm_tt *radeon_ttm_tt_to_gtt(struct ttm_tt *ttm) in radeon_ttm_tt_to_gtt() argument
707 if (!ttm || ttm->func != &radeon_backend_func) in radeon_ttm_tt_to_gtt()
709 return (struct radeon_ttm_tt *)ttm; in radeon_ttm_tt_to_gtt()
712 static int radeon_ttm_tt_populate(struct ttm_tt *ttm) in radeon_ttm_tt_populate() argument
714 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm); in radeon_ttm_tt_populate()
718 bool slave = !!(ttm->page_flags & TTM_PAGE_FLAG_SG); in radeon_ttm_tt_populate()
720 if (ttm->state != tt_unpopulated) in radeon_ttm_tt_populate()
724 ttm->sg = kcalloc(1, sizeof(struct sg_table), GFP_KERNEL); in radeon_ttm_tt_populate()
725 if (!ttm->sg) in radeon_ttm_tt_populate()
728 ttm->page_flags |= TTM_PAGE_FLAG_SG; in radeon_ttm_tt_populate()
729 ttm->state = tt_unbound; in radeon_ttm_tt_populate()
733 if (slave && ttm->sg) { in radeon_ttm_tt_populate()
734 drm_prime_sg_to_page_addr_arrays(ttm->sg, ttm->pages, in radeon_ttm_tt_populate()
735 gtt->ttm.dma_address, ttm->num_pages); in radeon_ttm_tt_populate()
736 ttm->state = tt_unbound; in radeon_ttm_tt_populate()
740 rdev = radeon_get_rdev(ttm->bdev); in radeon_ttm_tt_populate()
743 return ttm_agp_tt_populate(ttm); in radeon_ttm_tt_populate()
749 return ttm_dma_populate(&gtt->ttm, rdev->dev); in radeon_ttm_tt_populate()
753 r = ttm_pool_populate(ttm); in radeon_ttm_tt_populate()
758 for (i = 0; i < ttm->num_pages; i++) { in radeon_ttm_tt_populate()
759 gtt->ttm.dma_address[i] = pci_map_page(rdev->pdev, ttm->pages[i], in radeon_ttm_tt_populate()
762 if (pci_dma_mapping_error(rdev->pdev, gtt->ttm.dma_address[i])) { in radeon_ttm_tt_populate()
764 pci_unmap_page(rdev->pdev, gtt->ttm.dma_address[i], in radeon_ttm_tt_populate()
766 gtt->ttm.dma_address[i] = 0; in radeon_ttm_tt_populate()
768 ttm_pool_unpopulate(ttm); in radeon_ttm_tt_populate()
775 static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm) in radeon_ttm_tt_unpopulate() argument
778 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm); in radeon_ttm_tt_unpopulate()
780 bool slave = !!(ttm->page_flags & TTM_PAGE_FLAG_SG); in radeon_ttm_tt_unpopulate()
783 kfree(ttm->sg); in radeon_ttm_tt_unpopulate()
784 ttm->page_flags &= ~TTM_PAGE_FLAG_SG; in radeon_ttm_tt_unpopulate()
791 rdev = radeon_get_rdev(ttm->bdev); in radeon_ttm_tt_unpopulate()
794 ttm_agp_tt_unpopulate(ttm); in radeon_ttm_tt_unpopulate()
801 ttm_dma_unpopulate(&gtt->ttm, rdev->dev); in radeon_ttm_tt_unpopulate()
806 for (i = 0; i < ttm->num_pages; i++) { in radeon_ttm_tt_unpopulate()
807 if (gtt->ttm.dma_address[i]) { in radeon_ttm_tt_unpopulate()
808 pci_unmap_page(rdev->pdev, gtt->ttm.dma_address[i], in radeon_ttm_tt_unpopulate()
813 ttm_pool_unpopulate(ttm); in radeon_ttm_tt_unpopulate()
816 int radeon_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr, in radeon_ttm_tt_set_userptr() argument
819 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm); in radeon_ttm_tt_set_userptr()
830 bool radeon_ttm_tt_has_userptr(struct ttm_tt *ttm) in radeon_ttm_tt_has_userptr() argument
832 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm); in radeon_ttm_tt_has_userptr()
840 bool radeon_ttm_tt_is_readonly(struct ttm_tt *ttm) in radeon_ttm_tt_is_readonly() argument
842 struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm); in radeon_ttm_tt_is_readonly()