]> git.sur5r.net Git - u-boot/commitdiff
spi: xilinx: Move timeout calculation out of the loop
authorMichal Simek <michal.simek@xilinx.com>
Wed, 22 Jan 2014 08:48:55 +0000 (09:48 +0100)
committerJagannadha Sutradharudu Teki <jaganna@xilinx.com>
Tue, 18 Feb 2014 16:54:28 +0000 (22:24 +0530)
Timeout calculation should be out of the data loop.
This patch increase spi bandwidth for 30%.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
drivers/spi/xilinx_spi.c

index 5ac01846e44cfd9f9468c7d3d906463037ab20fa..56d99d17c7d95f6b3474a3a56595e2be67398aa6 100644 (file)
@@ -149,6 +149,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
        const unsigned char *txp = dout;
        unsigned char *rxp = din;
        unsigned rxecount = 17; /* max. 16 elements in FIFO, leftover 1 */
+       unsigned global_timeout;
 
        debug("%s: bus:%i cs:%i bitlen:%i bytes:%i flags:%lx\n", __func__,
                slave->bus, slave->cs, bitlen, bytes, flags);
@@ -176,11 +177,12 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
        if (flags & SPI_XFER_BEGIN)
                spi_cs_activate(slave);
 
-       while (bytes--) {
-               unsigned timeout = /* at least 1usec or greater, leftover 1 */
-                       xilspi->freq > XILSPI_MAX_XFER_BITS * 1000000 ? 2 :
+       /* at least 1usec or greater, leftover 1 */
+       global_timeout = xilspi->freq > XILSPI_MAX_XFER_BITS * 1000000 ? 2 :
                        (XILSPI_MAX_XFER_BITS * 1000000 / xilspi->freq) + 1;
 
+       while (bytes--) {
+               unsigned timeout = global_timeout;
                /* get Tx element from data out buffer and count up */
                unsigned char d = txp ? *txp++ : CONFIG_XILINX_SPI_IDLE_VAL;
                debug("%s: tx:%x ", __func__, d);