lkml.org 
[lkml]   [2020]   [Aug]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] media: mtk-vcodec: make IRQs disabled upon request
Date
The driver requests IRQs to disable them immediately. This is
potentially racy, fix this by requesting the IRQs to come disabled
instead using the IRQ_NOAUTOEN flag of irq_set_status_flags().

Reported-by: Ezequiel Garcia <ezequiel@collabora.com>
Signed-off-by: Alexandre Courbot <acourbot@chromium.org>
---
The "media: mtk-vcodec: venc: support for MT8183" happens to change this
part of the code, this version applies on top of it (but adapting it to
the media ToT is trivial). If preferred I can include this one on top of
the series on its next respin, even though it also touches the decoder.

drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c | 2 +-
drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c
index 5b5765b98e57..a6ba342f7bc8 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c
@@ -259,6 +259,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
}

dev->dec_irq = platform_get_irq(pdev, 0);
+ irq_set_status_flags(dev->dec_irq, IRQ_NOAUTOEN);
ret = devm_request_irq(&pdev->dev, dev->dec_irq,
mtk_vcodec_dec_irq_handler, 0, pdev->name, dev);
if (ret) {
@@ -268,7 +269,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
goto err_res;
}

- disable_irq(dev->dec_irq);
mutex_init(&dev->dec_mutex);
mutex_init(&dev->dev_mutex);
spin_lock_init(&dev->irqlock);
diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
index d6438cb4eead..2a4136e6e867 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
@@ -311,6 +311,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
}

dev->enc_irq = platform_get_irq(pdev, 0);
+ irq_set_status_flags(dev->enc_irq, IRQ_NOAUTOEN);
ret = devm_request_irq(&pdev->dev, dev->enc_irq,
mtk_vcodec_enc_irq_handler,
0, pdev->name, dev);
@@ -321,7 +322,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
ret = -EINVAL;
goto err_res;
}
- disable_irq(dev->enc_irq);

if (dev->venc_pdata->has_lt_irq) {
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
@@ -333,6 +333,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[VENC_LT_SYS]);

dev->enc_lt_irq = platform_get_irq(pdev, 1);
+ irq_set_status_flags(dev->enc_lt_irq, IRQ_NOAUTOEN);
ret = devm_request_irq(&pdev->dev,
dev->enc_lt_irq,
mtk_vcodec_enc_lt_irq_handler,
@@ -344,7 +345,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
ret = -EINVAL;
goto err_res;
}
- disable_irq(dev->enc_lt_irq); /* VENC_LT */
}

mutex_init(&dev->enc_mutex);
--
2.28.0.297.g1956fa8f8d-goog
\
 
 \ /
  Last update: 2020-08-21 13:20    [W:0.024 / U:0.880 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site