| The WRT1900AC among other Linksys routers uses a dual-firmware layout. |
| Dynamically rename the active partition to "ubi". |
| |
| Signed-off-by: Imre Kaloz <kaloz@openwrt.org> |
| |
| --- a/drivers/mtd/parsers/ofpart_core.c |
| +++ b/drivers/mtd/parsers/ofpart_core.c |
| @@ -38,6 +38,8 @@ static bool node_has_compatible(struct d |
| return of_get_property(pp, "compatible", NULL); |
| } |
| |
| +static int mangled_rootblock; |
| + |
| static int parse_fixed_partitions(struct mtd_info *master, |
| const struct mtd_partition **pparts, |
| struct mtd_part_parser_data *data) |
| @@ -48,6 +50,7 @@ static int parse_fixed_partitions(struct |
| struct device_node *mtd_node; |
| struct device_node *ofpart_node; |
| const char *partname; |
| + const char *owrtpart = "ubi"; |
| struct device_node *pp; |
| int nr_parts, i, ret = 0; |
| bool dedicated = true; |
| @@ -133,9 +136,13 @@ static int parse_fixed_partitions(struct |
| parts[i].size = of_read_number(reg + a_cells, s_cells); |
| parts[i].of_node = pp; |
| |
| - partname = of_get_property(pp, "label", &len); |
| - if (!partname) |
| - partname = of_get_property(pp, "name", &len); |
| + if (mangled_rootblock && (i == mangled_rootblock)) { |
| + partname = owrtpart; |
| + } else { |
| + partname = of_get_property(pp, "label", &len); |
| + if (!partname) |
| + partname = of_get_property(pp, "name", &len); |
| + } |
| parts[i].name = partname; |
| |
| if (of_get_property(pp, "read-only", &len)) |
| @@ -249,6 +256,18 @@ static int __init ofpart_parser_init(voi |
| return 0; |
| } |
| |
| +static int __init active_root(char *str) |
| +{ |
| + get_option(&str, &mangled_rootblock); |
| + |
| + if (!mangled_rootblock) |
| + return 1; |
| + |
| + return 1; |
| +} |
| + |
| +__setup("mangled_rootblock=", active_root); |
| + |
| static void __exit ofpart_parser_exit(void) |
| { |
| deregister_mtd_parser(&ofpart_parser); |