]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - common/cmd_nand.c
NAND: add the ability to directly write yaffs image
[people/ms/u-boot.git] / common / cmd_nand.c
index c547a683f40e1f0b88adf556814a87572b609245..7bd37de78dee9e717f4c521c2eeaa51fe2825de3 100644 (file)
@@ -574,7 +574,15 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
                                                         (u_char *)addr);
                        else
                                ret = nand_write_skip_bad(nand, off, &rwsize,
-                                                         (u_char *)addr);
+                                                         (u_char *)addr, 0);
+#ifdef CONFIG_CMD_NAND_YAFFS
+               } else if (!strcmp(s, ".yaffs")) {
+                       if (read) {
+                               printf("Unknown nand command suffix '%s'.\n", s);
+                               return 1;
+                       }
+                       ret = nand_write_skip_bad(nand, off, &rwsize, (u_char *)addr, 1);
+#endif
                } else if (!strcmp(s, ".oob")) {
                        /* out-of-band data */
                        mtd_oob_ops_t ops = {
@@ -680,6 +688,11 @@ U_BOOT_CMD(
        "nand write - addr off|partition size\n"
        "    read/write 'size' bytes starting at offset 'off'\n"
        "    to/from memory address 'addr', skipping bad blocks.\n"
+#ifdef CONFIG_CMD_NAND_YAFFS
+       "nand write.yaffs - addr off|partition size\n"
+       "    write 'size' bytes starting at offset 'off' with yaffs format\n"
+       "    from memory address 'addr', skipping bad blocks.\n"
+#endif
        "nand erase[.spread] [clean] [off [size]] - erase 'size' bytes "
        "from offset 'off'\n"
        "    With '.spread', erase enough for given file size, otherwise,\n"
@@ -711,7 +724,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
                           ulong offset, ulong addr, char *cmd)
 {
        int r;
-       char *s;
+       char *ep, *s;
        size_t cnt;
        image_header_t *hdr;
 #if defined(CONFIG_FIT)
@@ -787,7 +800,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
        load_addr = addr;
 
        /* Check if we should attempt an auto-start */
-       if (getenv_yesno("autostart")) {
+       if (((ep = getenv("autostart")) != NULL) && (strcmp(ep, "yes") == 0)) {
                char *local_args[2];
 
                local_args[0] = cmd;