diff mbox

spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo()

Message ID 1523272610-49116-1-git-send-email-sxauwsk@163.com (mailing list archive)
State New, archived
Headers show

Commit Message

sxauwsk@163.com April 9, 2018, 11:16 a.m. UTC
In case of xspi work in busy condition, may send bytes failed.
Add one bytes delay

Signed-off-by: sxauwsk <sxauwsk@163.com>
Signed-off-by: guojian <guojian@innoinstrument.net>
Signed-off-by: wangshikai <wangshikai@inno-instrument.cn>
---
 drivers/spi/spi-cadence.c |    6 ++++++
 1 file changed, 6 insertions(+)

Comments

Mark Brown April 13, 2018, 6:03 p.m. UTC | #1
On Mon, Apr 09, 2018 at 07:16:50PM +0800, sxauwsk wrote:
> In case of xspi work in busy condition, may send bytes failed.
> Add one bytes delay

>  	while ((trans_cnt < CDNS_SPI_FIFO_DEPTH) &&
>  	       (xspi->tx_bytes > 0)) {
> +
> +		/* When xspi in busy condition, bytes may send failed,
> +		 * caused communication failure so add one byte delay
> +		 */
> +		usleep_range(10, 20);
> +
>  		if (xspi->txbuf)
>  			cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++);

This looks like it adds a byte of delay on every read/write - that
seems like a lot of overhead for something that sounds like it's
probably only an issue when the FIFO is full?  Do we need to do this for
every operation, and is it needed for read or is it just write?
diff mbox

Patch

diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
index 5c9516a..66ae055 100644
--- a/drivers/spi/spi-cadence.c
+++ b/drivers/spi/spi-cadence.c
@@ -313,6 +313,12 @@  static void cdns_spi_fill_tx_fifo(struct cdns_spi *xspi)
 
 	while ((trans_cnt < CDNS_SPI_FIFO_DEPTH) &&
 	       (xspi->tx_bytes > 0)) {
+
+		/* When xspi in busy condition, bytes may send failed,
+		 * caused communication failure so add one byte delay
+		 */
+		usleep_range(10, 20);
+
 		if (xspi->txbuf)
 			cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++);
 		else