]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of /home/wd/git/u-boot/custodians
authorWolfgang Denk <wd@denx.de>
Mon, 13 Jul 2009 21:28:55 +0000 (23:28 +0200)
committerWolfgang Denk <wd@denx.de>
Mon, 13 Jul 2009 21:28:55 +0000 (23:28 +0200)
common/cmd_ubi.c
common/cmd_ubifs.c

index bbca3892c93830b8a5cbf101ef77ca05355d398d..05893f5be57fa7c93e1e5c920295f092a92bc3fe 100644 (file)
@@ -395,11 +395,13 @@ static int ubi_volume_read(char *volume, char *buf, size_t size)
        return err ? err : count_save - size;
 }
 
-static int ubi_dev_scan(struct mtd_info *info, char *ubidev)
+static int ubi_dev_scan(struct mtd_info *info, char *ubidev,
+               const char *vid_header_offset)
 {
        struct mtd_device *dev;
        struct part_info *part;
        struct mtd_partition mtd_part;
+       char ubi_mtd_param_buffer[80];
        u8 pnum;
        int err;
 
@@ -413,7 +415,11 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev)
        mtd_part.offset = part->offset;
        add_mtd_partitions(info, &mtd_part, 1);
 
-       err = ubi_mtd_param_parse(buffer, NULL);
+       strcpy(ubi_mtd_param_buffer, buffer);
+       if (vid_header_offset)
+               sprintf(ubi_mtd_param_buffer, "mtd=%d,%s", pnum,
+                               vid_header_offset);
+       err = ubi_mtd_param_parse(ubi_mtd_param_buffer, NULL);
        if (err) {
                del_mtd_partitions(info);
                return err;
@@ -450,6 +456,7 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                char mtd_dev[16];
                struct mtd_device *dev;
                struct part_info *part;
+               const char *vid_header_offset = NULL;
                u8 pnum;
 
                /* Print current partition */
@@ -497,8 +504,11 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
                ubi_dev.selected = 1;
 
+               if (argc > 3)
+                       vid_header_offset = argv[3];
                strcpy(ubi_dev.part_name, argv[2]);
-               err = ubi_dev_scan(ubi_dev.mtd_info, ubi_dev.part_name);
+               err = ubi_dev_scan(ubi_dev.mtd_info, ubi_dev.part_name,
+                               vid_header_offset);
                if (err) {
                        printf("UBI init error %d\n", err);
                        ubi_dev.selected = 0;
@@ -594,8 +604,9 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(ubi, 6, 1, do_ubi,
        "ubi commands",
-       "part [part]"
-               " - Show or set current partition\n"
+       "part [part] [offset]\n"
+               " - Show or set current partition (with optional VID"
+               " header offset)\n"
        "ubi info [l[ayout]]"
                " - Display volume and ubi layout information\n"
        "ubi create[vol] volume [size] [type]"
index d9f60d51edb0a83b3ec69d96b96ff440e3d6996d..ed0e9db2ac27577ff12e7ca673f027bb60b57856 100644 (file)
@@ -47,6 +47,10 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        char *vol_name;
        int ret;
 
+       if (argc != 2) {
+               cmd_usage(cmdtp);
+               return 1;
+       }
        vol_name = argv[1];
        debug("Using volume %s\n", vol_name);
 
@@ -88,6 +92,7 @@ int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        char *filename;
+       char *endp;
        int ret;
        u32 addr;
        u32 size = 0;
@@ -98,15 +103,25 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        if (argc < 3) {
-               printf("Usage:\n%s\n", cmdtp->usage);
+               cmd_usage(cmdtp);
                return -1;
        }
 
-       addr = simple_strtoul(argv[1], NULL, 16);
+       addr = simple_strtoul(argv[1], &endp, 16);
+       if (endp == argv[1]) {
+               cmd_usage(cmdtp);
+               return 1;
+       }
+
        filename = argv[2];
 
-       if (argc == 4)
-               size = simple_strtoul(argv[3], NULL, 16);
+       if (argc == 4) {
+               size = simple_strtoul(argv[3], &endp, 16);
+               if (endp == argv[3]) {
+                       cmd_usage(cmdtp);
+                       return 1;
+               }
+       }
        debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size);
 
        ret = ubifs_load(filename, addr, size);
@@ -119,7 +134,8 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
        ubifsmount, 2, 0, do_ubifs_mount,
        "mount UBIFS volume",
-       ""
+       "<volume-name>\n"
+       "    - mount 'volume-name' volume"
 );
 
 U_BOOT_CMD(ubifsls, 2, 0, do_ubifs_ls,