Skip to content

Commit 8978530

Browse files
Sean Andersonbroonie
authored andcommitted
spi: zynqmp-gqspi: Always acknowledge interrupts
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]>
1 parent 9b32c86 commit 8978530

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
@@ -806,7 +806,6 @@ static void zynqmp_process_dma_irq(struct zynqmp_qspi *xqspi)
806806
static irqreturn_t zynqmp_qspi_irq(int irq, void *dev_id)
807807
{
808808
struct zynqmp_qspi *xqspi = (struct zynqmp_qspi *)dev_id;
809-
irqreturn_t ret = IRQ_NONE;
810809
u32 status, mask, dma_status = 0;
811810

812811
status = zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST);
@@ -821,27 +820,24 @@ static irqreturn_t zynqmp_qspi_irq(int irq, void *dev_id)
821820
dma_status);
822821
}
823822

824-
if (mask & GQSPI_ISR_TXNOT_FULL_MASK) {
823+
if (!mask && !dma_status)
824+
return IRQ_NONE;
825+
826+
if (mask & GQSPI_ISR_TXNOT_FULL_MASK)
825827
zynqmp_qspi_filltxfifo(xqspi, GQSPI_TX_FIFO_FILL);
826-
ret = IRQ_HANDLED;
827-
}
828828

829-
if (dma_status & GQSPI_QSPIDMA_DST_I_STS_DONE_MASK) {
829+
if (dma_status & GQSPI_QSPIDMA_DST_I_STS_DONE_MASK)
830830
zynqmp_process_dma_irq(xqspi);
831-
ret = IRQ_HANDLED;
832-
} else if (!(mask & GQSPI_IER_RXEMPTY_MASK) &&
833-
(mask & GQSPI_IER_GENFIFOEMPTY_MASK)) {
831+
else if (!(mask & GQSPI_IER_RXEMPTY_MASK) &&
832+
(mask & GQSPI_IER_GENFIFOEMPTY_MASK))
834833
zynqmp_qspi_readrxfifo(xqspi, GQSPI_RX_FIFO_FILL);
835-
ret = IRQ_HANDLED;
836-
}
837834

838835
if (xqspi->bytes_to_receive == 0 && xqspi->bytes_to_transfer == 0 &&
839836
((status & GQSPI_IRQ_MASK) == GQSPI_IRQ_MASK)) {
840837
zynqmp_gqspi_write(xqspi, GQSPI_IDR_OFST, GQSPI_ISR_IDR_MASK);
841838
complete(&xqspi->data_completion);
842-
ret = IRQ_HANDLED;
843839
}
844-
return ret;
840+
return IRQ_HANDLED;
845841
}
846842

847843
/**

0 commit comments

Comments
 (0)