aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorThomas Chou <thomas@wytron.com.tw>2010-04-01 11:15:05 +0800
committerStefan Roese <sr@denx.de>2010-04-07 11:33:16 +0200
commit22d6c8faac4e9fa43232b0cf4da427ec14d72ad3 (patch)
tree05f17c5ebd0f49312484b0ae31031ecbff8fce4b /drivers
parentffa37fc98d71ef930bccd4e9eed37f6ce6b4d6af (diff)
downloadu-boot-22d6c8faac4e9fa43232b0cf4da427ec14d72ad3.zip
u-boot-22d6c8faac4e9fa43232b0cf4da427ec14d72ad3.tar.gz
u-boot-22d6c8faac4e9fa43232b0cf4da427ec14d72ad3.tar.bz2
cfi_flash: reset timer in flash status check
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mtd/cfi_flash.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index d0240f5..3267c5d 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -544,6 +544,7 @@ static int flash_status_check (flash_info_t * info, flash_sect_t sector,
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer (0);
while (flash_is_busy (info, sector)) {
if (get_timer (start) > tout) {
@@ -630,6 +631,7 @@ static int flash_status_poll(flash_info_t *info, void *src, void *dst,
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer(0);
while (1) {
switch (info->portwidth) {