mailbox: mtk-cmdq: Do not request irq until we are ready
authorRicardo Ribalda <ribalda@chromium.org>
Wed, 30 Nov 2022 12:58:22 +0000 (13:58 +0100)
committerJassi Brar <jaswinder.singh@linaro.org>
Mon, 19 Dec 2022 02:40:31 +0000 (20:40 -0600)
If the system comes from kexec() the peripheral might trigger an IRQ
befoe we are ready for it. Triggering a crash due to an access to
invalid memory.

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
drivers/mailbox/mtk-cmdq-mailbox.c

index a460ee2..b18d47e 100644 (file)
@@ -569,12 +569,6 @@ static int cmdq_probe(struct platform_device *pdev)
        }
 
        cmdq->irq_mask = GENMASK(cmdq->pdata->thread_nr - 1, 0);
-       err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED,
-                              "mtk_cmdq", cmdq);
-       if (err < 0) {
-               dev_err(dev, "failed to register ISR (%d)\n", err);
-               return err;
-       }
 
        dev_dbg(dev, "cmdq device: addr:0x%p, va:0x%p, irq:%d\n",
                dev, cmdq->base, cmdq->irq);
@@ -641,6 +635,13 @@ static int cmdq_probe(struct platform_device *pdev)
 
        cmdq_init(cmdq);
 
+       err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED,
+                              "mtk_cmdq", cmdq);
+       if (err < 0) {
+               dev_err(dev, "failed to register ISR (%d)\n", err);
+               return err;
+       }
+
        return 0;
 }