diff --git a/drivers/video/rockchip/mpp/mpp_iommu.c b/drivers/video/rockchip/mpp/mpp_iommu.c index fe8a1a414b94..7d1ee04c11b1 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.c +++ b/drivers/video/rockchip/mpp/mpp_iommu.c @@ -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; diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec.c b/drivers/video/rockchip/mpp/mpp_rkvdec.c index cad51ddc562b..bfe2f4dc35bf 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec.c @@ -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;