Lines Matching refs:nvbo

141 	struct nouveau_bo *nvbo = nouveau_bo(bo);  in nouveau_bo_del_ttm()  local
143 WARN_ON(nvbo->bo.pin_count > 0); in nouveau_bo_del_ttm()
145 nv10_bo_put_tile_region(dev, nvbo->tile, NULL); in nouveau_bo_del_ttm()
155 if (nvbo->no_share) in nouveau_bo_del_ttm()
156 drm_gem_object_put(nvbo->r_obj); in nouveau_bo_del_ttm()
163 kfree(nvbo); in nouveau_bo_del_ttm()
175 nouveau_bo_fixup_align(struct nouveau_bo *nvbo, int *align, u64 *size) in nouveau_bo_fixup_align() argument
177 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_fixup_align()
181 if (nvbo->mode) { in nouveau_bo_fixup_align()
184 *size = roundup_64(*size, 64 * nvbo->mode); in nouveau_bo_fixup_align()
188 *size = roundup_64(*size, 64 * nvbo->mode); in nouveau_bo_fixup_align()
192 *size = roundup_64(*size, 64 * nvbo->mode); in nouveau_bo_fixup_align()
196 *size = roundup_64(*size, 32 * nvbo->mode); in nouveau_bo_fixup_align()
200 *size = roundup_64(*size, (1 << nvbo->page)); in nouveau_bo_fixup_align()
201 *align = max((1 << nvbo->page), *align); in nouveau_bo_fixup_align()
212 struct nouveau_bo *nvbo; in nouveau_bo_alloc() local
222 nvbo = kzalloc(sizeof(struct nouveau_bo), GFP_KERNEL); in nouveau_bo_alloc()
223 if (!nvbo) in nouveau_bo_alloc()
226 INIT_LIST_HEAD(&nvbo->head); in nouveau_bo_alloc()
227 INIT_LIST_HEAD(&nvbo->entry); in nouveau_bo_alloc()
228 INIT_LIST_HEAD(&nvbo->vma_list); in nouveau_bo_alloc()
229 nvbo->bo.bdev = &drm->ttm.bdev; in nouveau_bo_alloc()
240 nvbo->force_coherent = true; in nouveau_bo_alloc()
243 nvbo->contig = !(tile_flags & NOUVEAU_GEM_TILE_NONCONTIG); in nouveau_bo_alloc()
246 nvbo->kind = (tile_flags & 0x0000ff00) >> 8; in nouveau_bo_alloc()
247 if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) { in nouveau_bo_alloc()
248 kfree(nvbo); in nouveau_bo_alloc()
252 nvbo->comp = mmu->kind[nvbo->kind] != nvbo->kind; in nouveau_bo_alloc()
254 nvbo->kind = (tile_flags & 0x00007f00) >> 8; in nouveau_bo_alloc()
255 nvbo->comp = (tile_flags & 0x00030000) >> 16; in nouveau_bo_alloc()
256 if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) { in nouveau_bo_alloc()
257 kfree(nvbo); in nouveau_bo_alloc()
261 nvbo->zeta = (tile_flags & 0x00000007); in nouveau_bo_alloc()
263 nvbo->mode = tile_mode; in nouveau_bo_alloc()
286 if (pi < 0 || !nvbo->comp || vmm->page[i].comp) in nouveau_bo_alloc()
295 kfree(nvbo); in nouveau_bo_alloc()
300 if (nvbo->comp && !vmm->page[pi].comp) { in nouveau_bo_alloc()
302 nvbo->kind = mmu->kind[nvbo->kind]; in nouveau_bo_alloc()
303 nvbo->comp = 0; in nouveau_bo_alloc()
305 nvbo->page = vmm->page[pi].shift; in nouveau_bo_alloc()
330 kfree(nvbo); in nouveau_bo_alloc()
333 nvbo->page = vmm->page[pi].shift; in nouveau_bo_alloc()
336 nouveau_bo_fixup_align(nvbo, align, size); in nouveau_bo_alloc()
338 return nvbo; in nouveau_bo_alloc()
342 nouveau_bo_init(struct nouveau_bo *nvbo, u64 size, int align, u32 domain, in nouveau_bo_init() argument
353 nouveau_bo_placement_set(nvbo, domain, 0); in nouveau_bo_init()
354 INIT_LIST_HEAD(&nvbo->io_reserve_lru); in nouveau_bo_init()
356 ret = ttm_bo_init_reserved(nvbo->bo.bdev, &nvbo->bo, type, in nouveau_bo_init()
357 &nvbo->placement, align >> PAGE_SHIFT, &ctx, in nouveau_bo_init()
365 ttm_bo_unreserve(&nvbo->bo); in nouveau_bo_init()
376 struct nouveau_bo *nvbo; in nouveau_bo_new() local
379 nvbo = nouveau_bo_alloc(cli, &size, &align, domain, tile_mode, in nouveau_bo_new()
381 if (IS_ERR(nvbo)) in nouveau_bo_new()
382 return PTR_ERR(nvbo); in nouveau_bo_new()
384 nvbo->bo.base.size = size; in nouveau_bo_new()
385 dma_resv_init(&nvbo->bo.base._resv); in nouveau_bo_new()
386 drm_vma_node_reset(&nvbo->bo.base.vma_node); in nouveau_bo_new()
391 drm_gem_gpuva_init(&nvbo->bo.base); in nouveau_bo_new()
393 ret = nouveau_bo_init(nvbo, size, align, domain, sg, robj); in nouveau_bo_new()
397 *pnvbo = nvbo; in nouveau_bo_new()
402 set_placement_range(struct nouveau_bo *nvbo, uint32_t domain) in set_placement_range() argument
404 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in set_placement_range()
409 nvbo->mode && (domain & NOUVEAU_GEM_DOMAIN_VRAM) && in set_placement_range()
410 nvbo->bo.base.size < vram_size / 4) { in set_placement_range()
417 if (nvbo->zeta) { in set_placement_range()
424 for (i = 0; i < nvbo->placement.num_placement; ++i) { in set_placement_range()
425 nvbo->placements[i].fpfn = fpfn; in set_placement_range()
426 nvbo->placements[i].lpfn = lpfn; in set_placement_range()
432 nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t domain, in nouveau_bo_placement_set() argument
435 unsigned int *n = &nvbo->placement.num_placement; in nouveau_bo_placement_set()
436 struct ttm_place *pl = nvbo->placements; in nouveau_bo_placement_set()
460 nvbo->placement.placement = nvbo->placements; in nouveau_bo_placement_set()
461 set_placement_range(nvbo, domain); in nouveau_bo_placement_set()
464 int nouveau_bo_pin_locked(struct nouveau_bo *nvbo, uint32_t domain, bool contig) in nouveau_bo_pin_locked() argument
466 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_pin_locked()
467 struct ttm_buffer_object *bo = &nvbo->bo; in nouveau_bo_pin_locked()
475 if (!nvbo->contig) { in nouveau_bo_pin_locked()
476 nvbo->contig = true; in nouveau_bo_pin_locked()
482 if (nvbo->bo.pin_count) { in nouveau_bo_pin_locked()
502 ttm_bo_pin(&nvbo->bo); in nouveau_bo_pin_locked()
507 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, 0); in nouveau_bo_pin_locked()
508 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_bo_pin_locked()
513 nouveau_bo_placement_set(nvbo, domain, 0); in nouveau_bo_pin_locked()
514 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_bo_pin_locked()
518 ttm_bo_pin(&nvbo->bo); in nouveau_bo_pin_locked()
533 nvbo->contig = false; in nouveau_bo_pin_locked()
537 void nouveau_bo_unpin_locked(struct nouveau_bo *nvbo) in nouveau_bo_unpin_locked() argument
539 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_unpin_locked()
540 struct ttm_buffer_object *bo = &nvbo->bo; in nouveau_bo_unpin_locked()
544 ttm_bo_unpin(&nvbo->bo); in nouveau_bo_unpin_locked()
545 if (!nvbo->bo.pin_count) { in nouveau_bo_unpin_locked()
559 int nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t domain, bool contig) in nouveau_bo_pin() argument
561 struct ttm_buffer_object *bo = &nvbo->bo; in nouveau_bo_pin()
567 ret = nouveau_bo_pin_locked(nvbo, domain, contig); in nouveau_bo_pin()
573 int nouveau_bo_unpin(struct nouveau_bo *nvbo) in nouveau_bo_unpin() argument
575 struct ttm_buffer_object *bo = &nvbo->bo; in nouveau_bo_unpin()
581 nouveau_bo_unpin_locked(nvbo); in nouveau_bo_unpin()
588 nouveau_bo_map(struct nouveau_bo *nvbo) in nouveau_bo_map() argument
592 ret = ttm_bo_reserve(&nvbo->bo, false, false, NULL); in nouveau_bo_map()
596 ret = ttm_bo_kmap(&nvbo->bo, 0, PFN_UP(nvbo->bo.base.size), &nvbo->kmap); in nouveau_bo_map()
598 ttm_bo_unreserve(&nvbo->bo); in nouveau_bo_map()
603 nouveau_bo_unmap(struct nouveau_bo *nvbo) in nouveau_bo_unmap() argument
605 if (!nvbo) in nouveau_bo_unmap()
608 ttm_bo_kunmap(&nvbo->kmap); in nouveau_bo_unmap()
612 nouveau_bo_sync_for_device(struct nouveau_bo *nvbo) in nouveau_bo_sync_for_device() argument
614 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_sync_for_device()
615 struct ttm_tt *ttm_dma = (struct ttm_tt *)nvbo->bo.ttm; in nouveau_bo_sync_for_device()
626 if (nvbo->force_coherent) in nouveau_bo_sync_for_device()
648 nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo) in nouveau_bo_sync_for_cpu() argument
650 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_sync_for_cpu()
651 struct ttm_tt *ttm_dma = (struct ttm_tt *)nvbo->bo.ttm; in nouveau_bo_sync_for_cpu()
662 if (nvbo->force_coherent) in nouveau_bo_sync_for_cpu()
686 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_add_io_reserve_lru() local
689 list_move_tail(&nvbo->io_reserve_lru, &drm->ttm.io_reserve_lru); in nouveau_bo_add_io_reserve_lru()
696 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_del_io_reserve_lru() local
699 list_del_init(&nvbo->io_reserve_lru); in nouveau_bo_del_io_reserve_lru()
704 nouveau_bo_validate(struct nouveau_bo *nvbo, bool interruptible, in nouveau_bo_validate() argument
710 ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement, &ctx); in nouveau_bo_validate()
714 nouveau_bo_sync_for_device(nvbo); in nouveau_bo_validate()
720 nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val) in nouveau_bo_wr16() argument
723 u16 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); in nouveau_bo_wr16()
734 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index) in nouveau_bo_rd32() argument
737 u32 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); in nouveau_bo_rd32()
748 nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val) in nouveau_bo_wr32() argument
751 u32 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); in nouveau_bo_wr32()
808 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_evict_flags() local
812 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, in nouveau_bo_evict_flags()
816 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_CPU, 0); in nouveau_bo_evict_flags()
820 *pl = nvbo->placement; in nouveau_bo_evict_flags()
987 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_move_ntfy() local
998 mem->mem.page == nvbo->page) { in nouveau_bo_move_ntfy()
999 list_for_each_entry(vma, &nvbo->vma_list, head) { in nouveau_bo_move_ntfy()
1002 nouveau_uvmm_bo_map_all(nvbo, mem); in nouveau_bo_move_ntfy()
1004 list_for_each_entry(vma, &nvbo->vma_list, head) { in nouveau_bo_move_ntfy()
1011 nouveau_uvmm_bo_unmap_all(nvbo); in nouveau_bo_move_ntfy()
1015 nvbo->offset = (new_reg->start << PAGE_SHIFT); in nouveau_bo_move_ntfy()
1025 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_vm_bind() local
1034 nvbo->mode, nvbo->zeta); in nouveau_bo_vm_bind()
1067 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_move() local
1139 nouveau_bo_vm_cleanup(bo, new_tile, &nvbo->tile); in nouveau_bo_move()
1260 struct nouveau_bo *nvbo; in nouveau_ttm_io_mem_reserve() local
1262 nvbo = list_first_entry_or_null(&drm->ttm.io_reserve_lru, in nouveau_ttm_io_mem_reserve()
1263 typeof(*nvbo), in nouveau_ttm_io_mem_reserve()
1265 if (nvbo) { in nouveau_ttm_io_mem_reserve()
1266 list_del_init(&nvbo->io_reserve_lru); in nouveau_ttm_io_mem_reserve()
1267 drm_vma_node_unmap(&nvbo->bo.base.vma_node, in nouveau_ttm_io_mem_reserve()
1269 nouveau_ttm_io_mem_free_locked(drm, nvbo->bo.resource); in nouveau_ttm_io_mem_reserve()
1270 nvbo->bo.resource->bus.offset = 0; in nouveau_ttm_io_mem_reserve()
1271 nvbo->bo.resource->bus.addr = NULL; in nouveau_ttm_io_mem_reserve()
1293 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_ttm_fault_reserve_notify() local
1303 !nvbo->kind) in nouveau_ttm_fault_reserve_notify()
1309 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, 0); in nouveau_ttm_fault_reserve_notify()
1317 for (i = 0; i < nvbo->placement.num_placement; ++i) { in nouveau_ttm_fault_reserve_notify()
1318 nvbo->placements[i].fpfn = 0; in nouveau_ttm_fault_reserve_notify()
1319 nvbo->placements[i].lpfn = mappable; in nouveau_ttm_fault_reserve_notify()
1322 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_VRAM, 0); in nouveau_ttm_fault_reserve_notify()
1325 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_ttm_fault_reserve_notify()
1389 nouveau_bo_fence(struct nouveau_bo *nvbo, struct nouveau_fence *fence, bool exclusive) in nouveau_bo_fence() argument
1391 struct dma_resv *resv = nvbo->bo.base.resv; in nouveau_bo_fence()