Commit 86379bd9 authored by kyrie wu's avatar kyrie wu Committed by Mauro Carvalho Chehab

media: mtk-jpeg: Fixes jpeg enc&dec worker sw flow

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: 5fb1c236 ("mtk-jpegenc: add jpeg encode worker interface")
Fixes: dedc2150 ("media: mtk-jpegdec: add jpeg decode worker interface")
Signed-off-by: default avatarkyrie wu <kyrie.wu@mediatek.com>
Signed-off-by: default avatarirui wang <irui.wang@mediatek.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 9ceca28e
...@@ -1025,9 +1025,6 @@ static void mtk_jpegenc_worker(struct work_struct *work) ...@@ -1025,9 +1025,6 @@ static void mtk_jpegenc_worker(struct work_struct *work)
if (!dst_buf) if (!dst_buf)
goto getbuf_fail; 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); v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
mtk_jpegenc_set_hw_param(ctx, hw_id, src_buf, dst_buf); mtk_jpegenc_set_hw_param(ctx, hw_id, src_buf, dst_buf);
...@@ -1045,6 +1042,9 @@ static void mtk_jpegenc_worker(struct work_struct *work) ...@@ -1045,6 +1042,9 @@ static void mtk_jpegenc_worker(struct work_struct *work)
goto enc_end; 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, schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC)); msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
...@@ -1220,9 +1220,6 @@ static void mtk_jpegdec_worker(struct work_struct *work) ...@@ -1220,9 +1220,6 @@ static void mtk_jpegdec_worker(struct work_struct *work)
if (!dst_buf) if (!dst_buf)
goto getbuf_fail; 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); v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(&src_buf->vb2_buf); jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(&src_buf->vb2_buf);
jpeg_dst_buf = mtk_jpeg_vb2_to_srcbuf(&dst_buf->vb2_buf); jpeg_dst_buf = mtk_jpeg_vb2_to_srcbuf(&dst_buf->vb2_buf);
...@@ -1231,7 +1228,7 @@ static void mtk_jpegdec_worker(struct work_struct *work) ...@@ -1231,7 +1228,7 @@ static void mtk_jpegdec_worker(struct work_struct *work)
&jpeg_src_buf->dec_param)) { &jpeg_src_buf->dec_param)) {
mtk_jpeg_queue_src_chg_event(ctx); mtk_jpeg_queue_src_chg_event(ctx);
ctx->state = MTK_JPEG_SOURCE_CHANGE; ctx->state = MTK_JPEG_SOURCE_CHANGE;
goto dec_end; goto getbuf_fail;
} }
jpeg_src_buf->curr_ctx = ctx; jpeg_src_buf->curr_ctx = ctx;
...@@ -1254,6 +1251,9 @@ static void mtk_jpegdec_worker(struct work_struct *work) ...@@ -1254,6 +1251,9 @@ static void mtk_jpegdec_worker(struct work_struct *work)
goto clk_end; 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, schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC)); msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
......
...@@ -286,10 +286,6 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv) ...@@ -286,10 +286,6 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv)
mtk_jpegenc_put_buf(jpeg); mtk_jpegenc_put_buf(jpeg);
pm_runtime_put(ctx->jpeg->dev); pm_runtime_put(ctx->jpeg->dev);
clk_disable_unprepare(jpeg->venc_clk.clks->clk); 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; jpeg->hw_state = MTK_JPEG_HW_IDLE;
wake_up(&master_jpeg->enc_hw_wq); wake_up(&master_jpeg->enc_hw_wq);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment