Lines Matching refs:vm

18 	struct lima_vm *vm;  member
35 static void lima_vm_unmap_page_table(struct lima_vm *vm, u32 start, u32 end) in lima_vm_unmap_page_table() argument
43 vm->bts[pbe].cpu[bte] = 0; in lima_vm_unmap_page_table()
47 static int lima_vm_map_page_table(struct lima_vm *vm, dma_addr_t *dma, in lima_vm_map_page_table() argument
57 if (!vm->bts[pbe].cpu) { in lima_vm_map_page_table()
62 vm->bts[pbe].cpu = dma_alloc_wc( in lima_vm_map_page_table()
63 vm->dev->dev, LIMA_PAGE_SIZE << LIMA_VM_NUM_PT_PER_BT_SHIFT, in lima_vm_map_page_table()
64 &vm->bts[pbe].dma, GFP_KERNEL | __GFP_ZERO); in lima_vm_map_page_table()
65 if (!vm->bts[pbe].cpu) { in lima_vm_map_page_table()
67 lima_vm_unmap_page_table(vm, start, addr - 1); in lima_vm_map_page_table()
71 pts = vm->bts[pbe].dma; in lima_vm_map_page_table()
72 pd = vm->pd.cpu + (pbe << LIMA_VM_NUM_PT_PER_BT_SHIFT); in lima_vm_map_page_table()
79 vm->bts[pbe].cpu[bte] = dma[i++] | LIMA_VM_FLAGS_CACHE; in lima_vm_map_page_table()
86 lima_vm_bo_find(struct lima_vm *vm, struct lima_bo *bo) in lima_vm_bo_find() argument
91 if (bo_va->vm == vm) { in lima_vm_bo_find()
100 int lima_vm_bo_add(struct lima_vm *vm, struct lima_bo *bo, bool create) in lima_vm_bo_add() argument
107 bo_va = lima_vm_bo_find(vm, bo); in lima_vm_bo_add()
126 bo_va->vm = vm; in lima_vm_bo_add()
129 mutex_lock(&vm->lock); in lima_vm_bo_add()
131 err = drm_mm_insert_node(&vm->mm, &bo_va->node, bo->gem.size); in lima_vm_bo_add()
135 err = lima_vm_map_page_table(vm, bo->pages_dma_addr, bo_va->node.start, in lima_vm_bo_add()
140 mutex_unlock(&vm->lock); in lima_vm_bo_add()
150 mutex_unlock(&vm->lock); in lima_vm_bo_add()
157 void lima_vm_bo_del(struct lima_vm *vm, struct lima_bo *bo) in lima_vm_bo_del() argument
163 bo_va = lima_vm_bo_find(vm, bo); in lima_vm_bo_del()
169 mutex_lock(&vm->lock); in lima_vm_bo_del()
171 lima_vm_unmap_page_table(vm, bo_va->node.start, in lima_vm_bo_del()
176 mutex_unlock(&vm->lock); in lima_vm_bo_del()
185 u32 lima_vm_get_va(struct lima_vm *vm, struct lima_bo *bo) in lima_vm_get_va() argument
192 bo_va = lima_vm_bo_find(vm, bo); in lima_vm_get_va()
202 struct lima_vm *vm; in lima_vm_create() local
204 vm = kzalloc(sizeof(*vm), GFP_KERNEL); in lima_vm_create()
205 if (!vm) in lima_vm_create()
208 vm->dev = dev; in lima_vm_create()
209 mutex_init(&vm->lock); in lima_vm_create()
210 kref_init(&vm->refcount); in lima_vm_create()
212 vm->pd.cpu = dma_alloc_wc(dev->dev, LIMA_PAGE_SIZE, &vm->pd.dma, in lima_vm_create()
214 if (!vm->pd.cpu) in lima_vm_create()
219 vm, &dev->dlbu_dma, LIMA_VA_RESERVE_DLBU, in lima_vm_create()
225 drm_mm_init(&vm->mm, dev->va_start, dev->va_end - dev->va_start); in lima_vm_create()
227 return vm; in lima_vm_create()
230 dma_free_wc(dev->dev, LIMA_PAGE_SIZE, vm->pd.cpu, vm->pd.dma); in lima_vm_create()
232 kfree(vm); in lima_vm_create()
238 struct lima_vm *vm = container_of(kref, struct lima_vm, refcount); in lima_vm_release() local
241 drm_mm_takedown(&vm->mm); in lima_vm_release()
244 if (vm->bts[i].cpu) in lima_vm_release()
245 dma_free_wc(vm->dev->dev, LIMA_PAGE_SIZE << LIMA_VM_NUM_PT_PER_BT_SHIFT, in lima_vm_release()
246 vm->bts[i].cpu, vm->bts[i].dma); in lima_vm_release()
249 if (vm->pd.cpu) in lima_vm_release()
250 dma_free_wc(vm->dev->dev, LIMA_PAGE_SIZE, vm->pd.cpu, vm->pd.dma); in lima_vm_release()
252 kfree(vm); in lima_vm_release()
255 void lima_vm_print(struct lima_vm *vm) in lima_vm_print() argument
260 if (!vm->pd.cpu) in lima_vm_print()
263 pd = vm->pd.cpu; in lima_vm_print()
265 if (!vm->bts[i].cpu) in lima_vm_print()
268 pt = vm->bts[i].cpu; in lima_vm_print()