linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo()
@ 2018-04-09 11:16 sxauwsk
  2018-04-13 18:03 ` Mark Brown
  0 siblings, 1 reply; 5+ messages in thread
From: sxauwsk @ 2018-04-09 11:16 UTC (permalink / raw)
  To: Mark Brown; +Cc: linux-spi, linux-kernel, sxauwsk, guojian, wangshikai

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(+)

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
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread
[parent not found: <201804102112307962582@163.com>]
* [PATCH] spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo()
@ 2018-04-16 12:07 sxauwsk
  0 siblings, 0 replies; 5+ messages in thread
From: sxauwsk @ 2018-04-16 12:07 UTC (permalink / raw)
  To: Mark Brown; +Cc: linux-spi, linux-kernel, sxauwsk

In case of xspi work in busy condition, may send bytes failed then caused
communication failure. once something wrong, spi controller did't work any more.

My test found this situation appear in both of read/write operation.
so when TX FIFO is full, add one byte delay before send data.

Signed-off-by: sxauwsk <sxauwsk@163.com>
---
 drivers/spi/spi-cadence.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
index 5c9516a..9694042 100644
--- a/drivers/spi/spi-cadence.c
+++ b/drivers/spi/spi-cadence.c
@@ -313,6 +313,14 @@ 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,
+		 * then spi control did't work thoroughly, add one byte delay
+		 */
+		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++);
 		else
--
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread
* [PATCH] spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo()
@ 2018-04-16 20:01 sxauwsk
  0 siblings, 0 replies; 5+ messages in thread
From: sxauwsk @ 2018-04-16 20:01 UTC (permalink / raw)
  To: Mark Brown; +Cc: linux-spi, linux-kernel, sxauwsk

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 <sxauwsk@163.com>
---
 drivers/spi/spi-cadence.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
index 5c9516a..4a00163 100644
--- a/drivers/spi/spi-cadence.c
+++ b/drivers/spi/spi-cadence.c
@@ -313,6 +313,14 @@ 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,
+		 * then spi control did't work thoroughly, add one byte delay
+		 */
+		if (cdns_spi_read(xspi, CDNS_SPI_ISR) &
+		    CDNS_SPI_IXR_TXFULL)
+			usleep_range(10, 20);
+
 		if (xspi->txbuf)
 			cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++);
 		else
--
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-04-18  1:17 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-09 11:16 [PATCH] spi: cadence: Add usleep_range() for cdns_spi_fill_tx_fifo() sxauwsk
2018-04-13 18:03 ` Mark Brown
     [not found] <201804102112307962582@163.com>
2018-04-10 13:49 ` Mark Brown
2018-04-16 12:07 sxauwsk
2018-04-16 20:01 sxauwsk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).