OSDN Git Service

spi: bcm2835: Tear down DMA before turning off SPI controller
authorLukas Wunner <lukas@wunner.de>
Fri, 15 May 2020 15:58:04 +0000 (17:58 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 20 May 2020 17:16:41 +0000 (18:16 +0100)
On unbind of the BCM2835 SPI driver, the SPI controller is disabled
first and the DMA channels are terminated and torn down afterwards.

This seems backwards:  In the theoretical case that DMA is active,
it might try to fill the SPI FIFOs even after the controller has
been disabled.

Reverse the order, thereby mirroring what's done on ->probe().

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Link: https://lore.kernel.org/r/ac79f1e3d6fd9a1f5e0cb4008c43b98ea70be3c2.1589557526.git.lukas@wunner.de
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-bcm2835.c

index 06d2782..20d8581 100644 (file)
@@ -1380,14 +1380,14 @@ static int bcm2835_spi_remove(struct platform_device *pdev)
 
        spi_unregister_controller(ctlr);
 
+       bcm2835_dma_release(ctlr, bs);
+
        /* Clear FIFOs, and disable the HW block */
        bcm2835_wr(bs, BCM2835_SPI_CS,
                   BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
 
        clk_disable_unprepare(bs->clk);
 
-       bcm2835_dma_release(ctlr, bs);
-
        return 0;
 }