aboutsummaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2020-10-16 18:57:43 -0400
committerJagan Teki <jagan@amarulasolutions.com>2020-12-18 16:16:36 +0530
commitcaf110798ccca5d1fe7e75ae73397212262b9ee9 (patch)
tree3b331ce93028eddc8aa843576d548a9c8df4b633 /drivers/spi
parent25f068aa3e8aebda96a1a908a0bebd56f59374ca (diff)
downloadu-boot-caf110798ccca5d1fe7e75ae73397212262b9ee9.zip
u-boot-caf110798ccca5d1fe7e75ae73397212262b9ee9.tar.gz
u-boot-caf110798ccca5d1fe7e75ae73397212262b9ee9.tar.bz2
spi: dw: Fix driving MOSI low while recieving
The resting state of MOSI is high when nothing is driving it. If we drive it low while recieving, it looks like we are transmitting 0x00 instead of transmitting nothing. This can confuse slaves (like SD cards) which allow new commands to be sent over MOSI while they are returning data over MISO. The return of MOSI from 0 to 1 at the end of recieving a byte can look like a start bit and a transmission bit to an SD card. This will cause the card to become out-of-sync with the SPI device, as it thinks the device has already started transmitting two bytes of a new command. The mmc-spi driver will not detect the R1 response from the SD card, since it is sent too early, and offset by two bits. This patch fixes transfer errors when using SD cards with dw spi. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Jagan Teki <jagan@amarulasolutions.com> Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/designware_spi.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c
index 2559aac..7437217 100644
--- a/drivers/spi/designware_spi.c
+++ b/drivers/spi/designware_spi.c
@@ -322,7 +322,7 @@ static inline u32 rx_max(struct dw_spi_priv *priv)
static void dw_writer(struct dw_spi_priv *priv)
{
u32 max = tx_max(priv);
- u16 txw = 0;
+ u16 txw = 0xFFFF;
while (max--) {
/* Set the tx word if the transfer's original "tx" is not null */