SMI driver fails because of low timeout values. Increasing the erase and write
timeouts to 3 seconds

Signed-off-by: Vipin Kumar <vipin.ku...@st.com>
---
 arch/arm/include/asm/arch-spear/spr_smi.h |    6 +++---
 drivers/mtd/spr_smi.c                     |    8 ++++----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/arm/include/asm/arch-spear/spr_smi.h 
b/arch/arm/include/asm/arch-spear/spr_smi.h
index 06df745..e2e5e8f 100644
--- a/arch/arm/include/asm/arch-spear/spr_smi.h
+++ b/arch/arm/include/asm/arch-spear/spr_smi.h
@@ -108,8 +108,8 @@ struct flash_dev {
        ushort sector_count;
 };
 
-#define SFLASH_PAGE_SIZE       0x100   /* flash page size */
-#define XFER_FINISH_TOUT       2       /* xfer finish timeout */
-#define WMODE_TOUT             2       /* write enable timeout */
+#define SFLASH_PAGE_SIZE       0x100           /* flash page size */
+#define XFER_FINISH_TOUT       (3 * CONFIG_SYS_HZ)
+#define WMODE_TOUT             (3 * CONFIG_SYS_HZ)
 
 #endif
diff --git a/drivers/mtd/spr_smi.c b/drivers/mtd/spr_smi.c
index 9a70a19..189ee6d 100644
--- a/drivers/mtd/spr_smi.c
+++ b/drivers/mtd/spr_smi.c
@@ -60,11 +60,11 @@ static struct flash_dev flash_ids[] = {
  */
 static void smi_wait_xfer_finish(int timeout)
 {
-       while (timeout--) {
+       do {
                if (readl(&smicntl->smi_sr) & TFF)
                        break;
                udelay(1000);
-       }
+       } while (timeout--);
 }
 
 /*
@@ -215,11 +215,11 @@ static int smi_write_enable(int bank)
        /* Restore the CTRL REG1 state */
        writel(ctrlreg1, &smicntl->smi_cr1);
 
-       while (timeout--) {
+       do {
                if (smi_read_sr(bank) & (1 << (bank + WM_SHIFT)))
                        break;
                udelay(1000);
-       }
+       } while (timeout--);
 
        if (timeout)
                return 0;
-- 
1.6.0.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to