Newer
Older
len += strlen(argv[3]); /* size@offset */
len += strlen(argv[4]) + 2; /* '(' name ')' */
if (argv[5] && (strlen(argv[5]) == 2))
len += 2; /* 'ro' */
if (len >= PART_ADD_DESC_MAXLEN) {
printf("too long partition description\n");
return 1;
}
sprintf(tmpbuf, "%s:%s(%s)%s",
id->mtd_id, argv[3], argv[4], argv[5] ? argv[5] : "");
debug("add tmpbuf: %s\n", tmpbuf);
if ((device_parse(tmpbuf, NULL, &dev) != 0) || (!dev))
return 1;
debug("+ %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type),
dev->id->num, dev->id->mtd_id);
p = list_entry(dev->parts.next, struct part_info, link);
#if defined(CONFIG_CMD_MTDPARTS_SPREAD)
if (get_mtd_info(dev->id->type, dev->id->num, &mtd))
return 1;
if (!strcmp(&argv[1][3], ".spread")) {
spread_partition(mtd, p, &next_offset);
debug("increased %s to %llu bytes\n", p->name, p->size);
}
#endif
dev_tmp = device_find(dev->id->type, dev->id->num);
if (dev_tmp == NULL) {
} else if (part_add(dev_tmp, p) != 0) {
/* merge new partition with existing ones*/
device_del(dev);
return 1;
}
if (generate_mtdparts_save(last_parts, MTDPARTS_MAXLEN) != 0) {
printf("generated mtdparts too long, resetting to null\n");
return 1;
}
return 0;
}
/* mtdparts del part-id */
if ((argc == 3) && (strcmp(argv[1], "del") == 0)) {
debug("del: part-id = %s\n", argv[2]);
return delete_partition(argv[2]);
}
#if defined(CONFIG_CMD_MTDPARTS_SPREAD)
if ((argc == 2) && (strcmp(argv[1], "spread") == 0))
return spread_partitions();
#endif /* CONFIG_CMD_MTDPARTS_SPREAD */
return CMD_RET_USAGE;
}
/***************************************************/
U_BOOT_CMD(
chpart, 2, 0, do_chpart,
"change active partition",
"part-id\n"
" - change active partition (e.g. part-id = nand0,1)"
#ifdef CONFIG_SYS_LONGHELP
static char mtdparts_help_text[] =
"\n"
" - list partition table\n"
"mtdparts delall\n"
" - delete all partitions\n"
"mtdparts del part-id\n"
" - delete partition (e.g. part-id = nand0,1)\n"
"mtdparts add <mtd-dev> <size>[@<offset>] [<name>] [ro]\n"
" - add partition\n"
#if defined(CONFIG_CMD_MTDPARTS_SPREAD)
"mtdparts add.spread <mtd-dev> <size>[@<offset>] [<name>] [ro]\n"
" - add partition, padding size by skipping bad blocks\n"
#endif
" - reset partition table to defaults\n"
#if defined(CONFIG_CMD_MTDPARTS_SPREAD)
"mtdparts spread\n"
" - adjust the sizes of the partitions so they are\n"
" at least as big as the mtdparts variable specifies\n"
" and they each start on a good block\n\n"
#else
"\n"
#endif /* CONFIG_CMD_MTDPARTS_SPREAD */
"-----\n\n"
"this command uses three environment variables:\n\n"
"'partition' - keeps current partition identifier\n\n"
"partition := <part-id>\n"
"<part-id> := <dev-id>,part_num\n\n"
"'mtdids' - linux kernel mtd device id <-> u-boot device id mapping\n\n"
"mtdids=<idmap>[,<idmap>,...]\n\n"
"<idmap> := <dev-id>=<mtd-id>\n"
"<dev-id> := 'nand'|'nor'|'onenand'<dev-num>\n"
"<dev-num> := mtd device number, 0...\n"
"<mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)\n\n"
"'mtdparts' - partition list\n\n"
"mtdparts=mtdparts=<mtd-def>[;<mtd-def>...]\n\n"
"<mtd-def> := <mtd-id>:<part-def>[,<part-def>...]\n"
"<mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)\n"
"<part-def> := <size>[@<offset>][<name>][<ro-flag>]\n"
"<size> := standard linux memsize OR '-' to denote all remaining space\n"
"<offset> := partition start offset within the device\n"
"<name> := '(' NAME ')'\n"
"<ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel)";
#endif
U_BOOT_CMD(
mtdparts, 6, 0, do_mtdparts,
"define flash/nand partitions", mtdparts_help_text
);
/***************************************************/