media: rkisp1: fix grey format iommu page faults

Currently capturing grey format produces page faults
on both selfpath and mainpath. To support greyscale
we can capture YUV422 planar format and configure the U, V
buffers to the dummy buffer.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
Dafna Hirschfeld 2021-12-07 12:59:23 +01:00 committed by Mauro Carvalho Chehab
parent 5be7f8c91d
commit 9a0e3cd50d
1 changed files with 21 additions and 7 deletions

View File

@ -249,7 +249,7 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
.fourcc = V4L2_PIX_FMT_GREY,
.uv_swap = 0,
.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
},
/* rgb */
@ -631,12 +631,26 @@ static void rkisp1_set_next_buf(struct rkisp1_capture *cap)
rkisp1_write(cap->rkisp1,
buff_addr[RKISP1_PLANE_Y],
cap->config->mi.y_base_ad_init);
rkisp1_write(cap->rkisp1,
buff_addr[RKISP1_PLANE_CB],
cap->config->mi.cb_base_ad_init);
rkisp1_write(cap->rkisp1,
buff_addr[RKISP1_PLANE_CR],
cap->config->mi.cr_base_ad_init);
/*
* In order to support grey format we capture
* YUV422 planar format from the camera and
* set the U and V planes to the dummy buffer
*/
if (cap->pix.cfg->fourcc == V4L2_PIX_FMT_GREY) {
rkisp1_write(cap->rkisp1,
cap->buf.dummy.dma_addr,
cap->config->mi.cb_base_ad_init);
rkisp1_write(cap->rkisp1,
cap->buf.dummy.dma_addr,
cap->config->mi.cr_base_ad_init);
} else {
rkisp1_write(cap->rkisp1,
buff_addr[RKISP1_PLANE_CB],
cap->config->mi.cb_base_ad_init);
rkisp1_write(cap->rkisp1,
buff_addr[RKISP1_PLANE_CR],
cap->config->mi.cr_base_ad_init);
}
} else {
/*
* Use the dummy space allocated by dma_alloc_coherent to