Skip to content

Commit b24cded

Browse files
ribaldabroonie
authored andcommitted
spi: mediatek: Enable irq before the spi registration
If the irq is enabled after the spi si registered, there can be a race with the initialization of the devices on the spi bus. Eg: mtk-spi 1100a000.spi: spi-mem transfer timeout spi-nor: probe of spi0.0 failed with error -110 Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010 ... Call trace: mtk_spi_can_dma+0x0/0x2c Fixes: c6f7874 ("spi: mediatek: Enable irq when pdata is ready") Reported-by: Daniel Golle <[email protected]> Signed-off-by: Ricardo Ribalda <[email protected]> Tested-by: Daniel Golle <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 1b929c0 commit b24cded

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

drivers/spi/spi-mt65xx.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,11 @@ static int mtk_spi_probe(struct platform_device *pdev)
12531253
dev_notice(dev, "SPI dma_set_mask(%d) failed, ret:%d\n",
12541254
addr_bits, ret);
12551255

1256+
ret = devm_request_irq(dev, irq, mtk_spi_interrupt,
1257+
IRQF_TRIGGER_NONE, dev_name(dev), master);
1258+
if (ret)
1259+
return dev_err_probe(dev, ret, "failed to register irq\n");
1260+
12561261
pm_runtime_enable(dev);
12571262

12581263
ret = devm_spi_register_master(dev, master);
@@ -1261,13 +1266,6 @@ static int mtk_spi_probe(struct platform_device *pdev)
12611266
return dev_err_probe(dev, ret, "failed to register master\n");
12621267
}
12631268

1264-
ret = devm_request_irq(dev, irq, mtk_spi_interrupt,
1265-
IRQF_TRIGGER_NONE, dev_name(dev), master);
1266-
if (ret) {
1267-
pm_runtime_disable(dev);
1268-
return dev_err_probe(dev, ret, "failed to register irq\n");
1269-
}
1270-
12711269
return 0;
12721270
}
12731271

0 commit comments

Comments
 (0)