]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:11:04 +0000 (23:11 +0900)
[ Upstream commit 86379bd9d399e2c5fd638a869af223d4910725c3 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c

index 6d052747a15e87e8b3489074e6b5327f755ac547..d9584fe5033eb06a12a8c3cd40d8bba99efc2e3f 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 1bbb712d78d0e64057e7ac13502958a11b508c24..867f4c1a09fa6510e1a2d0d02478dc03fe99327c 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);