Lines Matching refs:bo

10 void lima_bo_destroy(struct lima_bo *bo)  in lima_bo_destroy()  argument
12 if (bo->sgt) { in lima_bo_destroy()
13 kfree(bo->pages); in lima_bo_destroy()
14 drm_prime_gem_destroy(&bo->gem, bo->sgt); in lima_bo_destroy()
16 if (bo->pages_dma_addr) { in lima_bo_destroy()
17 int i, npages = bo->gem.size >> PAGE_SHIFT; in lima_bo_destroy()
20 if (bo->pages_dma_addr[i]) in lima_bo_destroy()
21 dma_unmap_page(bo->gem.dev->dev, in lima_bo_destroy()
22 bo->pages_dma_addr[i], in lima_bo_destroy()
27 if (bo->pages) in lima_bo_destroy()
28 drm_gem_put_pages(&bo->gem, bo->pages, true, true); in lima_bo_destroy()
31 kfree(bo->pages_dma_addr); in lima_bo_destroy()
32 drm_gem_object_release(&bo->gem); in lima_bo_destroy()
33 kfree(bo); in lima_bo_destroy()
38 struct lima_bo *bo; in lima_bo_create_struct() local
43 bo = kzalloc(sizeof(*bo), GFP_KERNEL); in lima_bo_create_struct()
44 if (!bo) in lima_bo_create_struct()
47 mutex_init(&bo->lock); in lima_bo_create_struct()
48 INIT_LIST_HEAD(&bo->va); in lima_bo_create_struct()
50 err = drm_gem_object_init(dev->ddev, &bo->gem, size); in lima_bo_create_struct()
52 kfree(bo); in lima_bo_create_struct()
56 return bo; in lima_bo_create_struct()
64 struct lima_bo *bo, *ret; in lima_bo_create() local
66 bo = lima_bo_create_struct(dev, size, flags); in lima_bo_create()
67 if (IS_ERR(bo)) in lima_bo_create()
68 return bo; in lima_bo_create()
70 npages = bo->gem.size >> PAGE_SHIFT; in lima_bo_create()
72 bo->pages_dma_addr = kcalloc(npages, sizeof(dma_addr_t), GFP_KERNEL); in lima_bo_create()
73 if (!bo->pages_dma_addr) { in lima_bo_create()
79 bo->sgt = sgt; in lima_bo_create()
81 bo->pages = kcalloc(npages, sizeof(*bo->pages), GFP_KERNEL); in lima_bo_create()
82 if (!bo->pages) { in lima_bo_create()
88 sgt, bo->pages, bo->pages_dma_addr, npages); in lima_bo_create()
94 mapping_set_gfp_mask(bo->gem.filp->f_mapping, GFP_DMA32); in lima_bo_create()
95 bo->pages = drm_gem_get_pages(&bo->gem); in lima_bo_create()
96 if (IS_ERR(bo->pages)) { in lima_bo_create()
97 ret = ERR_CAST(bo->pages); in lima_bo_create()
98 bo->pages = NULL; in lima_bo_create()
103 dma_addr_t addr = dma_map_page(dev->dev, bo->pages[i], 0, in lima_bo_create()
109 bo->pages_dma_addr[i] = addr; in lima_bo_create()
114 return bo; in lima_bo_create()
117 lima_bo_destroy(bo); in lima_bo_create()