reg = readl(®s->fifo_status);
        writel(reg, ®s->fifo_status);
 
-       /* clear ready bit */
-       setbits_le32(®s->xfer_status, SPI_XFER_STS_RDY);
-
        clrsetbits_le32(®s->command1, SPI_CMD1_CS_SW_VAL,
                        SPI_CMD1_RX_EN | SPI_CMD1_TX_EN | SPI_CMD1_LSBY_FE |
                        (slave->cs << SPI_CMD1_CS_SEL_SHIFT));
        /* handle data in 32-bit chunks */
        while (num_bytes > 0) {
                int bytes;
-               int is_read = 0;
                int tm, i;
 
                tmpdout = 0;
 
                num_bytes -= bytes;
 
+               /* clear ready bit */
+               setbits_le32(®s->xfer_status, SPI_XFER_STS_RDY);
+
                clrsetbits_le32(®s->command1,
                                SPI_CMD1_BIT_LEN_MASK << SPI_CMD1_BIT_LEN_SHIFT,
                                (bytes * 8 - 1) << SPI_CMD1_BIT_LEN_SHIFT);
                 * Wait for SPI transmit FIFO to empty, or to time out.
                 * The RX FIFO status will be read and cleared last
                 */
-               for (tm = 0, is_read = 0; tm < SPI_TIMEOUT; ++tm) {
+               for (tm = 0; tm < SPI_TIMEOUT; ++tm) {
                        u32 fifo_status, xfer_status;
 
-                       fifo_status = readl(®s->fifo_status);
-
-                       /* We can exit when we've had both RX and TX activity */
-                       if (is_read &&
-                           (fifo_status & SPI_FIFO_STS_TX_FIFO_EMPTY))
-                               break;
-
                        xfer_status = readl(®s->xfer_status);
                        if (!(xfer_status & SPI_XFER_STS_RDY))
                                continue;
 
+                       fifo_status = readl(®s->fifo_status);
                        if (fifo_status & SPI_FIFO_STS_ERR) {
                                debug("%s: got a fifo error: ", __func__);
                                if (fifo_status & SPI_FIFO_STS_TX_FIFO_OVF)
 
                        if (!(fifo_status & SPI_FIFO_STS_RX_FIFO_EMPTY)) {
                                tmpdin = readl(®s->rx_fifo);
-                               is_read = 1;
 
                                /* swap bytes read in */
                                if (din != NULL) {
                                        }
                                        din += bytes;
                                }
+
+                               /* We can exit when we've had both RX and TX */
+                               break;
                        }
                }