
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.kumar@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