After switched to spi-mem, the data format passed by xfer is changed
for erase. The address of erase is moved to data phase in SPI_XFER_END.
Update the driver to fix the erase issue

Signed-off-by: Ye Li <ye...@nxp.com>
---
 drivers/spi/fsl_qspi.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c
index 8845986..13cf0e9 100644
--- a/drivers/spi/fsl_qspi.c
+++ b/drivers/spi/fsl_qspi.c
@@ -785,6 +785,19 @@ int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int 
bitlen,
                }
 
                if (flags == SPI_XFER_END) {
+                       if ((priv->cur_seqid == QSPI_CMD_SE) ||
+                               (priv->cur_seqid == QSPI_CMD_BE_4K)) {
+                               int i;
+                               txbuf = *(u8 *)dout;
+                               for (i = 1; i < bytes; i++) {
+                                       txbuf <<= 8;
+                                       txbuf |= *(((u8 *)dout) + i);
+                               }
+
+                               priv->sf_addr = txbuf;
+                               qspi_op_erase(priv);
+                               return 0;
+                       }
                        priv->sf_addr = wr_sfaddr;
                        qspi_op_write(priv, (u8 *)dout, bytes);
                        return 0;
@@ -793,10 +806,6 @@ int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int 
bitlen,
                if (priv->cur_seqid == QSPI_CMD_FAST_READ ||
                    priv->cur_seqid == QSPI_CMD_RDAR) {
                        priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
-               } else if ((priv->cur_seqid == QSPI_CMD_SE) ||
-                          (priv->cur_seqid == QSPI_CMD_BE_4K)) {
-                       priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
-                       qspi_op_erase(priv);
                } else if (priv->cur_seqid == QSPI_CMD_PP ||
                           priv->cur_seqid == QSPI_CMD_WRAR) {
                        wr_sfaddr = swab32(txbuf) & OFFSET_BITS_MASK;
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to