All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] spi: bcm2835: Enable shared interrupt support
@ 2020-05-28 18:58 ` Nicolas Saenz Julienne
  0 siblings, 0 replies; 15+ messages in thread
From: Nicolas Saenz Julienne @ 2020-05-28 18:58 UTC (permalink / raw)
  To: Mark Brown, Florian Fainelli, Ray Jui, Scott Branden,
	bcm-kernel-feedback-list, Nicolas Saenz Julienne
  Cc: Martin Sperl, linux-spi, linux-rpi-kernel, linux-arm-kernel,
	linux-kernel

From: Martin Sperl <kernel@martin.sperl.org>

bcm2711, Rasberry Pi 4's SoC, shares one interrupt for multiple
instances of the bcm2835 SPI controller. So this enables shared
interrupt support for them.

The early bail out in the interrupt routine avoids messing with buffers
of transfers being done by other means. Otherwise, the driver can handle
receiving interrupts asserted by other controllers during an IRQ based
transfer.

Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
 drivers/spi/spi-bcm2835.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
index 11c235879bb7..ca1085c812f2 100644
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
@@ -379,6 +379,10 @@ static irqreturn_t bcm2835_spi_interrupt(int irq, void *dev_id)
 	if (bs->tx_len && cs & BCM2835_SPI_CS_DONE)
 		bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE);
 
+	/* check if we got interrupt enabled */
+	if (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_INTR))
+		return IRQ_NONE;
+
 	/* Read as many bytes as possible from FIFO */
 	bcm2835_rd_fifo(bs);
 	/* Write as many bytes as possible to FIFO */
@@ -1340,8 +1344,8 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
 	bcm2835_wr(bs, BCM2835_SPI_CS,
 		   BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
 
-	err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt, 0,
-			       dev_name(&pdev->dev), ctlr);
+	err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt,
+			       IRQF_SHARED, dev_name(&pdev->dev), ctlr);
 	if (err) {
 		dev_err(&pdev->dev, "could not request IRQ: %d\n", err);
 		goto out_dma_release;
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2020-05-29 18:16 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-28 18:58 [PATCH] spi: bcm2835: Enable shared interrupt support Nicolas Saenz Julienne
2020-05-28 18:58 ` Nicolas Saenz Julienne
2020-05-28 19:00 ` Florian Fainelli
2020-05-28 19:00   ` Florian Fainelli
2020-05-29 17:18 ` Mark Brown
2020-05-29 17:18   ` Mark Brown
2020-05-29 17:43 ` Lukas Wunner
2020-05-29 17:46   ` Florian Fainelli
2020-05-29 17:46     ` Florian Fainelli
2020-05-29 17:53     ` Lukas Wunner
2020-05-29 18:03       ` Florian Fainelli
2020-05-29 18:03         ` Florian Fainelli
2020-05-29 18:16         ` Lukas Wunner
2020-05-29 17:48   ` Mark Brown
2020-05-29 17:48     ` Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.