diff options
| author | Scott Wood <scottwood@freescale.com> | 2008-06-12 13:13:23 -0500 | 
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2008-08-12 11:31:27 -0500 | 
| commit | 984e03cdf1431bb593aeaa1b74c445d616f955d3 (patch) | |
| tree | 9ca147809a8266bd016050a0789d4b19913d7e40 | |
| parent | e1c3dbada349992875934575c97b328ab2cb33ca (diff) | |
| download | olio-uboot-2014.01-984e03cdf1431bb593aeaa1b74c445d616f955d3.tar.xz olio-uboot-2014.01-984e03cdf1431bb593aeaa1b74c445d616f955d3.zip | |
NAND: Always skip blocks on read/write/boot.
Use of the non-skipping versions was almost always (if not always)
an error, and no valid use case has been identified.
Signed-off-by: Scott Wood <scottwood@freescale.com>
| -rw-r--r-- | common/cmd_nand.c | 27 | ||||
| -rw-r--r-- | doc/README.nand | 35 | 
2 files changed, 25 insertions, 37 deletions
| diff --git a/common/cmd_nand.c b/common/cmd_nand.c index 710ba8f94..2c421e948 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -332,8 +332,8 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  			return 1;  		s = strchr(cmd, '.'); -		if (s != NULL && -		    (!strcmp(s, ".jffs2") || !strcmp(s, ".e") || !strcmp(s, ".i"))) { +		if (!s || !strcmp(s, ".jffs2") || +		    !strcmp(s, ".e") || !strcmp(s, ".i")) {  			if (read) {  				/* read */  				nand_read_options_t opts; @@ -372,10 +372,8 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  			else  				ret = nand->write_oob(nand, off, &ops);  		} else { -			if (read) -				ret = nand_read(nand, off, &size, (u_char *)addr); -			else -				ret = nand_write(nand, off, &size, (u_char *)addr); +			printf("Unknown nand command suffix '%s'.\n", s); +			return 1;  		}  		printf(" %d bytes %s: %s\n", size, @@ -492,10 +490,10 @@ U_BOOT_CMD(nand, 5, 1, do_nand,             "nand - NAND sub-system\n",             "info - show available NAND devices\n"             "nand device [dev] - show or set current device\n" -           "nand read[.jffs2] - addr off|partition size\n" -           "nand write[.jffs2] - addr off|partition size\n" +           "nand read - addr off|partition size\n" +           "nand write - addr off|partition size\n"             "    read/write 'size' bytes starting at offset 'off'\n" -           "    to/from memory address 'addr'\n" +           "    to/from memory address 'addr', skipping bad blocks.\n"             "nand erase [clean] [off size] - erase 'size' bytes from\n"             "    offset 'off' (entire device if not specified)\n"             "nand bad - show bad blocks\n" @@ -514,15 +512,17 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,  	char *ep, *s;  	size_t cnt;  	image_header_t *hdr; -	int jffs2 = 0;  #if defined(CONFIG_FIT)  	const void *fit_hdr = NULL;  #endif  	s = strchr(cmd, '.');  	if (s != NULL && -	    (!strcmp(s, ".jffs2") || !strcmp(s, ".e") || !strcmp(s, ".i"))) -		jffs2 = 1; +	    (strcmp(s, ".jffs2") && !strcmp(s, ".e") && !strcmp(s, ".i"))) { +		printf("Unknown nand load suffix '%s'\n", s); +		show_boot_progress(-53); +		return 1; +	}  	printf("\nLoading from %s, offset 0x%lx\n", nand->name, offset); @@ -559,6 +559,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);  	if (r) {  		puts("** Read error\n"); @@ -680,7 +681,7 @@ usage:  U_BOOT_CMD(nboot, 4, 1, do_nandboot,  	"nboot   - boot from NAND device\n", -	"[.jffs2] [partition] | [[[loadAddr] dev] offset]\n"); +	"[partition] | [[[loadAddr] dev] offset]\n");  #endif diff --git a/doc/README.nand b/doc/README.nand index 647a6b8e6..0ad5e18dd 100644 --- a/doc/README.nand +++ b/doc/README.nand @@ -57,14 +57,9 @@ Commands:        Print information about all of the NAND devices found.     nand read addr ofs|partition size -      Read `size' bytes from `ofs' in NAND flash to `addr'. If a page -      cannot be read because it is marked bad or an uncorrectable data -      error is found the command stops with an error. - -   nand read.jffs2 addr ofs|partition size -      Like `read', but the data for blocks that are marked bad is read as -      0xff. This gives a readable JFFS2 image that can be processed by -      the JFFS2 commands such as ls and fsload. +      Read `size' bytes from `ofs' in NAND flash to `addr'.  Blocks that +      are marked bad are skipped.  If a page cannot be read because an +      uncorrectable data error is found, the command stops with an error.     nand read.oob addr ofs|partition size        Read `size' bytes from the out-of-band data area corresponding to @@ -73,17 +68,15 @@ Commands:        for bad blocks or ECC errors.     nand write addr ofs|partition size -      Write `size' bytes from `addr' to `ofs' in NAND flash. If a page -      cannot be written because it is marked bad or the write fails the -      command stops with an error. +      Write `size' bytes from `addr' to `ofs' in NAND flash.  Blocks that +      are marked bad are skipped.  If a page cannot be read because an +      uncorrectable data error is found, the command stops with an error. -   nand write.jffs2 addr ofs|partition size -      Like `write', but blocks that are marked bad are skipped and the -      data is written to the next block instead. This allows writing -      a JFFS2 image, as long as the image is short enough to fit even -      after skipping the bad blocks. Compact images, such as those -      produced by mkfs.jffs2 should work well, but loading an image copied -      from another flash is going to be trouble if there are any bad blocks. +      As JFFS2 skips blocks similarly, this allows writing a JFFS2 image, +      as long as the image is short enough to fit even after skipping the +      bad blocks.  Compact images, such as those produced by mkfs.jffs2 +      should work well, but loading an image copied from another flash is +      going to be trouble if there are any bad blocks.     nand write.oob addr ofs|partition size        Write `size' bytes from `addr' to the out-of-band data area @@ -215,12 +208,6 @@ JFFS2 related commands:    using both the new code which is able to skip bad blocks    "nand erase clean" additionally writes JFFS2-cleanmarkers in the oob. -  "nand write.jffs2" -  like "nand write" but skip found bad eraseblocks - -  "nand read.jffs2" -  like "nand read" but skip found bad eraseblocks -  Miscellaneous and testing commands:    "markbad [offset]"    create an artificial bad block (for testing bad block handling) |