mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-25 21:24:21 +08:00
* Fix: watchdog timed out, if flash blank (0xFF) blocks
The current implementation of cfi_flash uses udelay to reset watchdog. If several blocks are blank (0xff filled) the watchdog timed out. The reason is, udelay is never called, if flash device is ready to fast. e.g. mw.w $(copy_addr) FFFF 10000;cp.b $(copy_addr) 10880000 20000 -> watchdog timed out mw.w $(copy_addr) 0000 10000;cp.b $(copy_addr) 10880000 20000 -> watchdog not timed out This patch adds an extra watchdog reset in front of flash ready check. Signed-off-by: Jens Scharsig (BuS Elektronik) <esw@bus-elektronik.de> Signed-off-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
137703b811
commit
a9f5faba6e
@ -40,6 +40,7 @@
|
||||
#include <asm/byteorder.h>
|
||||
#include <environment.h>
|
||||
#include <mtd/cfi_flash.h>
|
||||
#include <watchdog.h>
|
||||
|
||||
/*
|
||||
* This file implements a Common Flash Interface (CFI) driver for
|
||||
@ -577,6 +578,7 @@ static int flash_status_check (flash_info_t * info, flash_sect_t sector,
|
||||
reset_timer();
|
||||
#endif
|
||||
start = get_timer (0);
|
||||
WATCHDOG_RESET();
|
||||
while (flash_is_busy (info, sector)) {
|
||||
if (get_timer (start) > tout) {
|
||||
printf ("Flash %s timeout at address %lx data %lx\n",
|
||||
@ -668,6 +670,7 @@ static int flash_status_poll(flash_info_t *info, void *src, void *dst,
|
||||
reset_timer();
|
||||
#endif
|
||||
start = get_timer(0);
|
||||
WATCHDOG_RESET();
|
||||
while (1) {
|
||||
switch (info->portwidth) {
|
||||
case FLASH_CFI_8BIT:
|
||||
|
Loading…
Reference in New Issue
Block a user