forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/media/common/videobuf2/videobuf2-vmalloc.c
....@@ -46,16 +46,16 @@
4646
4747 buf->size = size;
4848 buf->vaddr = vmalloc_user(buf->size);
49
- buf->dma_dir = dma_dir;
50
- buf->handler.refcount = &buf->refcount;
51
- buf->handler.put = vb2_vmalloc_put;
52
- buf->handler.arg = buf;
53
-
5449 if (!buf->vaddr) {
5550 pr_debug("vmalloc of size %ld failed\n", buf->size);
5651 kfree(buf);
5752 return ERR_PTR(-ENOMEM);
5853 }
54
+
55
+ buf->dma_dir = dma_dir;
56
+ buf->handler.refcount = &buf->refcount;
57
+ buf->handler.put = vb2_vmalloc_put;
58
+ buf->handler.arg = buf;
5959
6060 refcount_set(&buf->refcount, 1);
6161 return buf;
....@@ -87,8 +87,7 @@
8787 buf->dma_dir = dma_dir;
8888 offset = vaddr & ~PAGE_MASK;
8989 buf->size = size;
90
- vec = vb2_create_framevec(vaddr, size, dma_dir == DMA_FROM_DEVICE ||
91
- dma_dir == DMA_BIDIRECTIONAL);
90
+ vec = vb2_create_framevec(vaddr, size);
9291 if (IS_ERR(vec)) {
9392 ret = PTR_ERR(vec);
9493 goto fail_pfnvec_create;
....@@ -106,10 +105,9 @@
106105 if (nums[i-1] + 1 != nums[i])
107106 goto fail_map;
108107 buf->vaddr = (__force void *)
109
- ioremap_nocache(__pfn_to_phys(nums[0]), size + offset);
108
+ ioremap(__pfn_to_phys(nums[0]), size + offset);
110109 } else {
111
- buf->vaddr = vm_map_ram(frame_vector_pages(vec), n_pages, -1,
112
- PAGE_KERNEL);
110
+ buf->vaddr = vm_map_ram(frame_vector_pages(vec), n_pages, -1);
113111 }
114112
115113 if (!buf->vaddr)
....@@ -231,7 +229,7 @@
231229 kfree(attach);
232230 return ret;
233231 }
234
- for_each_sg(sgt->sgl, sg, sgt->nents, i) {
232
+ for_each_sgtable_sg(sgt, sg, i) {
235233 struct page *page = vmalloc_to_page(vaddr);
236234
237235 if (!page) {
....@@ -261,8 +259,7 @@
261259
262260 /* release the scatterlist cache */
263261 if (attach->dma_dir != DMA_NONE)
264
- dma_unmap_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
265
- attach->dma_dir);
262
+ dma_unmap_sgtable(db_attach->dev, sgt, attach->dma_dir, 0);
266263 sg_free_table(sgt);
267264 kfree(attach);
268265 db_attach->priv = NULL;
....@@ -287,15 +284,12 @@
287284
288285 /* release any previous cache */
289286 if (attach->dma_dir != DMA_NONE) {
290
- dma_unmap_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
291
- attach->dma_dir);
287
+ dma_unmap_sgtable(db_attach->dev, sgt, attach->dma_dir, 0);
292288 attach->dma_dir = DMA_NONE;
293289 }
294290
295291 /* mapping to the client with new direction */
296
- sgt->nents = dma_map_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
297
- dma_dir);
298
- if (!sgt->nents) {
292
+ if (dma_map_sgtable(db_attach->dev, sgt, dma_dir, 0)) {
299293 pr_err("failed to map scatterlist\n");
300294 mutex_unlock(lock);
301295 return ERR_PTR(-EIO);
....@@ -320,13 +314,6 @@
320314 vb2_vmalloc_put(dbuf->priv);
321315 }
322316
323
-static void *vb2_vmalloc_dmabuf_ops_kmap(struct dma_buf *dbuf, unsigned long pgnum)
324
-{
325
- struct vb2_vmalloc_buf *buf = dbuf->priv;
326
-
327
- return buf->vaddr + pgnum * PAGE_SIZE;
328
-}
329
-
330317 static void *vb2_vmalloc_dmabuf_ops_vmap(struct dma_buf *dbuf)
331318 {
332319 struct vb2_vmalloc_buf *buf = dbuf->priv;
....@@ -345,7 +332,6 @@
345332 .detach = vb2_vmalloc_dmabuf_ops_detach,
346333 .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
347334 .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
348
- .map = vb2_vmalloc_dmabuf_ops_kmap,
349335 .vmap = vb2_vmalloc_dmabuf_ops_vmap,
350336 .mmap = vb2_vmalloc_dmabuf_ops_mmap,
351337 .release = vb2_vmalloc_dmabuf_ops_release,