mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
nand: extend nand torture
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 size to be tested. e.g. ==> nand torture 1000000 NAND torture: device 0 offset 0x1000000 size 0x20000 (block size 0x20000) Passed: 1, failed: 0 ==> nand torture 1000000 40000 NAND torture: device 0 offset 0x1000000 size 0x40000 (block size 0x20000) Passed: 2, failed: 0 Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau.dev@gmail.com> [scottwood: fix usage to show size as optional, and add misssing braces] Signed-off-by: Scott Wood <oss@buserror.net>
This commit is contained in:
committed by
Scott Wood
parent
e1c29086d5
commit
1866be7d28
41
cmd/nand.c
41
cmd/nand.c
@@ -647,6 +647,9 @@ 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 int failed = 0, passed = 0;
|
||||
|
||||
if (argc < 3)
|
||||
goto usage;
|
||||
|
||||
@@ -655,12 +658,37 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("\nNAND torture: device %d offset 0x%llx size 0x%x\n",
|
||||
dev, off, mtd->erasesize);
|
||||
ret = nand_torture(mtd, off);
|
||||
printf(" %s\n", ret ? "Failed" : "Passed");
|
||||
size = mtd->erasesize;
|
||||
if (argc > 3) {
|
||||
if (!str2off(argv[3], &size)) {
|
||||
puts("Size is not a valid number\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return ret == 0 ? 0 : 1;
|
||||
endoff = off + size;
|
||||
if (endoff > mtd->size) {
|
||||
puts("Arguments beyond end of NAND\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
off = round_down(off, mtd->erasesize);
|
||||
endoff = round_up(endoff, mtd->erasesize);
|
||||
size = endoff - off;
|
||||
printf("\nNAND torture: device %d offset 0x%llx size 0x%llx (block size 0x%x)\n",
|
||||
dev, off, size, mtd->erasesize);
|
||||
while (off < endoff) {
|
||||
ret = nand_torture(mtd, off);
|
||||
if (ret) {
|
||||
failed++;
|
||||
printf(" block at 0x%llx failed\n", off);
|
||||
} else {
|
||||
passed++;
|
||||
}
|
||||
off += mtd->erasesize;
|
||||
}
|
||||
printf(" Passed: %u, failed: %u\n", passed, failed);
|
||||
return failed != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -775,7 +803,8 @@ static char nand_help_text[] =
|
||||
"nand bad - show bad blocks\n"
|
||||
"nand dump[.oob] off - dump page\n"
|
||||
#ifdef CONFIG_CMD_NAND_TORTURE
|
||||
"nand torture off - torture block at offset\n"
|
||||
"nand torture off - torture one block at offset\n"
|
||||
"nand torture off [size] - torture blocks from off to off+size\n"
|
||||
#endif
|
||||
"nand scrub [-y] off size | scrub.part partition | scrub.chip\n"
|
||||
" really clean NAND erasing bad blocks (UNSAFE)\n"
|
||||
|
Reference in New Issue
Block a user