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()
86 kfree(bo->base.sgt); in lima_heap_alloc()
87 bo->base.sgt = NULL; in lima_heap_alloc()
91 *bo->base.sgt = sgt; in lima_heap_alloc()
94 ret = lima_vm_map_bo(vm, bo, old_size >> PAGE_SHIFT); in lima_heap_alloc()
99 bo->heap_size = new_size; in lima_heap_alloc()
110 struct lima_bo *bo; in lima_gem_create_handle() local
126 bo = to_lima_bo(obj); in lima_gem_create_handle()
127 err = lima_heap_alloc(bo, NULL); in lima_gem_create_handle()
150 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_free_object() local
152 if (!list_empty(&bo->va)) in lima_gem_free_object()
155 drm_gem_shmem_free(&bo->base); in lima_gem_free_object()
160 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_object_open() local
164 return lima_vm_bo_add(vm, bo, true); in lima_gem_object_open()
169 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_object_close() local
173 lima_vm_bo_del(vm, bo); in lima_gem_object_close()
178 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_pin() local
180 if (bo->heap_size) in lima_gem_pin()
183 return drm_gem_shmem_pin(&bo->base); in lima_gem_pin()
188 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_vmap() local
190 if (bo->heap_size) in lima_gem_vmap()
193 return drm_gem_shmem_vmap(&bo->base, map); in lima_gem_vmap()
198 struct lima_bo *bo = to_lima_bo(obj); in lima_gem_mmap() local
200 if (bo->heap_size) in lima_gem_mmap()
203 return drm_gem_shmem_mmap(&bo->base, vma); in lima_gem_mmap()
222 struct lima_bo *bo; in lima_gem_create_object() local
224 bo = kzalloc(sizeof(*bo), GFP_KERNEL); in lima_gem_create_object()
225 if (!bo) in lima_gem_create_object()
228 mutex_init(&bo->lock); in lima_gem_create_object()
229 INIT_LIST_HEAD(&bo->va); in lima_gem_create_object()
230 bo->base.map_wc = true; in lima_gem_create_object()
231 bo->base.base.funcs = &lima_gem_funcs; in lima_gem_create_object()
233 return &bo->base.base; in lima_gem_create_object()
239 struct lima_bo *bo; in lima_gem_get_info() local
247 bo = to_lima_bo(obj); in lima_gem_get_info()
249 *va = lima_vm_get_va(vm, bo); in lima_gem_get_info()
257 static int lima_gem_sync_bo(struct lima_sched_task *task, struct lima_bo *bo, in lima_gem_sync_bo() argument
262 err = dma_resv_reserve_fences(lima_bo_resv(bo), 1); in lima_gem_sync_bo()
271 &bo->base.base, in lima_gem_sync_bo()
310 struct lima_bo *bo; in lima_gem_submit() local
318 bo = to_lima_bo(obj); in lima_gem_submit()
323 err = lima_vm_bo_add(vm, bo, false); in lima_gem_submit()
329 bos[i] = bo; in lima_gem_submit()