linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Xia Jiang <xia.jiang@mediatek.com>
To: Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab+samsung@kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Rick Chang <rick.chang@mediatek.com>
Cc: <linux-media@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-mediatek@lists.infradead.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Tomasz Figa <tfiga@chromium.org>, <srv_heupstream@mediatek.com>,
	<senozhatsky@chromium.org>, <mojahsu@chromium.org>,
	<drinkcat@chromium.org>, <maoguang.meng@mediatek.com>,
	Xia Jiang <xia.jiang@mediatek.com>
Subject: [PATCH v10 08/28] media: platform: Add mechanism to handle jpeg hardware's locking up
Date: Thu, 23 Jul 2020 11:04:31 +0800	[thread overview]
Message-ID: <20200723030451.5616-9-xia.jiang@mediatek.com> (raw)
In-Reply-To: <20200723030451.5616-1-xia.jiang@mediatek.com>

There is a delayed work scheduled before starting the hardware and
canceled in the interrupt handler. If the delayed work is executed, it
resets the hardware and reports the failure to V4L2, so that the
execution can continue from next frames.

Signed-off-by: Xia Jiang <xia.jiang@mediatek.com>
---
v10: new add patch
---
 .../media/platform/mtk-jpeg/mtk_jpeg_core.c   | 25 +++++++++++++++++++
 .../media/platform/mtk-jpeg/mtk_jpeg_core.h   |  4 +++
 2 files changed, 29 insertions(+)

diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
index ee4aaf618551..9baeeacb4452 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
@@ -816,6 +816,9 @@ static void mtk_jpeg_device_run(void *priv)
 	if (ret < 0)
 		goto dec_end;
 
+	schedule_delayed_work(&jpeg->job_timeout_work,
+			      msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
+
 	mtk_jpeg_set_dec_src(ctx, &src_buf->vb2_buf, &bs);
 	if (mtk_jpeg_set_dec_dst(ctx, &jpeg_src_buf->dec_param, &dst_buf->vb2_buf, &fb))
 		goto dec_end;
@@ -911,6 +914,8 @@ static irqreturn_t mtk_jpeg_dec_irq(int irq, void *priv)
 	u32 dec_ret;
 	int i;
 
+	cancel_delayed_work(&jpeg->job_timeout_work);
+
 	dec_ret = mtk_jpeg_dec_get_int_status(jpeg->dec_reg_base);
 	dec_irq_ret = mtk_jpeg_dec_enum_result(dec_ret);
 	ctx = v4l2_m2m_get_curr_priv(jpeg->m2m_dev);
@@ -1066,6 +1071,25 @@ static int mtk_jpeg_clk_init(struct mtk_jpeg_dev *jpeg)
 	return PTR_ERR_OR_ZERO(jpeg->clk_jdec_smi);
 }
 
+static void mtk_jpeg_job_timeout_work(struct work_struct *work)
+{
+	struct mtk_jpeg_dev *jpeg = container_of(work, struct mtk_jpeg_dev,
+						 job_timeout_work.work);
+	struct mtk_jpeg_ctx *ctx;
+	struct vb2_v4l2_buffer *src_buf, *dst_buf;
+
+	ctx = v4l2_m2m_get_curr_priv(jpeg->m2m_dev);
+	src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+	dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
+	mtk_jpeg_dec_reset(jpeg->dec_reg_base);
+
+	pm_runtime_put(jpeg->dev);
+
+	v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_ERROR);
+	v4l2_m2m_buf_done(dst_buf, VB2_BUF_STATE_ERROR);
+	v4l2_m2m_job_finish(jpeg->m2m_dev, ctx->fh.m2m_ctx);
+}
 static int mtk_jpeg_probe(struct platform_device *pdev)
 {
 	struct mtk_jpeg_dev *jpeg;
@@ -1080,6 +1104,7 @@ static int mtk_jpeg_probe(struct platform_device *pdev)
 	mutex_init(&jpeg->lock);
 	spin_lock_init(&jpeg->hw_lock);
 	jpeg->dev = &pdev->dev;
+	INIT_DELAYED_WORK(&jpeg->job_timeout_work, mtk_jpeg_job_timeout_work);
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	jpeg->dec_reg_base = devm_ioremap_resource(&pdev->dev, res);
diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
index 999bd1427809..320c4f8a014a 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
@@ -28,6 +28,8 @@
 
 #define MTK_JPEG_DEFAULT_SIZEIMAGE	(1 * 1024 * 1024)
 
+#define MTK_JPEG_HW_TIMEOUT_MSEC 1000
+
 enum mtk_jpeg_ctx_state {
 	MTK_JPEG_INIT = 0,
 	MTK_JPEG_RUNNING,
@@ -48,6 +50,7 @@ enum mtk_jpeg_ctx_state {
  * @clk_jdec:		JPEG hw working clock
  * @clk_jdec_smi:	JPEG SMI bus clock
  * @larb:		SMI device
+ * @job_timeout_work:	IRQ timeout structure
  */
 struct mtk_jpeg_dev {
 	struct mutex		lock;
@@ -62,6 +65,7 @@ struct mtk_jpeg_dev {
 	struct clk		*clk_jdec;
 	struct clk		*clk_jdec_smi;
 	struct device		*larb;
+	struct delayed_work job_timeout_work;
 };
 
 /**
-- 
2.18.0

  parent reply	other threads:[~2020-07-23  3:06 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-23  3:04 [PATCH v10 00/28] Add support for mt2701 JPEG ENC support Xia Jiang
2020-07-23  3:04 ` [PATCH v10 01/28] media: platform: Improve subscribe event flow for bug fixing Xia Jiang
2020-07-23  3:04 ` [PATCH v10 02/28] media: platform: Improve queue set up " Xia Jiang
2020-07-23  3:04 ` [PATCH v10 03/28] media: platform: Improve getting and requesting irq " Xia Jiang
2020-07-23  3:04 ` [PATCH v10 04/28] media: platform: Change the fixed device node number to unfixed value Xia Jiang
2020-07-23  3:04 ` [PATCH v10 05/28] media: platform: Improve power on and power off flow Xia Jiang
2020-07-23  3:04 ` [PATCH v10 06/28] media: platform: Delete the resetting hardware flow in the system PM ops Xia Jiang
2020-07-23  3:04 ` [PATCH v10 07/28] media: platform: Improve the implementation of " Xia Jiang
2020-07-23  3:04 ` Xia Jiang [this message]
2020-07-23  3:04 ` [PATCH v10 09/28] media: platform: Cancel the last frame handling flow Xia Jiang
2020-07-23  3:04 ` [PATCH v10 10/28] media: platform: Delete zeroing the reserved fields Xia Jiang
2020-07-23  3:04 ` [PATCH v10 11/28] media: platform: Stylistic changes for improving code quality Xia Jiang
2020-07-23  3:04 ` [PATCH v10 12/28] media: platform: Use generic rounding helpers Xia Jiang
2020-07-23  3:04 ` [PATCH v10 13/28] media: platform: Change MTK_JPEG_COMP_MAX macro definition location Xia Jiang
2020-07-23  3:04 ` [PATCH v10 14/28] media: platform: Delete redundant code and add annotation for an enum Xia Jiang
2020-07-23  3:04 ` [PATCH v10 15/28] media: platform: Delete vidioc_s_selection ioctl of jpeg dec Xia Jiang
2020-07-23  3:04 ` [PATCH v10 16/28] media: platform: Change the maximum width and height supported by JPEG dec Xia Jiang
2020-07-23  3:04 ` [PATCH v10 17/28] media: platform: Refactor mtk_jpeg_try_fmt_mplane() Xia Jiang
2020-07-23  3:04 ` [PATCH v10 18/28] media: platform: Refactor mtk_jpeg_find_format() Xia Jiang
2020-07-23  3:04 ` [PATCH v10 19/28] media: platform: Redefinition of mtk_jpeg_q_data structure Xia Jiang
2020-07-23  3:04 ` [PATCH v10 20/28] media: platform: Change the colorspace of jpeg to the fixed value Xia Jiang
2020-07-23  3:04 ` [PATCH v10 21/28] media: platform: Refactor mtk_jpeg_set_default_params() Xia Jiang
2020-07-23  3:04 ` [PATCH v10 22/28] media: platform: Change the call functions of getting/enable/disable the jpeg's clock Xia Jiang
2020-07-30 16:34   ` Tomasz Figa
2020-07-31  3:20     ` Xia Jiang
2020-07-31 12:49       ` Tomasz Figa
2020-07-23  3:04 ` [PATCH v10 23/28] media: dt-bindings: Add jpeg enc device tree node document Xia Jiang
2020-07-23  3:04 ` [PATCH v10 24/28] arm: dts: mt2701: Add jpeg enc device tree node Xia Jiang
2020-07-23  3:04 ` [PATCH v10 25/28] media: platform: Rename jpeg dec file name Xia Jiang
2020-07-23  3:04 ` [PATCH v10 26/28] media: platform: Rename existing functions/defines/variables Xia Jiang
2020-07-23  3:04 ` [PATCH v10 27/28] media: platform: Using the variant structure to contain the varability between dec and enc Xia Jiang
2020-07-23  3:04 ` [PATCH v10 28/28] media: platform: Add jpeg enc feature Xia Jiang
2020-07-30 16:40 ` [PATCH v10 00/28] Add support for mt2701 JPEG ENC support Tomasz Figa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200723030451.5616-9-xia.jiang@mediatek.com \
    --to=xia.jiang@mediatek.com \
    --cc=devicetree@vger.kernel.org \
    --cc=drinkcat@chromium.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=m.szyprowski@samsung.com \
    --cc=maoguang.meng@mediatek.com \
    --cc=matthias.bgg@gmail.com \
    --cc=mchehab+samsung@kernel.org \
    --cc=mojahsu@chromium.org \
    --cc=rick.chang@mediatek.com \
    --cc=robh+dt@kernel.org \
    --cc=senozhatsky@chromium.org \
    --cc=srv_heupstream@mediatek.com \
    --cc=tfiga@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).