]> Git Repo - u-boot.git/commitdiff
nand commands: make only "dump" repeatable.
authorScott Wood <[email protected]>
Wed, 25 Aug 2010 20:24:01 +0000 (15:24 -0500)
committerScott Wood <[email protected]>
Mon, 11 Oct 2010 20:10:26 +0000 (15:10 -0500)
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: Scott Wood <[email protected]>
Tested-by: Ben Gardiner <[email protected]>
common/cmd_nand.c

index dcccc197954fe5621ae8473b7eb56254647f2009..8a812379a6e3295ba5765c0c7dfbf146aa006bc0 100644 (file)
@@ -37,10 +37,16 @@ int find_dev_and_part(const char *id, struct mtd_device **dev,
                      u8 *part_num, struct part_info **part);
 #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;
        u_char *datbuf, *oobbuf, *p;
+       static loff_t last;
+
+       if (repeat)
+               off = last + nand->writesize;
+
+       last = off;
 
        datbuf = malloc(nand->writesize + nand->oobsize);
        oobbuf = malloc(nand->oobsize);
@@ -381,6 +387,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 #endif
        const char *quiet_str = getenv("quiet");
        int dev = nand_curr_device;
+       int repeat = flag & CMD_FLAG_REPEAT;
 
        /* at least two arguments please */
        if (argc < 2)
@@ -391,6 +398,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 
        cmd = argv[1];
 
+       /* Only "dump" is repeatable. */
+       if (repeat && strcmp(cmd, "dump"))
+               return 0;
+
        if (strcmp(cmd, "info") == 0) {
 
                putc('\n');
@@ -532,16 +543,10 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
                if (argc < 3)
                        goto usage;
 
-               s = strchr(cmd, '.');
                off = (int)simple_strtoul(argv[2], NULL, 16);
-
-               if (s != NULL && strcmp(s, ".oob") == 0)
-                       ret = nand_dump(nand, off, 1);
-               else
-                       ret = nand_dump(nand, off, 0);
+               ret = nand_dump(nand, off, !strcmp(&cmd[4], ".oob"), repeat);
 
                return ret == 0 ? 1 : 0;
-
        }
 
        if (strncmp(cmd, "read", 4) == 0 || strncmp(cmd, "write", 5) == 0) {
This page took 0.038058 seconds and 4 git commands to generate.