
nand torture currently works on exactly one nand block which is specified by giving the byteoffset to the beginning of the block.
Extend this by allowing for a second parameter specifying the byte offset to the last block to be tested.
e.g. ==> nand torture 1000000
NAND torture: device 0 offset 0x1000000 size 0x20000 passed 1, failed 0
==> nand torture 1000000 1040000
NAND torture: device 0 offset 0x1000000 size 0x20000 passed 2, failed 0
Signed-off-by: Max Krummenacher max.krummenacher@toradex.com ---
cmd/nand.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/cmd/nand.c b/cmd/nand.c index a6b67e2..615dbd5 100644 --- a/cmd/nand.c +++ b/cmd/nand.c @@ -646,6 +646,8 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#ifdef CONFIG_CMD_NAND_TORTURE if (strcmp(cmd, "torture") == 0) { + loff_t endoff; + unsigned failed = 0, passed = 0; if (argc < 3) goto usage;
@@ -653,13 +655,27 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) puts("Offset is not a valid number\n"); return 1; } - + endoff = off + nand->erasesize; + if (argc > 3) + if (!str2off(argv[3], &endoff)) { + puts("End is not a valid number\n"); + return 1; + } printf("\nNAND torture: device %d offset 0x%llx size 0x%x\n", dev, off, nand->erasesize); - ret = nand_torture(nand, off); - printf(" %s\n", ret ? "Failed" : "Passed"); + while (off < endoff) {
- return ret == 0 ? 0 : 1; + ret = nand_torture(nand, off); + if (ret) { + failed++; + printf(" off 0x%llx %s\n", off, "Failed"); + } else { + passed++; + } + off += nand->erasesize; + } + printf("passed %u, failed %u\n", passed, failed); + return failed == 0 ? 0 : 1; } #endif
@@ -775,6 +791,7 @@ static char nand_help_text[] = "nand dump[.oob] off - dump page\n" #ifdef CONFIG_CMD_NAND_TORTURE "nand torture off - torture block at offset\n" + "nand torture start end - torture blocks from start to end offset\n" #endif "nand scrub [-y] off size | scrub.part partition | scrub.chip\n" " really clean NAND erasing bad blocks (UNSAFE)\n"