mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
video: rockchip: mpp: fix dma_buf_vmap/vunmap adapt to kernel 6.1
Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: I9c6767ccf2711432c10674815139b9109d62af4e
This commit is contained in:
@@ -272,14 +272,14 @@ fail:
|
||||
int mpp_dma_unmap_kernel(struct mpp_dma_session *dma,
|
||||
struct mpp_dma_buffer *buffer)
|
||||
{
|
||||
void *vaddr = buffer->vaddr;
|
||||
struct iosys_map map = IOSYS_MAP_INIT_VADDR(buffer->vaddr);
|
||||
struct dma_buf *dmabuf = buffer->dmabuf;
|
||||
|
||||
if (IS_ERR_OR_NULL(vaddr) ||
|
||||
if (IS_ERR_OR_NULL(map.vaddr) ||
|
||||
IS_ERR_OR_NULL(dmabuf))
|
||||
return -EINVAL;
|
||||
|
||||
dma_buf_vunmap(dmabuf, vaddr);
|
||||
dma_buf_vunmap(dmabuf, &map);
|
||||
buffer->vaddr = NULL;
|
||||
|
||||
dma_buf_end_cpu_access(dmabuf, DMA_FROM_DEVICE);
|
||||
@@ -291,7 +291,7 @@ int mpp_dma_map_kernel(struct mpp_dma_session *dma,
|
||||
struct mpp_dma_buffer *buffer)
|
||||
{
|
||||
int ret;
|
||||
void *vaddr;
|
||||
struct iosys_map map;
|
||||
struct dma_buf *dmabuf = buffer->dmabuf;
|
||||
|
||||
if (IS_ERR_OR_NULL(dmabuf))
|
||||
@@ -303,14 +303,13 @@ int mpp_dma_map_kernel(struct mpp_dma_session *dma,
|
||||
goto failed_access;
|
||||
}
|
||||
|
||||
vaddr = dma_buf_vmap(dmabuf);
|
||||
if (!vaddr) {
|
||||
ret = dma_buf_vmap(dmabuf, &map);
|
||||
if (ret) {
|
||||
dev_dbg(dma->dev, "can't vmap the dma buffer\n");
|
||||
ret = -EIO;
|
||||
goto failed_vmap;
|
||||
}
|
||||
|
||||
buffer->vaddr = vaddr;
|
||||
buffer->vaddr = map.vaddr;
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -558,7 +558,7 @@ static int fill_scaling_list_pps(struct rkvdec_task *task,
|
||||
int pps_info_size, int sub_addr_offset)
|
||||
{
|
||||
struct dma_buf *dmabuf = NULL;
|
||||
void *vaddr = NULL;
|
||||
struct iosys_map map;
|
||||
u8 *pps = NULL;
|
||||
u32 scaling_fd = 0;
|
||||
int ret = 0;
|
||||
@@ -573,16 +573,15 @@ static int fill_scaling_list_pps(struct rkvdec_task *task,
|
||||
ret = dma_buf_begin_cpu_access(dmabuf, DMA_FROM_DEVICE);
|
||||
if (ret) {
|
||||
mpp_err("can't access the pps buffer\n");
|
||||
goto done;
|
||||
goto access_failed;
|
||||
}
|
||||
|
||||
vaddr = dma_buf_vmap(dmabuf);
|
||||
if (!vaddr) {
|
||||
ret = dma_buf_vmap(dmabuf, &map);
|
||||
if (ret) {
|
||||
mpp_err("can't access the pps buffer\n");
|
||||
ret = -EIO;
|
||||
goto done;
|
||||
goto vmap_failed;
|
||||
}
|
||||
pps = vaddr + offset;
|
||||
pps = map.vaddr + offset;
|
||||
/* NOTE: scaling buffer in pps, have no offset */
|
||||
memcpy(&scaling_fd, pps + base, sizeof(scaling_fd));
|
||||
scaling_fd = le32_to_cpu(scaling_fd);
|
||||
@@ -596,7 +595,7 @@ static int fill_scaling_list_pps(struct rkvdec_task *task,
|
||||
if (IS_ERR(mem_region)) {
|
||||
mpp_err("scaling list fd %d attach failed\n", scaling_fd);
|
||||
ret = PTR_ERR(mem_region);
|
||||
goto done;
|
||||
goto task_fd_failed;
|
||||
}
|
||||
|
||||
tmp = mem_region->iova & 0xffffffff;
|
||||
@@ -610,9 +609,11 @@ static int fill_scaling_list_pps(struct rkvdec_task *task,
|
||||
memcpy(pps + base, &tmp, sizeof(tmp));
|
||||
}
|
||||
|
||||
done:
|
||||
dma_buf_vunmap(dmabuf, vaddr);
|
||||
task_fd_failed:
|
||||
dma_buf_vunmap(dmabuf, &map);
|
||||
vmap_failed:
|
||||
dma_buf_end_cpu_access(dmabuf, DMA_FROM_DEVICE);
|
||||
access_failed:
|
||||
dma_buf_put(dmabuf);
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user