Skip to contentSkip to conversation

* Fix: watchdog timed out, if flash blank (0xFF) blocks

PATCH New Jens Scharsig (BuS Elektronik) 2 participants 2 messages Jan 27, 2012 – Feb 9, 2012 Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 * 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.

---
 drivers/mtd/cfi_flash.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
drivers/mtd/cfi_flash.c +3 -0
index 5494bcf..722c3fc 100644
@@ -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:
Signature · 1 line
1.7.3.4
#1 lore raw

PATCH 1/1 * Fix: watchdog timed out, if flash blank (0xFF) blocks

Quoted 13 lines · On Friday 27 January 2012 09:29:53 Jens Scharsig (BuS Elektronik) wrote:

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
Quoted 3 lines

This patch adds an extra watchdog reset in front of flash ready check.

Applied to u-boot-cfi-flash. Thanks.

Best regards,
Stefan

--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de