media: mtk-jpeg: Fixes jpeg enc&dec worker sw flow
authorkyrie wu <kyrie.wu@mediatek.com>
Fri, 10 Mar 2023 06:23:51 +0000 (06:23 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 10 Apr 2023 12:10:02 +0000 (13:10 +0100)
1. Move removing buffer after sw setting and before hw setting
in enc&dec worker to prevents the operation of removing
the buffer twice if the sw setting fails.
2. Remove the redundant operation of queue work in the
jpegenc irq handler because the jpegenc worker has called
v4l2_m2m_job_finish to do it.

Fixes: 5fb1c2361e56 ("mtk-jpegenc: add jpeg encode worker interface")
Fixes: dedc21500334 ("media: mtk-jpegdec: add jpeg decode worker interface")
Signed-off-by: kyrie wu <kyrie.wu@mediatek.com>
Signed-off-by: irui wang <irui.wang@mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c

index c7c98e1..6431aa4 100644 (file)
@@ -1025,9 +1025,6 @@ retry_select:
        if (!dst_buf)
                goto getbuf_fail;
 
-       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
-       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
-
        v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
 
        mtk_jpegenc_set_hw_param(ctx, hw_id, src_buf, dst_buf);
@@ -1045,6 +1042,9 @@ retry_select:
                goto enc_end;
        }
 
+       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
        schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
                              msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
 
@@ -1220,9 +1220,6 @@ retry_select:
        if (!dst_buf)
                goto getbuf_fail;
 
-       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
-       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
-
        v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
        jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(&src_buf->vb2_buf);
        jpeg_dst_buf = mtk_jpeg_vb2_to_srcbuf(&dst_buf->vb2_buf);
@@ -1231,7 +1228,7 @@ retry_select:
                                             &jpeg_src_buf->dec_param)) {
                mtk_jpeg_queue_src_chg_event(ctx);
                ctx->state = MTK_JPEG_SOURCE_CHANGE;
-               goto dec_end;
+               goto getbuf_fail;
        }
 
        jpeg_src_buf->curr_ctx = ctx;
@@ -1254,6 +1251,9 @@ retry_select:
                goto clk_end;
        }
 
+       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
        schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
                              msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
 
index 1bbb712..867f4c1 100644 (file)
@@ -286,10 +286,6 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv)
        mtk_jpegenc_put_buf(jpeg);
        pm_runtime_put(ctx->jpeg->dev);
        clk_disable_unprepare(jpeg->venc_clk.clks->clk);
-       if (!list_empty(&ctx->fh.m2m_ctx->out_q_ctx.rdy_queue) ||
-           !list_empty(&ctx->fh.m2m_ctx->cap_q_ctx.rdy_queue)) {
-               queue_work(master_jpeg->workqueue, &ctx->jpeg_work);
-       }
 
        jpeg->hw_state = MTK_JPEG_HW_IDLE;
        wake_up(&master_jpeg->enc_hw_wq);