Lines Matching refs:nvbo
140 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_del_ttm() local
142 WARN_ON(nvbo->pin_refcnt > 0); in nouveau_bo_del_ttm()
144 nv10_bo_put_tile_region(dev, nvbo->tile, NULL); in nouveau_bo_del_ttm()
153 kfree(nvbo); in nouveau_bo_del_ttm()
165 nouveau_bo_fixup_align(struct nouveau_bo *nvbo, int *align, u64 *size) in nouveau_bo_fixup_align() argument
167 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_fixup_align()
171 if (nvbo->mode) { in nouveau_bo_fixup_align()
174 *size = roundup_64(*size, 64 * nvbo->mode); in nouveau_bo_fixup_align()
178 *size = roundup_64(*size, 64 * nvbo->mode); in nouveau_bo_fixup_align()
182 *size = roundup_64(*size, 64 * nvbo->mode); in nouveau_bo_fixup_align()
186 *size = roundup_64(*size, 32 * nvbo->mode); in nouveau_bo_fixup_align()
190 *size = roundup_64(*size, (1 << nvbo->page)); in nouveau_bo_fixup_align()
191 *align = max((1 << nvbo->page), *align); in nouveau_bo_fixup_align()
202 struct nouveau_bo *nvbo; in nouveau_bo_alloc() local
212 nvbo = kzalloc(sizeof(struct nouveau_bo), GFP_KERNEL); in nouveau_bo_alloc()
213 if (!nvbo) in nouveau_bo_alloc()
215 INIT_LIST_HEAD(&nvbo->head); in nouveau_bo_alloc()
216 INIT_LIST_HEAD(&nvbo->entry); in nouveau_bo_alloc()
217 INIT_LIST_HEAD(&nvbo->vma_list); in nouveau_bo_alloc()
218 nvbo->bo.bdev = &drm->ttm.bdev; in nouveau_bo_alloc()
229 nvbo->force_coherent = true; in nouveau_bo_alloc()
233 nvbo->kind = (tile_flags & 0x0000ff00) >> 8; in nouveau_bo_alloc()
234 if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) { in nouveau_bo_alloc()
235 kfree(nvbo); in nouveau_bo_alloc()
239 nvbo->comp = mmu->kind[nvbo->kind] != nvbo->kind; in nouveau_bo_alloc()
242 nvbo->kind = (tile_flags & 0x00007f00) >> 8; in nouveau_bo_alloc()
243 nvbo->comp = (tile_flags & 0x00030000) >> 16; in nouveau_bo_alloc()
244 if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) { in nouveau_bo_alloc()
245 kfree(nvbo); in nouveau_bo_alloc()
249 nvbo->zeta = (tile_flags & 0x00000007); in nouveau_bo_alloc()
251 nvbo->mode = tile_mode; in nouveau_bo_alloc()
252 nvbo->contig = !(tile_flags & NOUVEAU_GEM_TILE_NONCONTIG); in nouveau_bo_alloc()
274 if (pi < 0 || !nvbo->comp || vmm->page[i].comp) in nouveau_bo_alloc()
283 kfree(nvbo); in nouveau_bo_alloc()
288 if (nvbo->comp && !vmm->page[pi].comp) { in nouveau_bo_alloc()
290 nvbo->kind = mmu->kind[nvbo->kind]; in nouveau_bo_alloc()
291 nvbo->comp = 0; in nouveau_bo_alloc()
293 nvbo->page = vmm->page[pi].shift; in nouveau_bo_alloc()
295 nouveau_bo_fixup_align(nvbo, align, size); in nouveau_bo_alloc()
297 return nvbo; in nouveau_bo_alloc()
301 nouveau_bo_init(struct nouveau_bo *nvbo, u64 size, int align, u32 domain, in nouveau_bo_init() argument
308 acc_size = ttm_bo_dma_acc_size(nvbo->bo.bdev, size, sizeof(*nvbo)); in nouveau_bo_init()
310 nvbo->bo.mem.num_pages = size >> PAGE_SHIFT; in nouveau_bo_init()
311 nouveau_bo_placement_set(nvbo, domain, 0); in nouveau_bo_init()
312 INIT_LIST_HEAD(&nvbo->io_reserve_lru); in nouveau_bo_init()
314 ret = ttm_bo_init(nvbo->bo.bdev, &nvbo->bo, size, type, in nouveau_bo_init()
315 &nvbo->placement, align >> PAGE_SHIFT, false, in nouveau_bo_init()
331 struct nouveau_bo *nvbo; in nouveau_bo_new() local
334 nvbo = nouveau_bo_alloc(cli, &size, &align, domain, tile_mode, in nouveau_bo_new()
336 if (IS_ERR(nvbo)) in nouveau_bo_new()
337 return PTR_ERR(nvbo); in nouveau_bo_new()
339 ret = nouveau_bo_init(nvbo, size, align, domain, sg, robj); in nouveau_bo_new()
343 *pnvbo = nvbo; in nouveau_bo_new()
382 set_placement_range(struct nouveau_bo *nvbo, uint32_t domain) in set_placement_range() argument
384 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in set_placement_range()
389 nvbo->mode && (domain & NOUVEAU_GEM_DOMAIN_VRAM) && in set_placement_range()
390 nvbo->bo.mem.num_pages < vram_pages / 4) { in set_placement_range()
397 if (nvbo->zeta) { in set_placement_range()
404 for (i = 0; i < nvbo->placement.num_placement; ++i) { in set_placement_range()
405 nvbo->placements[i].fpfn = fpfn; in set_placement_range()
406 nvbo->placements[i].lpfn = lpfn; in set_placement_range()
408 for (i = 0; i < nvbo->placement.num_busy_placement; ++i) { in set_placement_range()
409 nvbo->busy_placements[i].fpfn = fpfn; in set_placement_range()
410 nvbo->busy_placements[i].lpfn = lpfn; in set_placement_range()
416 nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t domain, in nouveau_bo_placement_set() argument
419 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_placement_set()
420 struct ttm_placement *pl = &nvbo->placement; in nouveau_bo_placement_set()
421 uint32_t flags = (nvbo->force_coherent ? TTM_PL_FLAG_UNCACHED : in nouveau_bo_placement_set()
423 (nvbo->pin_refcnt ? TTM_PL_FLAG_NO_EVICT : 0); in nouveau_bo_placement_set()
425 pl->placement = nvbo->placements; in nouveau_bo_placement_set()
426 set_placement_list(drm, nvbo->placements, &pl->num_placement, in nouveau_bo_placement_set()
429 pl->busy_placement = nvbo->busy_placements; in nouveau_bo_placement_set()
430 set_placement_list(drm, nvbo->busy_placements, &pl->num_busy_placement, in nouveau_bo_placement_set()
433 set_placement_range(nvbo, domain); in nouveau_bo_placement_set()
437 nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t domain, bool contig) in nouveau_bo_pin() argument
439 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_pin()
440 struct ttm_buffer_object *bo = &nvbo->bo; in nouveau_bo_pin()
450 if (!nvbo->contig) { in nouveau_bo_pin()
451 nvbo->contig = true; in nouveau_bo_pin()
457 if (nvbo->pin_refcnt) { in nouveau_bo_pin()
476 nvbo->pin_refcnt++; in nouveau_bo_pin()
481 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, 0); in nouveau_bo_pin()
482 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_bo_pin()
487 nvbo->pin_refcnt++; in nouveau_bo_pin()
488 nouveau_bo_placement_set(nvbo, domain, 0); in nouveau_bo_pin()
494 nvbo->pin_refcnt--; in nouveau_bo_pin()
495 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_bo_pin()
498 nvbo->pin_refcnt++; in nouveau_bo_pin()
513 nvbo->contig = false; in nouveau_bo_pin()
519 nouveau_bo_unpin(struct nouveau_bo *nvbo) in nouveau_bo_unpin() argument
521 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_unpin()
522 struct ttm_buffer_object *bo = &nvbo->bo; in nouveau_bo_unpin()
529 ref = --nvbo->pin_refcnt; in nouveau_bo_unpin()
536 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_VRAM, 0); in nouveau_bo_unpin()
539 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, 0); in nouveau_bo_unpin()
545 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_bo_unpin()
565 nouveau_bo_map(struct nouveau_bo *nvbo) in nouveau_bo_map() argument
569 ret = ttm_bo_reserve(&nvbo->bo, false, false, NULL); in nouveau_bo_map()
573 ret = ttm_bo_kmap(&nvbo->bo, 0, nvbo->bo.mem.num_pages, &nvbo->kmap); in nouveau_bo_map()
575 ttm_bo_unreserve(&nvbo->bo); in nouveau_bo_map()
580 nouveau_bo_unmap(struct nouveau_bo *nvbo) in nouveau_bo_unmap() argument
582 if (!nvbo) in nouveau_bo_unmap()
585 ttm_bo_kunmap(&nvbo->kmap); in nouveau_bo_unmap()
589 nouveau_bo_sync_for_device(struct nouveau_bo *nvbo) in nouveau_bo_sync_for_device() argument
591 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_sync_for_device()
592 struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm; in nouveau_bo_sync_for_device()
599 if (nvbo->force_coherent) in nouveau_bo_sync_for_device()
609 nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo) in nouveau_bo_sync_for_cpu() argument
611 struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev); in nouveau_bo_sync_for_cpu()
612 struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm; in nouveau_bo_sync_for_cpu()
619 if (nvbo->force_coherent) in nouveau_bo_sync_for_cpu()
630 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_add_io_reserve_lru() local
633 list_move_tail(&nvbo->io_reserve_lru, &drm->ttm.io_reserve_lru); in nouveau_bo_add_io_reserve_lru()
640 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_del_io_reserve_lru() local
643 list_del_init(&nvbo->io_reserve_lru); in nouveau_bo_del_io_reserve_lru()
648 nouveau_bo_validate(struct nouveau_bo *nvbo, bool interruptible, in nouveau_bo_validate() argument
654 ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement, &ctx); in nouveau_bo_validate()
658 nouveau_bo_sync_for_device(nvbo); in nouveau_bo_validate()
664 nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val) in nouveau_bo_wr16() argument
667 u16 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); in nouveau_bo_wr16()
678 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index) in nouveau_bo_rd32() argument
681 u32 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); in nouveau_bo_rd32()
692 nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val) in nouveau_bo_wr32() argument
695 u32 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); in nouveau_bo_wr32()
752 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_evict_flags() local
756 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, in nouveau_bo_evict_flags()
760 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_CPU, 0); in nouveau_bo_evict_flags()
764 *pl = nvbo->placement; in nouveau_bo_evict_flags()
990 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_move_ntfy() local
1000 mem->mem.page == nvbo->page) { in nouveau_bo_move_ntfy()
1001 list_for_each_entry(vma, &nvbo->vma_list, head) { in nouveau_bo_move_ntfy()
1005 list_for_each_entry(vma, &nvbo->vma_list, head) { in nouveau_bo_move_ntfy()
1013 nvbo->offset = (new_reg->start << PAGE_SHIFT); in nouveau_bo_move_ntfy()
1015 nvbo->offset = 0; in nouveau_bo_move_ntfy()
1026 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_vm_bind() local
1035 nvbo->mode, nvbo->zeta); in nouveau_bo_vm_bind()
1060 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_move() local
1069 if (nvbo->pin_refcnt) in nouveau_bo_move()
1070 NV_WARN(drm, "Moving pinned object %p!\n", nvbo); in nouveau_bo_move()
1112 nouveau_bo_vm_cleanup(bo, new_tile, &nvbo->tile); in nouveau_bo_move()
1121 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_bo_verify_access() local
1123 return drm_vma_node_verify_access(&nvbo->bo.base.vma_node, in nouveau_bo_verify_access()
1228 struct nouveau_bo *nvbo; in nouveau_ttm_io_mem_reserve() local
1230 nvbo = list_first_entry_or_null(&drm->ttm.io_reserve_lru, in nouveau_ttm_io_mem_reserve()
1231 typeof(*nvbo), in nouveau_ttm_io_mem_reserve()
1233 if (nvbo) { in nouveau_ttm_io_mem_reserve()
1234 list_del_init(&nvbo->io_reserve_lru); in nouveau_ttm_io_mem_reserve()
1235 drm_vma_node_unmap(&nvbo->bo.base.vma_node, in nouveau_ttm_io_mem_reserve()
1237 nouveau_ttm_io_mem_free_locked(drm, &nvbo->bo.mem); in nouveau_ttm_io_mem_reserve()
1260 struct nouveau_bo *nvbo = nouveau_bo(bo); in nouveau_ttm_fault_reserve_notify() local
1270 !nvbo->kind) in nouveau_ttm_fault_reserve_notify()
1274 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_GART, in nouveau_ttm_fault_reserve_notify()
1277 ret = nouveau_bo_validate(nvbo, false, false); in nouveau_ttm_fault_reserve_notify()
1289 for (i = 0; i < nvbo->placement.num_placement; ++i) { in nouveau_ttm_fault_reserve_notify()
1290 nvbo->placements[i].fpfn = 0; in nouveau_ttm_fault_reserve_notify()
1291 nvbo->placements[i].lpfn = mappable; in nouveau_ttm_fault_reserve_notify()
1294 for (i = 0; i < nvbo->placement.num_busy_placement; ++i) { in nouveau_ttm_fault_reserve_notify()
1295 nvbo->busy_placements[i].fpfn = 0; in nouveau_ttm_fault_reserve_notify()
1296 nvbo->busy_placements[i].lpfn = mappable; in nouveau_ttm_fault_reserve_notify()
1299 nouveau_bo_placement_set(nvbo, NOUVEAU_GEM_DOMAIN_VRAM, 0); in nouveau_ttm_fault_reserve_notify()
1300 return 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()