media: imx-jpeg: Clear slot next desc ptr if config error
authorMing Qian <ming.qian@nxp.com>
Wed, 22 Mar 2023 05:13:11 +0000 (05:13 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sat, 15 Apr 2023 08:13:31 +0000 (09:13 +0100)
clear slot next desc ptr if config error,
otherwise codec will report config error interrupt repeatedly,
it may led to system hang.

Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.c
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c

index ef28122..bbd5d6a 100644 (file)
@@ -178,3 +178,8 @@ void mxc_jpeg_set_desc(u32 desc, void __iomem *reg, int slot)
        writel(desc | MXC_NXT_DESCPT_EN,
               reg + MXC_SLOT_OFFSET(slot, SLOT_NXT_DESCPT_PTR));
 }
+
+void mxc_jpeg_clr_desc(void __iomem *reg, int slot)
+{
+       writel(0, reg + MXC_SLOT_OFFSET(slot, SLOT_NXT_DESCPT_PTR));
+}
index ecf3b65..8b7cd65 100644 (file)
@@ -137,6 +137,7 @@ void mxc_jpeg_set_bufsize(struct mxc_jpeg_desc *desc,  u32 bufsize);
 void mxc_jpeg_set_res(struct mxc_jpeg_desc *desc, u16 w, u16 h);
 void mxc_jpeg_set_line_pitch(struct mxc_jpeg_desc *desc, u32 line_pitch);
 void mxc_jpeg_set_desc(u32 desc, void __iomem *reg, int slot);
+void mxc_jpeg_clr_desc(void __iomem *reg, int slot);
 void mxc_jpeg_set_regs_from_desc(struct mxc_jpeg_desc *desc,
                                 void __iomem *reg);
 #endif
index eb692e2..b2becf4 100644 (file)
@@ -696,6 +696,7 @@ static irqreturn_t mxc_jpeg_dec_irq(int irq, void *priv)
                u32 ret = readl(reg + CAST_STATUS12);
 
                dev_err(dev, "Encoder/decoder error, status=0x%08x", ret);
+               mxc_jpeg_clr_desc(reg, slot);
                mxc_jpeg_sw_reset(reg);
                buf_state = VB2_BUF_STATE_ERROR;
                goto buffers_done;