On 3/29/2010 3:21 AM, Tom wrote: > Vipin KUMAR wrote: >> SMI driver fails because of low timeout values. Increasing the erase >> and write >> timeouts to 3 seconds > > This is a huge timeout change. > 2ms to 3000ms. > If something goes wrong, it will seem like the board is hung. > Is this ok? >
2ms timeout itself was a mistake. 3 sec is OK. Offcourse, 3 secs are required only when something goes wrong >> >> Signed-off-by: Vipin Kumar <vipin.ku...@st.com> >> --- >> drivers/mtd/spr_smi.c | 8 ++++---- >> include/asm-arm/arch-spear/spr_smi.h | 6 +++--- >> 2 files changed, 7 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/mtd/spr_smi.c b/drivers/mtd/spr_smi.c >> index 9a70a19..189ee6d 100755 >> --- 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--); > > This changes the function to wait at least 1ms even if timeout == 0. > Why was the original logic changed? > Earlier a value of 2 was reading the status register only once. This I felt is more appropriate since the status register is read every ms and at least once. >> } >> >> /* >> @@ -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; >> diff --git a/include/asm-arm/arch-spear/spr_smi.h >> b/include/asm-arm/arch-spear/spr_smi.h >> index 06df745..e2e5e8f 100755 >> --- a/include/asm-arm/arch-spear/spr_smi.h >> +++ b/include/asm-arm/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 > > Tom > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot