[PATCH v5 23/33] spi: dw: Properly set rx_end when not recieving

Sean Anderson
2020-02-28T21:05:41Z

The difference between rx and rx_end is used by tx_max when calculating how
much to write. If we aren't reading anything, this could cause us to let
the tx fifo bottom out.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
---

Changes in v5:
- New

drivers/spi/designware_spi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c
index 613eb0d0e6..b80e99ee7f 100644
--- a/drivers/spi/designware_spi.c
+++ b/drivers/spi/designware_spi.c
@@ -427,7 +427,8 @@ static int dw_spi_xfer(struct udevice *dev, unsigned int bitlen,
priv->tx = (void *)tx;
priv->tx_end = priv->tx + priv->len;
priv->rx = rx;
- priv->rx_end = priv->rx + priv->len;
+ /* If we aren't recieving, rx_end needs to be valid for tx_max() */
+ priv->rx_end = priv->rx + (rx ? priv->len : 0);

/* Disable controller before writing control registers */
spi_enable_chip(priv, 0);
--
2.25.0