From: Lad, Prabhakar Date: Sat, 30 Jul 2016 21:28:24 +0000 (+0100) Subject: spi: zynq_spi: Fix infinite looping while xfer X-Git-Tag: v2016.11-rc1~112^2~11 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=d2998286fc58e3ac6c75ed4d3a1e77b618bbf2ae;p=oweals%2Fu-boot.git spi: zynq_spi: Fix infinite looping while xfer During spi transfer, for example: sspi 1:1.0 8 ff the rx_len values will be: rx_len = 0 rx_len = 4294967295 This caused a busy looping during xfer, this patch fixes it by adding a check while reading the rx fifo Signed-off-by: Lad, Prabhakar Cc: Michal Simek Cc: Siva Durga Prasad Paladugu Reviewed-by: Jagan Teki --- diff --git a/drivers/spi/zynq_spi.c b/drivers/spi/zynq_spi.c index 09ae1be7e9..dd3de2792d 100644 --- a/drivers/spi/zynq_spi.c +++ b/drivers/spi/zynq_spi.c @@ -230,7 +230,7 @@ static int zynq_spi_xfer(struct udevice *dev, unsigned int bitlen, /* Read the data from RX FIFO */ status = readl(®s->isr); - while (status & ZYNQ_SPI_IXR_RXNEMPTY_MASK) { + while ((status & ZYNQ_SPI_IXR_RXNEMPTY_MASK) && rx_len) { buf = readl(®s->rxdr); if (rx_buf) *rx_buf++ = buf;