Skip to content

Commit

Permalink
media: mtk-jpeg: Fixes jpeg enc&dec worker sw flow
Browse files Browse the repository at this point in the history
[ Upstream commit 86379bd ]

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: 5fb1c23 ("mtk-jpegenc: add jpeg encode worker interface")
Fixes: dedc215 ("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>
  • Loading branch information
kyriewu-hw authored and gregkh committed May 11, 2023
1 parent 8746b36 commit f58094c
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 11 deletions.
14 changes: 7 additions & 7 deletions drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1025,9 +1025,6 @@ static void mtk_jpegenc_worker(struct work_struct *work)
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);
Expand All @@ -1045,6 +1042,9 @@ static void mtk_jpegenc_worker(struct work_struct *work)
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));

Expand Down Expand Up @@ -1220,9 +1220,6 @@ static void mtk_jpegdec_worker(struct work_struct *work)
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);
Expand All @@ -1231,7 +1228,7 @@ static void mtk_jpegdec_worker(struct work_struct *work)
&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;
Expand All @@ -1254,6 +1251,9 @@ static void mtk_jpegdec_worker(struct work_struct *work)
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));

Expand Down
4 changes: 0 additions & 4 deletions drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit f58094c

Please sign in to comment.