]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spi: davinci: Drop the preload of TX buffer before read/writes operations
authorBastien Curutchet <bastien.curutchet@bootlin.com>
Fri, 20 Sep 2024 08:28:06 +0000 (10:28 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 2 Oct 2024 19:38:37 +0000 (13:38 -0600)
A write to the TX buffer is performed before entering the loop to "avoid
clock starvation". This sometimes results in subsequent writes in
davinci_spi_xfer_data() to occur while the TXFULL bit is asserted,
leading to write failures.

Remove the preload of the TX buffer.

Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com>
drivers/spi/davinci_spi.c

index 82049872d057c27f0e996c970e2aafb19a7fa6e7..19bd06cf872d79429243d6dd7b456b4ac003acd8 100644 (file)
@@ -129,9 +129,6 @@ static int davinci_spi_read(struct davinci_spi_slave *ds, unsigned int len,
        while (readl(&ds->regs->buf) & SPIBUF_TXFULL_MASK)
                ;
 
-       /* preload the TX buffer to avoid clock starvation */
-       writel(data1_reg_val, &ds->regs->dat1);
-
        /* keep reading 1 byte until only 1 byte left */
        while ((len--) > 1)
                *rxp++ = davinci_spi_xfer_data(ds, data1_reg_val);
@@ -159,12 +156,6 @@ static int davinci_spi_write(struct davinci_spi_slave *ds, unsigned int len,
        while (readl(&ds->regs->buf) & SPIBUF_TXFULL_MASK)
                ;
 
-       /* preload the TX buffer to avoid clock starvation */
-       if (len > 2) {
-               writel(data1_reg_val | *txp++, &ds->regs->dat1);
-               len--;
-       }
-
        /* keep writing 1 byte until only 1 byte left */
        while ((len--) > 1)
                davinci_spi_xfer_data(ds, data1_reg_val | *txp++);