Skip to content

Commit 782a895

Browse files
mhennerichglikely
authored andcommitted
spi/bfin_spi: handle error/status changes after data interrupts
The error interrupt on the BF537 SIC cannot be enabled on a per-peripheral basis. Once the error interrupt is enabled for one peripheral, it is automatically enabled for all. So in the Blackfin on-chip SPI driver, we need to clear out these known errors in the data interrupt once we've successfully finished processing all of the pending data. Signed-off-by: Michael Hennerich <[email protected]> Signed-off-by: Mike Frysinger <[email protected]> Signed-off-by: Grant Likely <[email protected]>
1 parent 2b9603a commit 782a895

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

drivers/spi/spi_bfin5xx.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,15 @@ static irqreturn_t bfin_spi_dma_irq_handler(int irq, void *dev_id)
504504
"in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
505505
dmastat, spistat);
506506

507+
if (drv_data->rx != NULL) {
508+
u16 cr = read_CTRL(drv_data);
509+
/* discard old RX data and clear RXS */
510+
bfin_spi_dummy_read(drv_data);
511+
write_CTRL(drv_data, cr & ~BIT_CTL_ENABLE); /* Disable SPI */
512+
write_CTRL(drv_data, cr & ~BIT_CTL_TIMOD); /* Restore State */
513+
write_STAT(drv_data, BIT_STAT_CLR); /* Clear Status */
514+
}
515+
507516
clear_dma_irqstat(drv_data->dma_channel);
508517

509518
/*

0 commit comments

Comments
 (0)