Skip to content

Commit e3a2be3

Browse files
msperlbroonie
authored andcommitted
spi: bcm2835: fill FIFO before enabling interrupts to reduce interrupts/message
To reduce the number of interrupts/message we fill the FIFO before enabling interrupts - for short messages this reduces the interrupt count from 2 to 1 interrupt. There have been rare cases where short (<200ns) chip-select switches with native CS have been observed during such operation, this is why this optimization is only enabled for GPIO-CS. Signed-off-by: Martin Sperl <[email protected]> Tested-by: Martin Sperl <[email protected]> Signed-off-by: Mark Brown <[email protected]>
1 parent 1e4df62 commit e3a2be3

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

drivers/spi/spi-bcm2835.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,22 @@ static int bcm2835_spi_transfer_one(struct spi_master *master,
203203
bs->tx_len = tfr->len;
204204
bs->rx_len = tfr->len;
205205

206+
/* fill in fifo if we have gpio-cs
207+
* note that there have been rare events where the native-CS
208+
* flapped for <1us which may change the behaviour
209+
* with gpio-cs this does not happen, so it is implemented
210+
* only for this case
211+
*/
212+
if (gpio_is_valid(spi->cs_gpio)) {
213+
/* enable HW block, but without interrupts enabled
214+
* this would triggern an immediate interrupt
215+
*/
216+
bcm2835_wr(bs, BCM2835_SPI_CS,
217+
cs | BCM2835_SPI_CS_TA);
218+
/* fill in tx fifo as much as possible */
219+
bcm2835_wr_fifo(bs);
220+
}
221+
206222
/*
207223
* Enable the HW block. This will immediately trigger a DONE (TX
208224
* empty) interrupt, upon which we will fill the TX FIFO with the

0 commit comments

Comments
 (0)