In case of xspi work in busy condition, may send bytes failed.
once something wrong, spi controller did't work any more
My test found this situation appear in both of read/write process.
so when TX FIFO is full, add one byte delay before send data;
Signed-off-by: sxauwsk <[email protected]>
Signed-off-by: guojian <[email protected]>
Signed-off-by: wangshikai <[email protected]>
---
drivers/spi/spi-cadence.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
index 66ae055..9694042 100644
--- a/drivers/spi/spi-cadence.c
+++ b/drivers/spi/spi-cadence.c
@@ -315,9 +315,11 @@ static void cdns_spi_fill_tx_fifo(struct cdns_spi *xspi)
(xspi->tx_bytes > 0)) {
/* When xspi in busy condition, bytes may send failed,
- * caused communication failure so add one byte delay
+ * then spi control did't work thoroughly, add one byte delay
*/
- usleep_range(10, 20);
+ if (cdns_spi_read(xspi, CDNS_SPI_ISR_OFFSET) &
+ CDNS_SPI_IXR_TXFULL_MASK)
+ usleep_range(10, 20);
if (xspi->txbuf)
cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++);
--
1.7.9.5
On Mon, Apr 16, 2018 at 02:46:40PM +0800, sxauwsk wrote:
> In case of xspi work in busy condition, may send bytes failed.
> once something wrong, spi controller did't work any more
>
> My test found this situation appear in both of read/write process.
> so when TX FIFO is full, add one byte delay before send data;
This looks sensible but doesn't seem to apply against current code,
please check and resend.
> /* When xspi in busy condition, bytes may send failed,
> - * caused communication failure so add one byte delay
> + * then spi control did't work thoroughly, add one byte delay
> */
> - usleep_range(10, 20);
> + if (cdns_spi_read(xspi, CDNS_SPI_ISR_OFFSET) &
> + CDNS_SPI_IXR_TXFULL_MASK)
> + usleep_range(10, 20);
It looks like this may have been sent based on a previous version of
your patch, not against the driver as it is now.