diff options
author | Thomas Schaefer <thomas.schaefer@kontron.com> | 2019-07-01 17:37:34 +0200 |
---|---|---|
committer | Jagan Teki <jagan@amarulasolutions.com> | 2019-07-18 17:11:16 +0530 |
commit | c6d0c5eb30b5d677a6eeca5079a4e9a27630b530 (patch) | |
tree | b0217e1dea03e24506c19bbfedd9d78dcd6c1aff /drivers | |
parent | 535b1fdb8e5e857b9d2747e5f1a1501ec85f327c (diff) | |
download | u-boot-c6d0c5eb30b5d677a6eeca5079a4e9a27630b530.tar.gz |
drivers/spi: fsl_qspi: fix read timeout
During QSPI reads, current is_controller_busy function sporadically
fails with -ETIMEDOUT due to fixed number of 5 test loops. Using
timer functions to wait 1000 us instead will fix this.
Signed-off-by: Thomas Schaefer <thomas.schaefer@kontron.com>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/spi/fsl_qspi.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 1598c4f698..2c5937509f 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -152,7 +152,7 @@ static inline int is_controller_busy(const struct fsl_qspi_priv *priv) u32 val; const u32 mask = QSPI_SR_BUSY_MASK | QSPI_SR_AHB_ACC_MASK | QSPI_SR_IP_ACC_MASK; - unsigned int retry = 5; + unsigned long timeout = timer_get_us() + 1000; do { val = qspi_read32(priv->flags, &priv->regs->sr); @@ -160,10 +160,9 @@ static inline int is_controller_busy(const struct fsl_qspi_priv *priv) if ((~val & mask) == mask) return 0; - udelay(1); - } while (--retry); - - return -ETIMEDOUT; + if (timer_get_us() > timeout ) + return -ETIMEDOUT; + } while (1); } /* QSPI support swapping the flash read/write data |