spi: dw: Unmask IRQs after enabling the chip
authorSerge Semin <Sergey.Semin@baikalelectronics.ru>
Wed, 7 Oct 2020 23:55:00 +0000 (02:55 +0300)
committerMark Brown <broonie@kernel.org>
Thu, 8 Oct 2020 22:00:14 +0000 (23:00 +0100)
It's theoretically erroneous to enable IRQ before the chip is turned on.
If IRQ handler gets executed before the chip is enabled, then any data
written to the Tx FIFO will be just ignored.

I say "theoretically" because we haven't noticed any problem with that,
but let's fix it anyway just in case...

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Link: https://lore.kernel.org/r/20201007235511.4935-12-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-dw-core.c

index e7ffcfff6594f1c65335386e83d13ab3c47d63ee..89e5428c8de672df26bcd9db259bdda7ba170738 100644 (file)
@@ -376,8 +376,6 @@ static int dw_spi_transfer_one(struct spi_controller *master,
                        spi_enable_chip(dws, 1);
                        return ret;
                }
-       } else {
-               dw_spi_irq_setup(dws);
        }
 
        spi_enable_chip(dws, 1);
@@ -385,6 +383,8 @@ static int dw_spi_transfer_one(struct spi_controller *master,
        if (dws->dma_mapped)
                return dws->dma_ops->dma_transfer(dws, transfer);
 
+       dw_spi_irq_setup(dws);
+
        return 1;
 }