summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ffa37fc)
raw | patch | inline | side by side (parent: ffa37fc)
author | Thomas Chou <thomas@wytron.com.tw> | |
Thu, 1 Apr 2010 03:15:05 +0000 (11:15 +0800) | ||
committer | Stefan Roese <sr@denx.de> | |
Wed, 7 Apr 2010 09:33:16 +0000 (11:33 +0200) |
This patch adds reset_timer() before the flash status check
waiting loop.
Since the timer is basically running asynchronous to the cfi
code, it is possible to call get_timer(0), then only a few
_SYSCLK_ cycles later an interrupt is generated. This causes
timeout even though much less time has elapsed. So the timer
period registers should be reset before get_timer(0) is
called.
There is similar usage in nand_base.c.
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Signed-off-by: Stefan Roese <sr@denx.de>
waiting loop.
Since the timer is basically running asynchronous to the cfi
code, it is possible to call get_timer(0), then only a few
_SYSCLK_ cycles later an interrupt is generated. This causes
timeout even though much less time has elapsed. So the timer
period registers should be reset before get_timer(0) is
called.
There is similar usage in nand_base.c.
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Signed-off-by: Stefan Roese <sr@denx.de>
drivers/mtd/cfi_flash.c | patch | blob | history |
index d0240f55d4996fe8148b9950dd2eb47ca85b845d..3267c5de36d1b12a190f93f9a3048ded598f84aa 100644 (file)
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer (0);
while (flash_is_busy (info, sector)) {
if (get_timer (start) > tout) {
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer(0);
while (1) {
switch (info->portwidth) {