Lines Matching refs:bo

21 int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *vm)  in lima_heap_alloc()  argument
24 struct address_space *mapping = bo->base.base.filp->f_mapping; in lima_heap_alloc()
25 struct device *dev = bo->base.base.dev->dev; in lima_heap_alloc()
26 size_t old_size = bo->heap_size; in lima_heap_alloc()
27 size_t new_size = bo->heap_size ? bo->heap_size * 2 : in lima_heap_alloc()
32 if (bo->heap_size >= bo->base.base.size) in lima_heap_alloc()
35 new_size = min(new_size, bo->base.base.size); in lima_heap_alloc()
37 dma_resv_lock(bo->base.base.resv, NULL); in lima_heap_alloc()
39 if (bo->base.pages) { in lima_heap_alloc()
40 pages = bo->base.pages; in lima_heap_alloc()
42 pages = kvmalloc_array(bo->base.base.size >> PAGE_SHIFT, in lima_heap_alloc()
45 dma_resv_unlock(bo->base.base.resv); in lima_heap_alloc()
49 bo->base.pages = pages; in lima_heap_alloc()
50 bo->base.pages_use_count = 1; in lima_heap_alloc()
59 dma_resv_unlock(bo->base.base.resv); in lima_heap_alloc()
65 dma_resv_unlock(bo->base.base.resv); in lima_heap_alloc()
72 if (bo->base.sgt) { in lima_heap_alloc()
73 dma_unmap_sgtable(dev, bo->base.sgt, DMA_BIDIRECTIONAL, 0); in lima_heap_alloc()
74 sg_free_table(bo->base.sgt); in lima_heap_alloc()
76 bo->base.sgt = kmalloc(sizeof(*bo->base.sgt), GFP_KERNEL); in lima_heap_alloc()
77 if (!bo->base.sgt) { in lima_heap_alloc()
87 *bo->base.sgt = sgt; in lima_heap_alloc()
90 ret = lima_vm_map_bo(vm, bo, old_size >> PAGE_SHIFT); in lima_heap_alloc()
95 bo->heap_size = new_size; in lima_heap_alloc()
101 kfree(bo->base.sgt); in lima_heap_alloc()
102 bo->base.sgt = NULL; in lima_heap_alloc()
115 struct lima_bo *bo; in lima_gem_create_handle() local
131 bo = to_lima_bo(obj); in lima_gem_create_handle()
132 err = lima_heap_alloc(bo, NULL); in lima_gem_create_handle()
155 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_free_object() local
157 if (!list_empty(&bo->va)) in lima_gem_free_object()
160 drm_gem_shmem_free(&bo->base); in lima_gem_free_object()
165 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_object_open() local
169 return lima_vm_bo_add(vm, bo, true); in lima_gem_object_open()
174 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_object_close() local
178 lima_vm_bo_del(vm, bo); in lima_gem_object_close()
183 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_pin() local
185 if (bo->heap_size) in lima_gem_pin()
188 return drm_gem_shmem_pin(&bo->base); in lima_gem_pin()
193 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_vmap() local
195 if (bo->heap_size) in lima_gem_vmap()
198 return drm_gem_shmem_vmap(&bo->base, map); in lima_gem_vmap()
203 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_mmap() local
205 if (bo->heap_size) in lima_gem_mmap()
208 return drm_gem_shmem_mmap(&bo->base, vma); in lima_gem_mmap()
227 struct lima_bo *bo; in lima_gem_create_object() local
229 bo = kzalloc(sizeof(*bo), GFP_KERNEL); in lima_gem_create_object()
230 if (!bo) in lima_gem_create_object()
233 mutex_init(&bo->lock); in lima_gem_create_object()
234 INIT_LIST_HEAD(&bo->va); in lima_gem_create_object()
235 bo->base.map_wc = true; in lima_gem_create_object()
236 bo->base.base.funcs = &lima_gem_funcs; in lima_gem_create_object()
238 return &bo->base.base; in lima_gem_create_object()
244 struct lima_bo *bo; in lima_gem_get_info() local
252 bo = to_lima_bo(obj); in lima_gem_get_info()
254 *va = lima_vm_get_va(vm, bo); in lima_gem_get_info()
262 static int lima_gem_sync_bo(struct lima_sched_task *task, struct lima_bo *bo, in lima_gem_sync_bo() argument
267 err = dma_resv_reserve_fences(lima_bo_resv(bo), 1); in lima_gem_sync_bo()
276 &bo->base.base, in lima_gem_sync_bo()
315 struct lima_bo *bo; in lima_gem_submit() local
323 bo = to_lima_bo(obj); in lima_gem_submit()
328 err = lima_vm_bo_add(vm, bo, false); in lima_gem_submit()
334 bos[i] = bo; in lima_gem_submit()