Skip to content

Commit a41b0ad

Browse files
fancerbroonie
authored andcommitted
spi: dw: Set transfer handler before unmasking the IRQs
It turns out the IRQs most like can be unmasked before the controller is enabled with no problematic consequences. The manual doesn't explicitly state that, but the examples perform the controller initialization procedure in that order. So the commit da8f589 ("spi: dw: Unmask IRQs after enabling the chip") hasn't been that required as I thought. But anyway setting the IRQs up after the chip enabling still worth adding since it has simplified the code a bit. The problem is that it has introduced a potential bug. The transfer handler pointer is now initialized after the IRQs are enabled. That may and eventually will cause an invalid or uninitialized callback invocation. Fix that just by performing the callback initialization before the IRQ unmask procedure. Fixes: da8f589 ("spi: dw: Unmask IRQs after enabling the chip") Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Link: https://lore.kernel.org/r/20201117094054.4696-1-Sergey.Semin@baikalelectronics.ru Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent ac9978f commit a41b0ad

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

drivers/spi/spi-dw-core.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,11 @@ static void dw_spi_irq_setup(struct dw_spi *dws)
357357
dw_writel(dws, DW_SPI_TXFTLR, level);
358358
dw_writel(dws, DW_SPI_RXFTLR, level - 1);
359359

360+
dws->transfer_handler = dw_spi_transfer_handler;
361+
360362
imask = SPI_INT_TXEI | SPI_INT_TXOI | SPI_INT_RXUI | SPI_INT_RXOI |
361363
SPI_INT_RXFI;
362364
spi_umask_intr(dws, imask);
363-
364-
dws->transfer_handler = dw_spi_transfer_handler;
365365
}
366366

367367
/*

0 commit comments

Comments
 (0)