Skip to content

Commit

Permalink
drm/lima: add lima_vm_map_bo
Browse files Browse the repository at this point in the history
For dynamically mapping added backup memory of lima_bo to vm.
This is a preparation for adding heap buffer support.

Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Tested-by: Andreas Baierl <ichgeh@imkreisrum.de>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200116131157.13346-3-yuq825@gmail.com
  • Loading branch information
Qiang Yu committed Jan 27, 2020
1 parent 500edbb commit dc76cb7
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
42 changes: 42 additions & 0 deletions drivers/gpu/drm/lima/lima_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,3 +277,45 @@ void lima_vm_print(struct lima_vm *vm)
}
}
}

int lima_vm_map_bo(struct lima_vm *vm, struct lima_bo *bo, int pageoff)
{
struct lima_bo_va *bo_va;
struct sg_dma_page_iter sg_iter;
int offset = 0, err;
u32 base;

mutex_lock(&bo->lock);

bo_va = lima_vm_bo_find(vm, bo);
if (!bo_va) {
err = -ENOENT;
goto err_out0;
}

mutex_lock(&vm->lock);

base = bo_va->node.start + (pageoff << PAGE_SHIFT);
for_each_sg_dma_page(bo->base.sgt->sgl, &sg_iter,
bo->base.sgt->nents, pageoff) {
err = lima_vm_map_page(vm, sg_page_iter_dma_address(&sg_iter),
base + offset);
if (err)
goto err_out1;

offset += PAGE_SIZE;
}

mutex_unlock(&vm->lock);

mutex_unlock(&bo->lock);
return 0;

err_out1:
if (offset)
lima_vm_unmap_range(vm, base, base + offset - 1);
mutex_unlock(&vm->lock);
err_out0:
mutex_unlock(&bo->lock);
return err;
}
1 change: 1 addition & 0 deletions drivers/gpu/drm/lima/lima_vm.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@ static inline void lima_vm_put(struct lima_vm *vm)
}

void lima_vm_print(struct lima_vm *vm);
int lima_vm_map_bo(struct lima_vm *vm, struct lima_bo *bo, int pageoff);

#endif

0 comments on commit dc76cb7

Please sign in to comment.