--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -783,6 +783,7 @@ run_parsers_by_type(struct mtd_part *sla
+@@ -804,6 +804,7 @@ run_parsers_by_type(struct mtd_part *sla
static void split_firmware(struct mtd_info *master, struct mtd_part *part)
{
+ run_parsers_by_type(part, MTD_PARSER_TYPE_FIRMWARE);
}
- void __weak arch_split_mtd_part(struct mtd_info *master, const char *name,
-@@ -797,6 +798,12 @@ static void mtd_partition_split(struct m
+ static void mtd_partition_split(struct mtd_info *master, struct mtd_part *part)
+@@ -813,6 +814,12 @@ static void mtd_partition_split(struct m
if (rootfs_found)
return;
+ rootfs_found = 1;
+ }
+
- if (!strcmp(part->mtd.name, SPLIT_FIRMWARE_NAME) &&
- IS_ENABLED(CONFIG_MTD_SPLIT_FIRMWARE))
- split_firmware(master, part);
+ if (IS_ENABLED(CONFIG_MTD_SPLIT_FIRMWARE) &&
+ !strcmp(part->mtd.name, SPLIT_FIRMWARE_NAME) &&
+ !of_find_property(mtd_get_of_node(&part->mtd), "compatible", NULL))
--- a/include/linux/mtd/partitions.h
+++ b/include/linux/mtd/partitions.h
@@ -75,6 +75,8 @@ struct mtd_part_parser_data {