Lines Matching refs:bind_op
186 static int pvr_vm_bind_op_exec(struct pvr_vm_bind_op *bind_op) in pvr_vm_bind_op_exec() argument
188 switch (bind_op->type) { in pvr_vm_bind_op_exec()
191 .map.va.addr = bind_op->device_addr, in pvr_vm_bind_op_exec()
192 .map.va.range = bind_op->size, in pvr_vm_bind_op_exec()
193 .map.gem.obj = gem_from_pvr_gem(bind_op->pvr_obj), in pvr_vm_bind_op_exec()
194 .map.gem.offset = bind_op->offset, in pvr_vm_bind_op_exec()
197 return drm_gpuvm_sm_map(&bind_op->vm_ctx->gpuvm_mgr, in pvr_vm_bind_op_exec()
198 bind_op, &map_req); in pvr_vm_bind_op_exec()
202 return drm_gpuvm_sm_unmap(&bind_op->vm_ctx->gpuvm_mgr, in pvr_vm_bind_op_exec()
203 bind_op, bind_op->device_addr, in pvr_vm_bind_op_exec()
204 bind_op->size); in pvr_vm_bind_op_exec()
215 static void pvr_vm_bind_op_fini(struct pvr_vm_bind_op *bind_op) in pvr_vm_bind_op_fini() argument
217 drm_gpuvm_bo_put(bind_op->gpuvm_bo); in pvr_vm_bind_op_fini()
219 kfree(bind_op->new_va); in pvr_vm_bind_op_fini()
220 kfree(bind_op->prev_va); in pvr_vm_bind_op_fini()
221 kfree(bind_op->next_va); in pvr_vm_bind_op_fini()
223 if (bind_op->pvr_obj) in pvr_vm_bind_op_fini()
224 pvr_gem_object_put(bind_op->pvr_obj); in pvr_vm_bind_op_fini()
226 if (bind_op->mmu_op_ctx) in pvr_vm_bind_op_fini()
227 pvr_mmu_op_context_destroy(bind_op->mmu_op_ctx); in pvr_vm_bind_op_fini()
231 pvr_vm_bind_op_map_init(struct pvr_vm_bind_op *bind_op, in pvr_vm_bind_op_map_init() argument
256 bind_op->type = PVR_VM_BIND_TYPE_MAP; in pvr_vm_bind_op_map_init()
259 bind_op->gpuvm_bo = drm_gpuvm_bo_obtain_locked(&vm_ctx->gpuvm_mgr, obj); in pvr_vm_bind_op_map_init()
261 if (IS_ERR(bind_op->gpuvm_bo)) in pvr_vm_bind_op_map_init()
262 return PTR_ERR(bind_op->gpuvm_bo); in pvr_vm_bind_op_map_init()
264 bind_op->new_va = kzalloc_obj(*bind_op->new_va); in pvr_vm_bind_op_map_init()
265 bind_op->prev_va = kzalloc_obj(*bind_op->prev_va); in pvr_vm_bind_op_map_init()
266 bind_op->next_va = kzalloc_obj(*bind_op->next_va); in pvr_vm_bind_op_map_init()
267 if (!bind_op->new_va || !bind_op->prev_va || !bind_op->next_va) { in pvr_vm_bind_op_map_init()
278 bind_op->mmu_op_ctx = in pvr_vm_bind_op_map_init()
280 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx); in pvr_vm_bind_op_map_init()
282 bind_op->mmu_op_ctx = NULL; in pvr_vm_bind_op_map_init()
286 bind_op->pvr_obj = pvr_obj; in pvr_vm_bind_op_map_init()
287 bind_op->vm_ctx = vm_ctx; in pvr_vm_bind_op_map_init()
288 bind_op->device_addr = device_addr; in pvr_vm_bind_op_map_init()
289 bind_op->size = size; in pvr_vm_bind_op_map_init()
290 bind_op->offset = offset; in pvr_vm_bind_op_map_init()
295 pvr_vm_bind_op_fini(bind_op); in pvr_vm_bind_op_map_init()
301 pvr_vm_bind_op_unmap_init(struct pvr_vm_bind_op *bind_op, in pvr_vm_bind_op_unmap_init() argument
311 bind_op->type = PVR_VM_BIND_TYPE_UNMAP; in pvr_vm_bind_op_unmap_init()
313 bind_op->prev_va = kzalloc_obj(*bind_op->prev_va); in pvr_vm_bind_op_unmap_init()
314 bind_op->next_va = kzalloc_obj(*bind_op->next_va); in pvr_vm_bind_op_unmap_init()
315 if (!bind_op->prev_va || !bind_op->next_va) { in pvr_vm_bind_op_unmap_init()
320 bind_op->mmu_op_ctx = in pvr_vm_bind_op_unmap_init()
322 err = PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx); in pvr_vm_bind_op_unmap_init()
324 bind_op->mmu_op_ctx = NULL; in pvr_vm_bind_op_unmap_init()
328 bind_op->pvr_obj = pvr_obj; in pvr_vm_bind_op_unmap_init()
329 bind_op->vm_ctx = vm_ctx; in pvr_vm_bind_op_unmap_init()
330 bind_op->device_addr = device_addr; in pvr_vm_bind_op_unmap_init()
331 bind_op->size = size; in pvr_vm_bind_op_unmap_init()
336 pvr_vm_bind_op_fini(bind_op); in pvr_vm_bind_op_unmap_init()
697 struct pvr_vm_bind_op *bind_op = vm_exec->extra.priv; in pvr_vm_lock_extra() local
698 struct pvr_gem_object *pvr_obj = bind_op->pvr_obj; in pvr_vm_lock_extra()
730 struct pvr_vm_bind_op bind_op = {0}; in pvr_vm_map() local
737 .priv = &bind_op, in pvr_vm_map()
741 int err = pvr_vm_bind_op_map_init(&bind_op, vm_ctx, pvr_obj, in pvr_vm_map()
754 err = pvr_vm_bind_op_exec(&bind_op); in pvr_vm_map()
759 pvr_vm_bind_op_fini(&bind_op); in pvr_vm_map()
787 struct pvr_vm_bind_op bind_op = {0}; in pvr_vm_unmap_obj_locked() local
794 .priv = &bind_op, in pvr_vm_unmap_obj_locked()
798 int err = pvr_vm_bind_op_unmap_init(&bind_op, vm_ctx, pvr_obj, in pvr_vm_unmap_obj_locked()
809 err = pvr_vm_bind_op_exec(&bind_op); in pvr_vm_unmap_obj_locked()
814 pvr_vm_bind_op_fini(&bind_op); in pvr_vm_unmap_obj_locked()