[U-Boot] [PATCH] spi: fsl_qspi: Fix flash write issue on i.MX7ULP

Jagan Teki jagan at amarulasolutions.com
Mon Jul 15 07:35:43 UTC 2019


On Wed, Jul 10, 2019 at 3:34 PM Ye Li <ye.li at nxp.com> wrote:
>
> The page write sequence in spi-mem is changed with orignal spi-flash. When
> the max_write_size is set by driver, the orignal sequence is
>   1. WREN
>   2. write max_write_size data to flash
>   3. wait for WIP clean
>   4. back to #1 if having data remained in a page.
>
> The new sequence is:
>   1. WREN
>   2. write (max_write_size - command length) data to flash
>   3. back to #2 if having data remained in a page
>   4. wait for WIP clean
>
> i.MX7ULP has 64 bytes TX buffer (max_write_size), while other iMX chips
> have 512 bytes (page size is 256). So when adapt qspi with the new sequence,
> we have to check the WIP before each write on mx7ulp. Otherwise the WIP may set
> due to previous write is not completed by flash device, then cause current
> write failed.
>
> Signed-off-by: Ye Li <ye.li at nxp.com>
> ---
>  drivers/spi/fsl_qspi.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
>
> diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c
> index 1598c4f..e958b6a 100644
> --- a/drivers/spi/fsl_qspi.c
> +++ b/drivers/spi/fsl_qspi.c
> @@ -29,6 +29,7 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define OFFSET_BITS_MASK       GENMASK(23, 0)
>
>  #define FLASH_STATUS_WEL       0x02
> +#define FLASH_STATUS_WIP       0x01
>
>  /* SEQID */
>  #define SEQID_WREN             1
> @@ -634,6 +635,27 @@ static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
>                      QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
>         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
>
> +       if (TX_BUFFER_SIZE <= 256) {

Checking macro look odd here, since the driver is already moved to dm
try driver data on effected SoC compatible or similar.


More information about the U-Boot mailing list