]> git.sur5r.net Git - u-boot/blobdiff - drivers/spi/fsl_qspi.c
spi: cadence_spi: Sync DT bindings with Linux
[u-boot] / drivers / spi / fsl_qspi.c
index 8753ed99f1bba19327c3b5a8c059a9a97f6d60fa..eed52c15c8147677b10362d4e44411ce66700067 100644 (file)
@@ -664,22 +664,20 @@ static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
        tx_size = (len > TX_BUFFER_SIZE) ?
                TX_BUFFER_SIZE : len;
 
-       size = tx_size / 4;
-       for (i = 0; i < size; i++) {
+       size = tx_size / 16;
+       /*
+        * There must be atleast 128bit data
+        * available in TX FIFO for any pop operation
+        */
+       if (tx_size % 16)
+               size++;
+       for (i = 0; i < size * 4; i++) {
                memcpy(&data, txbuf, 4);
                data = qspi_endian_xchg(data);
                qspi_write32(priv->flags, &regs->tbdr, data);
                txbuf += 4;
        }
 
-       size = tx_size % 4;
-       if (size) {
-               data = 0;
-               memcpy(&data, txbuf, size);
-               data = qspi_endian_xchg(data);
-               qspi_write32(priv->flags, &regs->tbdr, data);
-       }
-
        qspi_write32(priv->flags, &regs->ipcr,
                     (seqid << QSPI_IPCR_SEQID_SHIFT) | tx_size);
        while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
@@ -1013,11 +1011,11 @@ static int fsl_qspi_probe(struct udevice *bus)
        priv->num_chipselect = plat->num_chipselect;
 
        /* make sure controller is not busy anywhere */
-       ret = wait_for_bit(__func__, &priv->regs->sr,
-                          QSPI_SR_BUSY_MASK |
-                          QSPI_SR_AHB_ACC_MASK |
-                          QSPI_SR_IP_ACC_MASK,
-                          false, 100, false);
+       ret = wait_for_bit_le32(&priv->regs->sr,
+                               QSPI_SR_BUSY_MASK |
+                               QSPI_SR_AHB_ACC_MASK |
+                               QSPI_SR_IP_ACC_MASK,
+                               false, 100, false);
 
        if (ret) {
                debug("ERROR : The controller is busy\n");
@@ -1175,11 +1173,11 @@ static int fsl_qspi_claim_bus(struct udevice *dev)
        priv = dev_get_priv(bus);
 
        /* make sure controller is not busy anywhere */
-       ret = wait_for_bit(__func__, &priv->regs->sr,
-                          QSPI_SR_BUSY_MASK |
-                          QSPI_SR_AHB_ACC_MASK |
-                          QSPI_SR_IP_ACC_MASK,
-                          false, 100, false);
+       ret = wait_for_bit_le32(&priv->regs->sr,
+                               QSPI_SR_BUSY_MASK |
+                               QSPI_SR_AHB_ACC_MASK |
+                               QSPI_SR_IP_ACC_MASK,
+                               false, 100, false);
 
        if (ret) {
                debug("ERROR : The controller is busy\n");