[PATCH v2 2/4] mtdsplit_squashfs: allow devicetree to define the name of the new partition

André Valentin avalentin at marcant.net
Mon May 17 02:57:09 PDT 2021


mtdsplit_squashfs always splits into rootfs and rootfs_data. Wit this
patch is not possible to give the new partition a different name.

Example:
partition at 140000 {
	reg = <0x140000 0x1ea0000>;
	compatible = "openwrt,uimage", "denx,uimage", "openwrt,squashfs";
	label = "firmware";
	openwrt,offset = <380>;
	openwrt,data-partition-name = "ubi";
};
This splits at first the uImage into kernel and rootfs, after that
rootfs is splitted into rootfs (only squash) and the new ubi partition.

Signed-off-by: André Valentin <avalentin at marcant.net>
---
 .../drivers/mtd/mtdsplit/mtdsplit_squashfs.c     | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_squashfs.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_squashfs.c
index f6353da65b..9fdc425844 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_squashfs.c
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_squashfs.c
@@ -18,6 +18,7 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/byteorder/generic.h>
+#include <linux/of.h>
 
 #include "mtdsplit.h"
 
@@ -26,10 +27,12 @@ mtdsplit_parse_squashfs(struct mtd_info *master,
 			const struct mtd_partition **pparts,
 			struct mtd_part_parser_data *data)
 {
+	struct device_node *np;
 	struct mtd_partition *part;
 	struct mtd_info *parent_mtd;
 	size_t part_offset;
 	size_t squashfs_len;
+	const char *part_name = NULL;
 	int err;
 
 	err = mtd_get_squashfs_len(master, 0, &squashfs_len);
@@ -46,7 +49,18 @@ mtdsplit_parse_squashfs(struct mtd_info *master,
 		return -ENOMEM;
 	}
 
-	part->name = ROOTFS_SPLIT_NAME;
+	np = mtd_get_of_node(parent_mtd);
+	if (np && of_device_is_compatible(np, "openwrt,squashfs")) {
+		err = of_property_read_string(np, "openwrt,data-partition-name", &part_name);
+		if (err)
+			pr_debug("failed to retrieve openwrt,data-partition-name.\n");
+	}
+
+	if (part_name == NULL) {
+		part->name = ROOTFS_SPLIT_NAME;
+	} else {
+		part->name = part_name;
+	}
 	part->offset = mtd_roundup_to_eb(part_offset + squashfs_len,
 					 parent_mtd) - part_offset;
 	part->size = mtd_rounddown_to_eb(master->size - part->offset, master);
-- 
2.20.1




More information about the openwrt-devel mailing list