2018-04-16 07:28:20

by [email protected]

[permalink] [raw]
Subject: [PATCH] [PATCH v1] spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo()

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




2018-04-16 12:33:22

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] [PATCH v1] spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo()

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.


Attachments:
(No filename) (891.00 B)
signature.asc (499.00 B)
Download all attachments