kernel: don't auto-split "firmware" if it has "compatible" DT property
authorRafał Miłecki <rafal@milecki.pl>
Thu, 22 Nov 2018 11:55:14 +0000 (12:55 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Sat, 24 Nov 2018 07:31:55 +0000 (08:31 +0100)
If "compatible" is being used that should trigger a proper parser
directly. It's more reliable thanks to not trying parsers one by one. In
such case partition shouldn't be split automatically to avoid parsing it
twice.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
target/linux/generic/pending-4.14/400-mtd-add-rootfs-split-support.patch
target/linux/generic/pending-4.14/401-mtd-add-support-for-different-partition-parser-types.patch
target/linux/generic/pending-4.14/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
target/linux/generic/pending-4.14/404-mtd-add-more-helper-functions.patch
target/linux/generic/pending-4.9/400-mtd-add-rootfs-split-support.patch
target/linux/generic/pending-4.9/401-mtd-add-support-for-different-partition-parser-types.patch
target/linux/generic/pending-4.9/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
target/linux/generic/pending-4.9/404-mtd-add-more-helper-functions.patch

index 6873780..b68e253 100644 (file)
@@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        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);
  
@@ -94,8 +94,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +      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,
@@ -104,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  /*
   * 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);
index a48ae87..0393fb2 100644 (file)
@@ -57,7 +57,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  #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_
        }
  }
  
index 3c105b2..240d0b2 100644 (file)
@@ -28,9 +28,9 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 +              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 {
index b37563c..d1035b6 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 
 --- 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);
  
index b0cb273..2072775 100644 (file)
@@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        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);
  
@@ -94,8 +94,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +      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,
@@ -104,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  /*
   * 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);
index 0eb6d74..29a1d73 100644 (file)
@@ -57,7 +57,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  #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_
        }
  }
  
index 3cb27c7..ccb7f00 100644 (file)
@@ -28,9 +28,9 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 +              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 {
index 300a0b0..e25ab68 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 
 --- 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);