diff options
author | Wolfgang Denk <wd@denx.de> | 2009-05-24 17:34:33 +0200 |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2009-07-07 17:58:05 -0500 |
commit | 8360b66bac9567701027a0087274d0c9b2fe8d6b (patch) | |
tree | 6278f88b25ecfd5b12eb9a68e93d8bd2dd77d8f4 /common/cmd_nand.c | |
parent | cd84423a09f3a08029fe41c1db96168debd0b51f (diff) |
nand/onenand: Fix missing argument checking for "markbad" command
The "nand markbad" and "onenand markbad" commands did not check if an
argument was passed; if this was forgotten, no error was raised but
block 0 was marked as bad.
While fixing this bug, clean up the code a bit and allow to pass more
than one block address, thus allowing to mark several blocks as bad
in a single command invocation.
Signed-off-by: Wolfgang Denk <wd@denx.de>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'common/cmd_nand.c')
-rw-r--r-- | common/cmd_nand.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/common/cmd_nand.c b/common/cmd_nand.c index 94514160b5..2f70521226 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -414,18 +414,29 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) } if (strcmp(cmd, "markbad") == 0) { - addr = (ulong)simple_strtoul(argv[2], NULL, 16); + argc -= 2; + argv += 2; - int ret = nand->block_markbad(nand, addr); - if (ret == 0) { - printf("block 0x%08lx successfully marked as bad\n", - (ulong) addr); - return 0; - } else { - printf("block 0x%08lx NOT marked as bad! ERROR %d\n", - (ulong) addr, ret); + if (argc <= 0) + goto usage; + + while (argc > 0) { + addr = simple_strtoul(*argv, NULL, 16); + + if (nand->block_markbad(nand, addr)) { + printf("block 0x%08lx NOT marked " + "as bad! ERROR %d\n", + addr, ret); + ret = 1; + } else { + printf("block 0x%08lx successfully " + "marked as bad\n", + addr); + } + --argc; + ++argv; } - return 1; + return ret; } if (strcmp(cmd, "biterr") == 0) { |