kernel: add support for enabling fit firmware partition parser via cmdline
authorFelix Fietkau <nbd@nbd.name>
Wed, 3 Feb 2021 19:37:03 +0000 (20:37 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Sun, 28 Feb 2021 00:46:11 +0000 (00:46 +0000)
This is useful for dual-boot setups where the loader sets variables depending
on the flash boot partition.
For example the Linksys E8450 sets mtdparts=master for the first partition
and mtdparts=slave for the second one.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_fit.c

index 67ee33d085c74aa07f57f2e981ecfc6235183b41..5cc1658dbde61996156741da52eddaf5044f0f52 100644 (file)
@@ -49,6 +49,8 @@ mtdsplit_fit_parse(struct mtd_info *mtd,
                   const struct mtd_partition **pparts,
                   struct mtd_part_parser_data *data)
 {
+       struct device_node *np = mtd_get_of_node(mtd);
+       const char *cmdline_match = NULL;
        struct fdt_header hdr;
        size_t hdr_len, retlen;
        size_t offset;
@@ -57,6 +59,10 @@ mtdsplit_fit_parse(struct mtd_info *mtd,
        struct mtd_partition *parts;
        int ret;
 
+       of_property_read_string(np, "openwrt,cmdline-match", &cmdline_match);
+       if (cmdline_match && !strstr(saved_command_line, cmdline_match))
+               return -ENODEV;
+
        hdr_len = sizeof(struct fdt_header);
 
        /* Parse the MTD device & search for the FIT image location */