On 11/7/20 3:13 AM, Damien Le Moal wrote: > Fix for the Synopsis DesignWare SPI mmio driver taken from the work > by Sean Anderson for the U-Boot project. Sean comments: > > 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@xxxxxxxxx> > Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx> > --- > drivers/spi/spi-dw-core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c > index 841c85247f01..c2ef1d8d46d5 100644 > --- a/drivers/spi/spi-dw-core.c > +++ b/drivers/spi/spi-dw-core.c > @@ -137,7 +137,7 @@ static inline u32 rx_max(struct dw_spi *dws) > static void dw_writer(struct dw_spi *dws) > { > u32 max = tx_max(dws); > - u16 txw = 0; > + u16 txw = 0xffff; > > while (max--) { > if (dws->tx) { > Reviewed-by: Sean Anderson <seanga2@xxxxxxxxx>