mtd_add_partition_attrs(new);
-@@ -736,6 +741,35 @@ int mtd_del_partition(struct mtd_info *m
+@@ -736,6 +741,36 @@ int mtd_del_partition(struct mtd_info *m
}
EXPORT_SYMBOL_GPL(mtd_del_partition);
+ if (rootfs_found)
+ return;
+
-+ if (!strcmp(part->mtd.name, SPLIT_FIRMWARE_NAME) &&
-+ IS_ENABLED(CONFIG_MTD_SPLIT_FIRMWARE))
++ 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))
+ split_firmware(master, part);
+
+ arch_split_mtd_part(master, part->mtd.name, part->offset,
/*
* This function, given a master MTD object and a partition table, creates
* and registers slave MTD objects which are bound to the master according to
-@@ -767,6 +801,7 @@ int add_mtd_partitions(struct mtd_info *
+@@ -767,6 +802,7 @@ int add_mtd_partitions(struct mtd_info *
mutex_unlock(&mtd_partitions_mutex);
add_mtd_device(&slave->mtd);
#ifdef CONFIG_MTD_SPLIT_FIRMWARE_NAME
#define SPLIT_FIRMWARE_NAME CONFIG_MTD_SPLIT_FIRMWARE_NAME
#else
-@@ -1118,6 +1152,61 @@ void mtd_part_parser_cleanup(struct mtd_
+@@ -1119,6 +1153,61 @@ void mtd_part_parser_cleanup(struct mtd_
}
}
+ 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 {
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -1231,6 +1231,24 @@ int mtd_is_partition(const struct mtd_in
+@@ -1232,6 +1232,24 @@ int mtd_is_partition(const struct mtd_in
}
EXPORT_SYMBOL_GPL(mtd_is_partition);
mtd_add_partition_attrs(new);
-@@ -728,6 +733,35 @@ int mtd_del_partition(struct mtd_info *m
+@@ -728,6 +733,36 @@ int mtd_del_partition(struct mtd_info *m
}
EXPORT_SYMBOL_GPL(mtd_del_partition);
+ if (rootfs_found)
+ return;
+
-+ if (!strcmp(part->mtd.name, SPLIT_FIRMWARE_NAME) &&
-+ IS_ENABLED(CONFIG_MTD_SPLIT_FIRMWARE))
++ 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))
+ split_firmware(master, part);
+
+ arch_split_mtd_part(master, part->mtd.name, part->offset,
/*
* This function, given a master MTD object and a partition table, creates
* and registers slave MTD objects which are bound to the master according to
-@@ -759,6 +793,7 @@ int add_mtd_partitions(struct mtd_info *
+@@ -759,6 +794,7 @@ int add_mtd_partitions(struct mtd_info *
mutex_unlock(&mtd_partitions_mutex);
add_mtd_device(&slave->mtd);
#ifdef CONFIG_MTD_SPLIT_FIRMWARE_NAME
#define SPLIT_FIRMWARE_NAME CONFIG_MTD_SPLIT_FIRMWARE_NAME
#else
-@@ -1115,6 +1149,61 @@ void mtd_part_parser_cleanup(struct mtd_
+@@ -1116,6 +1150,61 @@ void mtd_part_parser_cleanup(struct mtd_
}
}
+ 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 {
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -1228,6 +1228,24 @@ int mtd_is_partition(const struct mtd_in
+@@ -1229,6 +1229,24 @@ int mtd_is_partition(const struct mtd_in
}
EXPORT_SYMBOL_GPL(mtd_is_partition);