[U-Boot] [PATCH] drivers/spi: fsl_qspi: fix controller busy check

On Mon, Jun 24, 2019 at 10:34 PM Fabio Estevam festevam@gmail.com wrote:
From: Thomas Schaefer thomas.schaefer@kontron.com
During QSPI reads, current is_busy_controller function sporadically fails with -ETIMEDOUT due to fixed number of 5 test loops. This patch fixes this by using the readl_poll_timeout function with 1000 us timeout.
This sounds like two different functionalities into one patch. better create a timeout fix in one patch and another patch to migrate read_poll.
I have split the patch into a series of 2 to differentiate functionality, as follows
Thomas

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 --- drivers/spi/fsl_qspi.c | 9 ++++----- 1 file 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

Hi Thomas,
On Wed, Jun 26, 2019 at 5:45 AM Thomas Schaefer thomas.schaefer@kontron.com wrote:
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
Your patch series submission did not go well.
It seems you used the same original thread to submit the two patches. They ended up with the same Subject:
https://lists.denx.de/pipermail/u-boot/2019-June/374188.html
and
https://lists.denx.de/pipermail/u-boot/2019-June/374189.html
Please resend, preferably via git send-email.

Use readl_poll_timeout instead of explicit calculation.
Signed-off-by: Thomas Schaefer thomas.schaefer@kontron.com --- drivers/spi/fsl_qspi.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 2c5937509f..41abe1996f 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -10,6 +10,7 @@ #include <spi.h> #include <asm/io.h> #include <linux/sizes.h> +#include <linux/iopoll.h> #include <dm.h> #include <errno.h> #include <watchdog.h> @@ -150,19 +151,13 @@ static void qspi_write32(u32 flags, u32 *addr, u32 val) 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 long timeout = timer_get_us() + 1000; + u32 mask = QSPI_SR_BUSY_MASK | QSPI_SR_AHB_ACC_MASK | + QSPI_SR_IP_ACC_MASK;
- do { - val = qspi_read32(priv->flags, &priv->regs->sr); + if (priv->flags & QSPI_FLAG_REGMAP_ENDIAN_BIG) + mask = (u32)cpu_to_be32(mask);
- if ((~val & mask) == mask) - return 0; - - if (timer_get_us() > timeout ) - return -ETIMEDOUT; - } while (1); + return readl_poll_timeout(&priv->regs->sr, val, !(val & mask), 1000); }
/* QSPI support swapping the flash read/write data

Dear Thomas,
-----Original Message----- From: U-Boot u-boot-bounces@lists.denx.de On Behalf Of Thomas Schaefer Sent: Wednesday, June 26, 2019 2:15 PM To: jagan@amarulasolutions.com; festevam@gmail.com Cc: trini@konsulko.com; Thomas Schäfer thomas.schaefer@kontron.com; u-boot@lists.denx.de Subject: [U-Boot] [PATCH 2/2] drivers/spi: fsl_qspi: fix controller busy check
Use readl_poll_timeout instead of explicit calculation.
Signed-off-by: Thomas Schaefer thomas.schaefer@kontron.com
Both of your patch has same subject. Please fix it.
Delegating Jagan for future review.
--pk

Hi Prabhakar,
I have already reworked this with different subjects and Jagan has applied patches to u-boot-spi/master on July, 1st.
See
c6d0c5eb30b5d677a6eeca5079a4e9a27630b530
and
733391e84bd9d67582b2ecd719b35585b70fe74c
Best regards, Thomas
-----Ursprüngliche Nachricht----- Von: Prabhakar Kushwaha prabhakar.kushwaha@nxp.com Gesendet: Mittwoch, 14. August 2019 08:53 An: Thomas Schaefer Thomas.Schaefer@kontron.com; jagan@amarulasolutions.com; festevam@gmail.com Cc: trini@konsulko.com; Thomas Schaefer Thomas.Schaefer@kontron.com; u-boot@lists.denx.de Betreff: RE: [U-Boot] [PATCH 2/2] drivers/spi: fsl_qspi: fix controller busy check
Dear Thomas,
-----Original Message----- From: U-Boot u-boot-bounces@lists.denx.de On Behalf Of Thomas Schaefer Sent: Wednesday, June 26, 2019 2:15 PM To: jagan@amarulasolutions.com; festevam@gmail.com Cc: trini@konsulko.com; Thomas Schäfer thomas.schaefer@kontron.com; u-boot@lists.denx.de Subject: [U-Boot] [PATCH 2/2] drivers/spi: fsl_qspi: fix controller busy check
Use readl_poll_timeout instead of explicit calculation.
Signed-off-by: Thomas Schaefer thomas.schaefer@kontron.com
Both of your patch has same subject. Please fix it.
Delegating Jagan for future review.
--pk
participants (4)
-
Fabio Estevam
-
Prabhakar Kushwaha
-
Thomas Schaefer
-
Thomas Schaefer