X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=cmd%2Fmtdparts.c;h=5220142b9ab25d704229832d84fe46e1241ff391;hb=60c7facfc965af6ff8ea14ee26c9d49cd2d0ec22;hp=0da3afd75ff03877fa8c5753c6c3887ac0296251;hpb=2ae23a280be660c5c3dc8addb7f61bf7c12242f7;p=oweals%2Fu-boot.git diff --git a/cmd/mtdparts.c b/cmd/mtdparts.c index 0da3afd75f..5220142b9a 100644 --- a/cmd/mtdparts.c +++ b/cmd/mtdparts.c @@ -37,14 +37,14 @@ * mtdids=[,,...] * * := = - * := 'nand'|'nor'|'onenand' + * := 'nand'|'nor'|'onenand'|'spi-nand' * := mtd device number, 0... * := unique device tag used by linux kernel to find mtd device (mtd->name) * * * 'mtdparts' - partition list * - * mtdparts=mtdparts=[;...] + * mtdparts=[mtdparts=][;...] * * := :[,...] * := unique device tag used by linux kernel to find mtd device (mtd->name) @@ -62,16 +62,18 @@ * * 1 NOR Flash, with 1 single writable partition: * mtdids=nor0=edb7312-nor - * mtdparts=mtdparts=edb7312-nor:- + * mtdparts=[mtdparts=]edb7312-nor:- * * 1 NOR Flash with 2 partitions, 1 NAND with one * mtdids=nor0=edb7312-nor,nand0=edb7312-nand - * mtdparts=mtdparts=edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home) + * mtdparts=[mtdparts=]edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home) * */ #include #include +#include +#include #include #include #include @@ -177,13 +179,16 @@ static u64 memsize_parse (const char *const ptr, const char **retptr) case 'G': case 'g': ret <<= 10; + /* Fallthrough */ case 'M': case 'm': ret <<= 10; + /* Fallthrough */ case 'K': case 'k': ret <<= 10; (*retptr)++; + /* Fallthrough */ default: break; } @@ -336,7 +341,7 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part) if (!mtd->numeraseregions) { /* - * Only one eraseregion (NAND, OneNAND or uniform NOR), + * Only one eraseregion (NAND, SPI-NAND, OneNAND or uniform NOR), * checking for alignment is easy here */ offset = part->offset; @@ -1027,7 +1032,7 @@ static struct mtdids* id_find_by_mtd_id(const char *mtd_id, unsigned int mtd_id_ } /** - * Parse device id string := 'nand'|'nor'|'onenand', + * Parse device id string := 'nand'|'nor'|'onenand'|'spi-nand', * return device type and number. * * @param id string describing device id @@ -1051,6 +1056,9 @@ int mtd_id_parse(const char *id, const char **ret_id, u8 *dev_type, } else if (strncmp(p, "onenand", 7) == 0) { *dev_type = MTD_DEV_TYPE_ONENAND; p += 7; + } else if (strncmp(p, "spi-nand", 8) == 0) { + *dev_type = MTD_DEV_TYPE_SPINAND; + p += 8; } else { printf("incorrect device type in %s\n", id); return 1; @@ -1093,9 +1101,6 @@ static int generate_mtdparts(char *buf, u32 buflen) return 0; } - strcpy(p, "mtdparts="); - p += 9; - list_for_each(dentry, &devices) { dev = list_entry(dentry, struct mtd_device, link); @@ -1229,11 +1234,11 @@ static uint64_t net_part_size(struct mtd_info *mtd, struct part_info *part) { uint64_t i, net_size = 0; - if (!mtd->block_isbad) + if (!mtd->_block_isbad) return part->size; for (i = 0; i < part->size; i += mtd->erasesize) { - if (!mtd->block_isbad(mtd, part->offset + i)) + if (!mtd->_block_isbad(mtd, part->offset + i)) net_size += mtd->erasesize; } @@ -1270,7 +1275,7 @@ static void print_partition_table(void) part = list_entry(pentry, struct part_info, link); net_size = net_part_size(mtd, part); size_note = part->size == net_size ? " " : " (!)"; - printf("%2d: %-20s0x%08x\t0x%08x%s\t0x%08x\t%d\n", + printf("%2d: %-20s0x%08llx\t0x%08x%s\t0x%08llx\t%d\n", part_num, part->name, part->size, net_size, size_note, part->offset, part->mask_flags); @@ -1566,11 +1571,9 @@ static int parse_mtdparts(const char *const mtdparts) if (!p) p = mtdparts; - if (strncmp(p, "mtdparts=", 9) != 0) { - printf("mtdparts variable doesn't start with 'mtdparts='\n"); - return err; - } - p += 9; + /* Skip the useless prefix, if any */ + if (strncmp(p, "mtdparts=", 9) == 0) + p += 9; while (*p != '\0') { err = 1; @@ -1633,7 +1636,7 @@ static int parse_mtdids(const char *const ids) while(p && (*p != '\0')) { ret = 1; - /* parse 'nor'|'nand'|'onenand' */ + /* parse 'nor'|'nand'|'onenand'|'spi-nand' */ if (mtd_id_parse(p, &p, &type, &num) != 0) break; @@ -1913,7 +1916,8 @@ static struct part_info* mtd_part_info(struct mtd_device *dev, unsigned int part * @param argv arguments list * @return 0 on success, 1 otherwise */ -static int do_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_chpart(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) { /* command line only */ struct mtd_device *dev; @@ -1951,8 +1955,8 @@ static int do_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * @param argv arguments list * @return 0 on success, 1 otherwise */ -static int do_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, - char * const argv[]) +static int do_mtdparts(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) { if (argc == 2) { if (strcmp(argv[1], "default") == 0) { @@ -2109,7 +2113,7 @@ static char mtdparts_help_text[] = "'mtdids' - linux kernel mtd device id <-> u-boot device id mapping\n\n" "mtdids=[,,...]\n\n" " := =\n" - " := 'nand'|'nor'|'onenand'\n" + " := 'nand'|'nor'|'onenand'|'spi-nand'\n" " := mtd device number, 0...\n" " := unique device tag used by linux kernel to find mtd device (mtd->name)\n\n" "'mtdparts' - partition list\n\n"