Commit 8b8130f0 authored by Tomasz Figa's avatar Tomasz Figa Committed by Mauro Carvalho Chehab

media: mtk-vcodec: Remove VA from encoder frame buffers

The encoder driver has no need to do any CPU access to the source frame
buffers. Use a separate structure for holding DMA addresses and sizes
for those and remove, so we do not end up introducing any erroneous
dereferences of those VAs.

This fixes DMA-buf import from exporters that do not provide contiguous
kernel mappings, which includes the MTK DRM driver.
Signed-off-by: default avatarTomasz Figa <tfiga@chromium.org>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 25f5c34b
...@@ -1087,7 +1087,6 @@ static void mtk_venc_worker(struct work_struct *work) ...@@ -1087,7 +1087,6 @@ static void mtk_venc_worker(struct work_struct *work)
src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
memset(&frm_buf, 0, sizeof(frm_buf)); memset(&frm_buf, 0, sizeof(frm_buf));
for (i = 0; i < src_buf->num_planes ; i++) { for (i = 0; i < src_buf->num_planes ; i++) {
frm_buf.fb_addr[i].va = vb2_plane_vaddr(src_buf, i);
frm_buf.fb_addr[i].dma_addr = frm_buf.fb_addr[i].dma_addr =
vb2_dma_contig_plane_dma_addr(src_buf, i); vb2_dma_contig_plane_dma_addr(src_buf, i);
frm_buf.fb_addr[i].size = frm_buf.fb_addr[i].size =
...@@ -1098,14 +1097,11 @@ static void mtk_venc_worker(struct work_struct *work) ...@@ -1098,14 +1097,11 @@ static void mtk_venc_worker(struct work_struct *work)
bs_buf.size = (size_t)dst_buf->planes[0].length; bs_buf.size = (size_t)dst_buf->planes[0].length;
mtk_v4l2_debug(2, mtk_v4l2_debug(2,
"Framebuf VA=%p PA=%llx Size=0x%zx;VA=%p PA=0x%llx Size=0x%zx;VA=%p PA=0x%llx Size=%zu", "Framebuf PA=%llx Size=0x%zx;PA=0x%llx Size=0x%zx;PA=0x%llx Size=%zu",
frm_buf.fb_addr[0].va,
(u64)frm_buf.fb_addr[0].dma_addr, (u64)frm_buf.fb_addr[0].dma_addr,
frm_buf.fb_addr[0].size, frm_buf.fb_addr[0].size,
frm_buf.fb_addr[1].va,
(u64)frm_buf.fb_addr[1].dma_addr, (u64)frm_buf.fb_addr[1].dma_addr,
frm_buf.fb_addr[1].size, frm_buf.fb_addr[1].size,
frm_buf.fb_addr[2].va,
(u64)frm_buf.fb_addr[2].dma_addr, (u64)frm_buf.fb_addr[2].dma_addr,
frm_buf.fb_addr[2].size); frm_buf.fb_addr[2].size);
......
...@@ -25,6 +25,11 @@ struct mtk_vcodec_mem { ...@@ -25,6 +25,11 @@ struct mtk_vcodec_mem {
dma_addr_t dma_addr; dma_addr_t dma_addr;
}; };
struct mtk_vcodec_fb {
size_t size;
dma_addr_t dma_addr;
};
struct mtk_vcodec_ctx; struct mtk_vcodec_ctx;
struct mtk_vcodec_dev; struct mtk_vcodec_dev;
......
...@@ -106,7 +106,7 @@ struct venc_enc_param { ...@@ -106,7 +106,7 @@ struct venc_enc_param {
* @fb_addr: plane frame buffer addresses * @fb_addr: plane frame buffer addresses
*/ */
struct venc_frm_buf { struct venc_frm_buf {
struct mtk_vcodec_mem fb_addr[MTK_VCODEC_MAX_PLANES]; struct mtk_vcodec_fb fb_addr[MTK_VCODEC_MAX_PLANES];
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment