Skip to content

Commit 58589b1

Browse files
Sean AndersonSasha Levin
authored andcommitted
spi: zynqmp-gqspi: Always acknowledge interrupts
[ Upstream commit 8978530 ] RXEMPTY can cause an IRQ, even though we may not do anything about it (such as if we are waiting for more received data). We must still handle these IRQs because we can tell they were caused by the device. Signed-off-by: Sean Anderson <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 4e4a37d commit 58589b1

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

drivers/spi/spi-zynqmp-gqspi.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,6 @@ static void zynqmp_process_dma_irq(struct zynqmp_qspi *xqspi)
799799
static irqreturn_t zynqmp_qspi_irq(int irq, void *dev_id)
800800
{
801801
struct zynqmp_qspi *xqspi = (struct zynqmp_qspi *)dev_id;
802-
irqreturn_t ret = IRQ_NONE;
803802
u32 status, mask, dma_status = 0;
804803

805804
status = zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST);
@@ -814,27 +813,24 @@ static irqreturn_t zynqmp_qspi_irq(int irq, void *dev_id)
814813
dma_status);
815814
}
816815

817-
if (mask & GQSPI_ISR_TXNOT_FULL_MASK) {
816+
if (!mask && !dma_status)
817+
return IRQ_NONE;
818+
819+
if (mask & GQSPI_ISR_TXNOT_FULL_MASK)
818820
zynqmp_qspi_filltxfifo(xqspi, GQSPI_TX_FIFO_FILL);
819-
ret = IRQ_HANDLED;
820-
}
821821

822-
if (dma_status & GQSPI_QSPIDMA_DST_I_STS_DONE_MASK) {
822+
if (dma_status & GQSPI_QSPIDMA_DST_I_STS_DONE_MASK)
823823
zynqmp_process_dma_irq(xqspi);
824-
ret = IRQ_HANDLED;
825-
} else if (!(mask & GQSPI_IER_RXEMPTY_MASK) &&
826-
(mask & GQSPI_IER_GENFIFOEMPTY_MASK)) {
824+
else if (!(mask & GQSPI_IER_RXEMPTY_MASK) &&
825+
(mask & GQSPI_IER_GENFIFOEMPTY_MASK))
827826
zynqmp_qspi_readrxfifo(xqspi, GQSPI_RX_FIFO_FILL);
828-
ret = IRQ_HANDLED;
829-
}
830827

831828
if (xqspi->bytes_to_receive == 0 && xqspi->bytes_to_transfer == 0 &&
832829
((status & GQSPI_IRQ_MASK) == GQSPI_IRQ_MASK)) {
833830
zynqmp_gqspi_write(xqspi, GQSPI_IDR_OFST, GQSPI_ISR_IDR_MASK);
834831
complete(&xqspi->data_completion);
835-
ret = IRQ_HANDLED;
836832
}
837-
return ret;
833+
return IRQ_HANDLED;
838834
}
839835

840836
/**

0 commit comments

Comments
 (0)