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