diff options
Diffstat (limited to 'drivers/mtd/mtdpart.c')
-rw-r--r-- | drivers/mtd/mtdpart.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 3f8edeb5093..842d3e7274e 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -236,6 +236,10 @@ int mtd_parse_partitions(struct mtd_info *parent, const char **_mtdparts, if (ret) return ret; + if (parts[idx].offset == MTD_OFFSET_NOT_SPECIFIED) + parts[idx].offset = cur_off; + cur_off += parts[idx].size; + if (parts[idx].size == MTD_SIZE_REMAINING) parts[idx].size = parent->size - parts[idx].offset; @@ -246,10 +250,6 @@ int mtd_parse_partitions(struct mtd_info *parent, const char **_mtdparts, return -EINVAL; } - if (parts[idx].offset == MTD_OFFSET_NOT_SPECIFIED) - parts[idx].offset = cur_off; - cur_off += parts[idx].size; - parts[idx].ecclayout = parent->ecclayout; } @@ -909,11 +909,13 @@ int add_mtd_partitions_of(struct mtd_info *master) continue; offset = ofnode_get_addr_size_index_notrans(child, 0, &size); - if (offset == FDT_ADDR_T_NONE || !size) { - debug("Missing partition offset/size on \"%s\" partition\n", + if (offset == FDT_ADDR_T_NONE) { + debug("Missing partition offset on \"%s\" partition\n", master->name); continue; } + if (size == MTDPART_SIZ_FULL) + size = master->size - offset; part.name = ofnode_read_string(child, "label"); if (!part.name) |