Skip to content
Snippets Groups Projects
Commit 8c5659a6 authored by Scott Wood's avatar Scott Wood
Browse files

nand commands: make only "dump" repeatable.


The dump command is made to increment its address on repeat,
as md does.  Other commands do not make sense to issue repeatedly,
and can be irritating when it happens accidentally, so don't.

Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
Tested-by: default avatarBen Gardiner <bengardiner@nanometrics.ca>
parent 30486322
No related branches found
No related tags found
No related merge requests found
...@@ -37,10 +37,16 @@ int find_dev_and_part(const char *id, struct mtd_device **dev, ...@@ -37,10 +37,16 @@ int find_dev_and_part(const char *id, struct mtd_device **dev,
u8 *part_num, struct part_info **part); u8 *part_num, struct part_info **part);
#endif #endif
static int nand_dump(nand_info_t *nand, ulong off, int only_oob) static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
{ {
int i; int i;
u_char *datbuf, *oobbuf, *p; u_char *datbuf, *oobbuf, *p;
static loff_t last;
if (repeat)
off = last + nand->writesize;
last = off;
datbuf = malloc(nand->writesize + nand->oobsize); datbuf = malloc(nand->writesize + nand->oobsize);
oobbuf = malloc(nand->oobsize); oobbuf = malloc(nand->oobsize);
...@@ -381,6 +387,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) ...@@ -381,6 +387,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
#endif #endif
const char *quiet_str = getenv("quiet"); const char *quiet_str = getenv("quiet");
int dev = nand_curr_device; int dev = nand_curr_device;
int repeat = flag & CMD_FLAG_REPEAT;
/* at least two arguments please */ /* at least two arguments please */
if (argc < 2) if (argc < 2)
...@@ -391,6 +398,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) ...@@ -391,6 +398,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
cmd = argv[1]; cmd = argv[1];
/* Only "dump" is repeatable. */
if (repeat && strcmp(cmd, "dump"))
return 0;
if (strcmp(cmd, "info") == 0) { if (strcmp(cmd, "info") == 0) {
putc('\n'); putc('\n');
...@@ -532,16 +543,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) ...@@ -532,16 +543,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
if (argc < 3) if (argc < 3)
goto usage; goto usage;
s = strchr(cmd, '.');
off = (int)simple_strtoul(argv[2], NULL, 16); off = (int)simple_strtoul(argv[2], NULL, 16);
ret = nand_dump(nand, off, !strcmp(&cmd[4], ".oob"), repeat);
if (s != NULL && strcmp(s, ".oob") == 0)
ret = nand_dump(nand, off, 1);
else
ret = nand_dump(nand, off, 0);
return ret == 0 ? 1 : 0; return ret == 0 ? 1 : 0;
} }
if (strncmp(cmd, "read", 4) == 0 || strncmp(cmd, "write", 5) == 0) { if (strncmp(cmd, "read", 4) == 0 || strncmp(cmd, "write", 5) == 0) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment