Commit 318a2c03 authored by Nikhil Devshatwar's avatar Nikhil Devshatwar Committed by Greg Kroah-Hartman

media: ti-vpe: cal: Restrict DMA to avoid memory corruption

[ Upstream commit 6e72eab2 ]

When setting DMA for video capture from CSI channel, if the DMA size
is not given, it ends up writing as much data as sent by the camera.

This may lead to overwriting the buffers causing memory corruption.
Observed green lines on the default framebuffer.

Restrict the DMA to maximum height as specified in the S_FMT ioctl.
Signed-off-by: default avatarNikhil Devshatwar <nikhil.nd@ti.com>
Signed-off-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 22b5ef71
...@@ -690,12 +690,13 @@ static void pix_proc_config(struct cal_ctx *ctx) ...@@ -690,12 +690,13 @@ static void pix_proc_config(struct cal_ctx *ctx)
} }
static void cal_wr_dma_config(struct cal_ctx *ctx, static void cal_wr_dma_config(struct cal_ctx *ctx,
unsigned int width) unsigned int width, unsigned int height)
{ {
u32 val; u32 val;
val = reg_read(ctx->dev, CAL_WR_DMA_CTRL(ctx->csi2_port)); val = reg_read(ctx->dev, CAL_WR_DMA_CTRL(ctx->csi2_port));
set_field(&val, ctx->csi2_port, CAL_WR_DMA_CTRL_CPORT_MASK); set_field(&val, ctx->csi2_port, CAL_WR_DMA_CTRL_CPORT_MASK);
set_field(&val, height, CAL_WR_DMA_CTRL_YSIZE_MASK);
set_field(&val, CAL_WR_DMA_CTRL_DTAG_PIX_DAT, set_field(&val, CAL_WR_DMA_CTRL_DTAG_PIX_DAT,
CAL_WR_DMA_CTRL_DTAG_MASK); CAL_WR_DMA_CTRL_DTAG_MASK);
set_field(&val, CAL_WR_DMA_CTRL_MODE_CONST, set_field(&val, CAL_WR_DMA_CTRL_MODE_CONST,
...@@ -1321,7 +1322,8 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -1321,7 +1322,8 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
csi2_lane_config(ctx); csi2_lane_config(ctx);
csi2_ctx_config(ctx); csi2_ctx_config(ctx);
pix_proc_config(ctx); pix_proc_config(ctx);
cal_wr_dma_config(ctx, ctx->v_fmt.fmt.pix.bytesperline); cal_wr_dma_config(ctx, ctx->v_fmt.fmt.pix.bytesperline,
ctx->v_fmt.fmt.pix.height);
cal_wr_dma_addr(ctx, addr); cal_wr_dma_addr(ctx, addr);
csi2_ppi_enable(ctx); csi2_ppi_enable(ctx);
......
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