[PATCH v1 1/2] spi: stm32_qspi: Always check SR_TCF flags in stm32_qspi_wait_cmd()
Patrick DELAUNAY
patrick.delaunay at foss.st.com
Tue May 17 10:23:55 CEST 2022
Hi Patrice,
On 5/12/22 09:17, Patrice Chotard wrote:
> Currently, SR_TCF flag is checked in case there is data, this criteria
> is not correct.
>
> SR_TCF flags is set when programmed number of bytes have been transferred
> to the memory device ("bytes" comprised command and data send to the
> SPI device).
> So even if there is no data, we must check SR_TCF flag.
>
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
>
> drivers/spi/stm32_qspi.c | 23 +++++++++++------------
> 1 file changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/spi/stm32_qspi.c b/drivers/spi/stm32_qspi.c
> index 8f4aabc3d1..3c8faecb54 100644
> --- a/drivers/spi/stm32_qspi.c
> +++ b/drivers/spi/stm32_qspi.c
> @@ -150,20 +150,19 @@ static int _stm32_qspi_wait_cmd(struct stm32_qspi_priv *priv,
> u32 sr;
> int ret = 0;
>
> - if (op->data.nbytes) {
> - ret = readl_poll_timeout(&priv->regs->sr, sr,
> - sr & STM32_QSPI_SR_TCF,
> - STM32_QSPI_CMD_TIMEOUT_US);
> - if (ret) {
> - log_err("cmd timeout (stat:%#x)\n", sr);
> - } else if (readl(&priv->regs->sr) & STM32_QSPI_SR_TEF) {
> - log_err("transfer error (stat:%#x)\n", sr);
> - ret = -EIO;
> - }
> - /* clear flags */
> - writel(STM32_QSPI_FCR_CTCF | STM32_QSPI_FCR_CTEF, &priv->regs->fcr);
> + ret = readl_poll_timeout(&priv->regs->sr, sr,
> + sr & STM32_QSPI_SR_TCF,
> + STM32_QSPI_CMD_TIMEOUT_US);
> + if (ret) {
> + log_err("cmd timeout (stat:%#x)\n", sr);
> + } else if (readl(&priv->regs->sr) & STM32_QSPI_SR_TEF) {
> + log_err("transfer error (stat:%#x)\n", sr);
> + ret = -EIO;
> }
>
> + /* clear flags */
> + writel(STM32_QSPI_FCR_CTCF | STM32_QSPI_FCR_CTEF, &priv->regs->fcr);
> +
> if (!ret)
> ret = _stm32_qspi_wait_for_not_busy(priv);
>
Reviewed-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
Thanks
Patrick
More information about the U-Boot
mailing list