[openwrt/openwrt] brcm63xx: enhance dt partitions support to match upstream more closely

LEDE Commits lede-commits at lists.infradead.org
Sun Feb 11 14:17:09 PST 2018


jogo pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/85f31afa88c4e3a5fed95149832bdea0ff7ae3b9

commit 85f31afa88c4e3a5fed95149832bdea0ff7ae3b9
Author: Jonas Gorski <jonas.gorski at gmail.com>
AuthorDate: Mon Jun 26 19:01:20 2017 +0200

    brcm63xx: enhance dt partitions support to match upstream more closely
    
    Partitions are supposed to be enclosed in an extra partitions node. Allow
    the bcm63xxpart parser to cope with that.
    
    Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
---
 .../425-bcm63xxpart_parse_paritions_from_dt.patch  | 28 +++++++++++++++-------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch b/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
index d64d42c..ea73690 100644
--- a/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
+++ b/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
@@ -89,7 +89,7 @@
  		}
  	} else {
  		pr_warn("CFE boot tag CRC invalid (expected %08x, actual %08x)\n",
-@@ -119,23 +108,139 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -119,23 +108,145 @@ static int bcm63xx_parse_cfe_partitions(
  		kernellen = 0;
  		rootfslen = 0;
  		rootfsaddr = 0;
@@ -133,14 +133,18 @@
 +					   struct mtd_partition **pparts,
 +					   struct mtd_part_parser_data *data)
 +{
-+	struct device_node *dp = mtd_get_of_node(master);
++	struct device_node *dp, *mtd_node = mtd_get_of_node(master);
 +	struct device_node *pp;
 +	int i, nr_parts = 0;
 +	const char *partname;
 +	int len;
 +
++	dp = of_get_child_by_name(mtd_node, "partitions");
++	if (!dp)
++		dp = mtd_node;
++
 +	for_each_child_of_node(dp, pp) {
-+		if (node_has_compatible(pp))
++		if (node_has_compatible(pp) && dp == mtd_node)
 +			continue;
 +
 +		if (!of_get_property(pp, "reg", &len))
@@ -150,7 +154,8 @@
 +		if (!partname)
 +			partname = of_get_property(pp, "name", &len);
 +
-+		if (!strcmp(partname, "linux"))
++		if (!strcmp(partname, "linux") ||
++		    of_device_is_compatible(pp, "brcm,bcm963xx-imagetag"))
 +			nr_parts += 2;
 +
 +		nr_parts++;
@@ -166,7 +171,7 @@
 +		int a_cells, s_cells;
 +		size_t size, offset;
 +
-+		if (node_has_compatible(pp))
++		if (node_has_compatible(pp) && dp == mtd_node)
 +			continue;
 +
 +		reg = of_get_property(pp, "reg", &len);
@@ -181,7 +186,8 @@
 +		if (!partname)
 +			partname = of_get_property(pp, "name", &len);
 +
-+		if (!strcmp(partname, "linux"))
++		if (!strcmp(partname, "linux") ||
++		    of_device_is_compatible(pp, "brcm,bcm963xx-imagetag"))
 +			i += parse_bcmtag(master, *pparts, i, offset, size);
 +
 +		if (of_get_property(pp, "read-only", &len))
@@ -239,7 +245,7 @@
  
  	/* Start building partition list */
  	parts[curpart].name = "CFE";
-@@ -143,29 +248,7 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -143,29 +254,7 @@ static int bcm63xx_parse_cfe_partitions(
  	parts[curpart].size = cfelen;
  	curpart++;
  
@@ -270,7 +276,7 @@
  
  	parts[curpart].name = "nvram";
  	parts[curpart].offset = master->size - nvramlen;
-@@ -174,25 +257,33 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -174,25 +263,37 @@ static int bcm63xx_parse_cfe_partitions(
  
  	/* Global partition "linux" to make easy firmware upgrade */
  	parts[curpart].name = "linux";
@@ -299,7 +305,11 @@
 +				    struct mtd_partition **pparts,
 +				    struct mtd_part_parser_data *data)
 +{
-+	if (mtd_get_of_node(master) && of_get_child_count(mtd_get_of_node(master)))
++	struct device_node *np, *mtd_node = mtd_get_of_node(master);
++	np = of_get_child_by_name(mtd_node, "partitions");
++
++	if ((np && of_device_is_compatible(np, "fixed-partitions")) ||
++	    (!np && of_get_child_count(mtd_node)))
 +		return bcm63xx_parse_cfe_partitions_of(master, pparts, data);
 +	else
 +		return bcm63xx_parse_cfe_partitions(master, pparts, data);



More information about the lede-commits mailing list