[U-Boot] [PATCH] Make nboot skip bad blocks

Ladislav Michl ladis at linux-mips.org
Fri Mar 13 14:38:19 CET 2009


Hi,

nboot command currently does not skip bad blocks and gives read error when
loading image stored over bad block. With patch applied, nboot works as
expected:

# nand bad
Device 0 bad blocks:
  00780000
  014a0000
  02000000
  02cc0000
  04aa0000

# boot
Loading from NAND 128MiB 3,3V 8-bit, offset 0x2c00000
   Image Name:   Linux-2.6.22-omap1
   Created:      2008-11-20  23:44:32 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1052520 Bytes =  1 MB
   Load Address: 10008000
   Entry Point:  10008000
Skipping bad block 0x02cc0000
Automatic boot of image at addr 0x10400000 ...
...

CHANGELOG
* nboot: skip bad block when loading image from NAND

Signed-off-by: Ladislav Michl <ladis at linux-mips.org>

diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index 11f9096..f915fb6 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -511,7 +511,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
 	printf("\nLoading from %s, offset 0x%lx\n", nand->name, offset);
 
 	cnt = nand->writesize;
-	r = nand_read(nand, offset, &cnt, (u_char *) addr);
+	r = nand_read_skip_bad(nand, offset, &cnt, (u_char *) addr);
 	if (r) {
 		puts("** Read error\n");
 		show_boot_progress (-56);
@@ -543,8 +543,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
 	}
 	show_boot_progress (57);
 
-	/* FIXME: skip bad blocks */
-	r = nand_read(nand, offset, &cnt, (u_char *) addr);
+	r = nand_read_skip_bad(nand, offset, &cnt, (u_char *) addr);
 	if (r) {
 		puts("** Read error\n");
 		show_boot_progress (-58);



More information about the U-Boot mailing list