All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] mtd: bcm63xxpart: add device tree support
@ 2018-08-28 11:19 ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: Mark Rutland, Florian Fainelli, Marek Vasut, Richard Weinberger,
	Boris Brezillon, Rob Herring, Brian Norris, David Woodhouse

This patchset adds appropriate bindings for parsing various bcm963xx NOR
flash layouts found in the wild.

The image header is quite limited, and only has fixed fields for the
offsets and sizes of the kernel and rootfs partitions. If any additional
partitions exist, they need to be described externally, e.g. through
fixed partition layouts.

The first two patches add the bindings for the full flash parser for the
"common" case: first erase block bootloader, last erase block nvram,
reminder available for firmware.

The third patch splits out the image header parsing into its own parser.

Then patches four and five add bindings for the split out parser, to
support non-trivial cases with additional partitions, or a non-standard
offset of the firmware partition.

These patches have been in used since a while in OpenWrt.

Jonas Gorski (5):
  dt-bindings: mtd: describe the simple BCM963XX NOR flash layout
  mtd: bcm63xxpart: add of_match_table support
  mtd: bcm63xxpart: move imagetag parsing to its own parser
  dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  mtd: parser_imagetag: add of_match_table support

 .../brcm,bcm963xx-cfe-nor-partitions.txt           |  24 +++
 .../mtd/partitions/brcm,bcm963xx-imagetag.txt      |  78 ++++++++
 drivers/mtd/Kconfig                                |   1 +
 drivers/mtd/bcm63xxpart.c                          | 163 ++-------------
 drivers/mtd/parsers/Kconfig                        |  11 +
 drivers/mtd/parsers/Makefile                       |   1 +
 drivers/mtd/parsers/parser_imagetag.c              | 222 +++++++++++++++++++++
 7 files changed, 353 insertions(+), 147 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
 create mode 100644 drivers/mtd/parsers/parser_imagetag.c

-- 
2.13.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 0/5] mtd: bcm63xxpart: add device tree support
@ 2018-08-28 11:19 ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut,
	Richard Weinberger, Rob Herring, Mark Rutland, Florian Fainelli

This patchset adds appropriate bindings for parsing various bcm963xx NOR
flash layouts found in the wild.

The image header is quite limited, and only has fixed fields for the
offsets and sizes of the kernel and rootfs partitions. If any additional
partitions exist, they need to be described externally, e.g. through
fixed partition layouts.

The first two patches add the bindings for the full flash parser for the
"common" case: first erase block bootloader, last erase block nvram,
reminder available for firmware.

The third patch splits out the image header parsing into its own parser.

Then patches four and five add bindings for the split out parser, to
support non-trivial cases with additional partitions, or a non-standard
offset of the firmware partition.

These patches have been in used since a while in OpenWrt.

Jonas Gorski (5):
  dt-bindings: mtd: describe the simple BCM963XX NOR flash layout
  mtd: bcm63xxpart: add of_match_table support
  mtd: bcm63xxpart: move imagetag parsing to its own parser
  dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  mtd: parser_imagetag: add of_match_table support

 .../brcm,bcm963xx-cfe-nor-partitions.txt           |  24 +++
 .../mtd/partitions/brcm,bcm963xx-imagetag.txt      |  78 ++++++++
 drivers/mtd/Kconfig                                |   1 +
 drivers/mtd/bcm63xxpart.c                          | 163 ++-------------
 drivers/mtd/parsers/Kconfig                        |  11 +
 drivers/mtd/parsers/Makefile                       |   1 +
 drivers/mtd/parsers/parser_imagetag.c              | 222 +++++++++++++++++++++
 7 files changed, 353 insertions(+), 147 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
 create mode 100644 drivers/mtd/parsers/parser_imagetag.c

-- 
2.13.2

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 1/5] dt-bindings: mtd: describe the simple BCM963XX NOR flash layout
  2018-08-28 11:19 ` Jonas Gorski
@ 2018-08-28 11:19   ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: Mark Rutland, Florian Fainelli, Marek Vasut, Richard Weinberger,
	Boris Brezillon, Rob Herring, Brian Norris, David Woodhouse

Add binding documentation for the standard CFE based BCM963XX flash
layout, found in most devices using a BCM63XX SoC with NOR flash.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 .../brcm,bcm963xx-cfe-nor-partitions.txt           | 24 ++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt

diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
new file mode 100644
index 000000000000..9f630e95f180
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
@@ -0,0 +1,24 @@
+Broadcom BCM963XX CFE Loader NOR Flash Partitions
+=================================================
+
+Most Broadcom BCM63XX SoC based devices follow the Broadcom reference layout for
+NOR. The first erase block used for the CFE bootloader, the last for an
+NVRAM partition, and the remainder in-between for one to two firmware partitions
+at fixed offsets. A valid firmware partition is identified by the ImageTag
+header found at beginning of the second erase block, containing the rootfs and
+kernel offsets and sizes within the firmware partition.
+
+Required properties:
+- compatible : must be "brcm,bcm963xx-cfe-nor-partitions"
+
+Example:
+
+flash@1fc00000 {
+	compatible = "cfi-flash";
+	reg = <0x1fc00000 0x400000>;
+	bank-width = <2>;
+
+	partitions {
+		compatible = "brcm,bcm963xx-cfe-nor-partitions";
+	};
+};
-- 
2.13.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 1/5] dt-bindings: mtd: describe the simple BCM963XX NOR flash layout
@ 2018-08-28 11:19   ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut,
	Richard Weinberger, Rob Herring, Mark Rutland, Florian Fainelli

Add binding documentation for the standard CFE based BCM963XX flash
layout, found in most devices using a BCM63XX SoC with NOR flash.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 .../brcm,bcm963xx-cfe-nor-partitions.txt           | 24 ++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt

diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
new file mode 100644
index 000000000000..9f630e95f180
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
@@ -0,0 +1,24 @@
+Broadcom BCM963XX CFE Loader NOR Flash Partitions
+=================================================
+
+Most Broadcom BCM63XX SoC based devices follow the Broadcom reference layout for
+NOR. The first erase block used for the CFE bootloader, the last for an
+NVRAM partition, and the remainder in-between for one to two firmware partitions
+at fixed offsets. A valid firmware partition is identified by the ImageTag
+header found at beginning of the second erase block, containing the rootfs and
+kernel offsets and sizes within the firmware partition.
+
+Required properties:
+- compatible : must be "brcm,bcm963xx-cfe-nor-partitions"
+
+Example:
+
+flash@1fc00000 {
+	compatible = "cfi-flash";
+	reg = <0x1fc00000 0x400000>;
+	bank-width = <2>;
+
+	partitions {
+		compatible = "brcm,bcm963xx-cfe-nor-partitions";
+	};
+};
-- 
2.13.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 2/5] mtd: bcm63xxpart: add of_match_table support
  2018-08-28 11:19 ` Jonas Gorski
@ 2018-08-28 11:19   ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: Mark Rutland, Florian Fainelli, Marek Vasut, Richard Weinberger,
	Boris Brezillon, Rob Herring, Brian Norris, David Woodhouse

Add of_match_table support to allow using bcm63xxpart as a full flash
layout parser from device tree.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/mtd/bcm63xxpart.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/mtd/bcm63xxpart.c b/drivers/mtd/bcm63xxpart.c
index 41d1d3149c61..f639b4c960f0 100644
--- a/drivers/mtd/bcm63xxpart.c
+++ b/drivers/mtd/bcm63xxpart.c
@@ -34,6 +34,7 @@
 #include <linux/vmalloc.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <linux/of.h>
 
 #define BCM963XX_CFE_BLOCK_SIZE		SZ_64K	/* always at least 64KiB */
 
@@ -311,9 +312,16 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
 	return ret;
 };
 
+static const struct of_device_id parse_bcm63xx_cfe_match_table[] = {
+	{ .compatible = "brcm,bcm963xx-cfe-nor-partitions" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, parse_bcm63xx_cfe_match_table);
+
 static struct mtd_part_parser bcm63xx_cfe_parser = {
 	.parse_fn = bcm63xx_parse_cfe_partitions,
 	.name = "bcm63xxpart",
+	.of_match_table = parse_bcm63xx_cfe_match_table,
 };
 module_mtd_part_parser(bcm63xx_cfe_parser);
 
-- 
2.13.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 2/5] mtd: bcm63xxpart: add of_match_table support
@ 2018-08-28 11:19   ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut,
	Richard Weinberger, Rob Herring, Mark Rutland, Florian Fainelli

Add of_match_table support to allow using bcm63xxpart as a full flash
layout parser from device tree.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/mtd/bcm63xxpart.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/mtd/bcm63xxpart.c b/drivers/mtd/bcm63xxpart.c
index 41d1d3149c61..f639b4c960f0 100644
--- a/drivers/mtd/bcm63xxpart.c
+++ b/drivers/mtd/bcm63xxpart.c
@@ -34,6 +34,7 @@
 #include <linux/vmalloc.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <linux/of.h>
 
 #define BCM963XX_CFE_BLOCK_SIZE		SZ_64K	/* always at least 64KiB */
 
@@ -311,9 +312,16 @@ static int bcm63xx_parse_cfe_partitions(struct mtd_info *master,
 	return ret;
 };
 
+static const struct of_device_id parse_bcm63xx_cfe_match_table[] = {
+	{ .compatible = "brcm,bcm963xx-cfe-nor-partitions" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, parse_bcm63xx_cfe_match_table);
+
 static struct mtd_part_parser bcm63xx_cfe_parser = {
 	.parse_fn = bcm63xx_parse_cfe_partitions,
 	.name = "bcm63xxpart",
+	.of_match_table = parse_bcm63xx_cfe_match_table,
 };
 module_mtd_part_parser(bcm63xx_cfe_parser);
 
-- 
2.13.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 3/5] mtd: bcm63xxpart: move imagetag parsing to its own parser
  2018-08-28 11:19 ` Jonas Gorski
@ 2018-08-28 11:19   ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: Mark Rutland, Florian Fainelli, Marek Vasut, Richard Weinberger,
	Boris Brezillon, Rob Herring, Brian Norris, David Woodhouse

Move the bcm963xx Image Tag parsing into its own partition parser. This
Allows reusing the parser with different full flash parsers.

While moving it, rename it to bcm963* to better reflect it isn't chip,
but reference implementation specific.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/mtd/Kconfig                   |   1 +
 drivers/mtd/bcm63xxpart.c             | 155 ++----------------------
 drivers/mtd/parsers/Kconfig           |  11 ++
 drivers/mtd/parsers/Makefile          |   1 +
 drivers/mtd/parsers/parser_imagetag.c | 214 ++++++++++++++++++++++++++++++++++
 5 files changed, 235 insertions(+), 147 deletions(-)
 create mode 100644 drivers/mtd/parsers/parser_imagetag.c

diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig
index c77f537323ec..a3bd0e315990 100644
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
@@ -143,6 +143,7 @@ config MTD_BCM63XX_PARTS
 	tristate "BCM63XX CFE partitioning support"
 	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
 	select CRC32
+	select MTD_PARSER_IMAGETAG
 	help
 	  This provides partions parsing for BCM63xx devices with CFE
 	  bootloaders.
diff --git a/drivers/mtd/bcm63xxpart.c b/drivers/mtd/bcm63xxpart.c
index f639b4c960f0..b2bd04764e95 100644
--- a/drivers/mtd/bcm63xxpart.c
+++ b/drivers/mtd/bcm63xxpart.c
@@ -94,51 +94,19 @@ static int bcm63xx_read_nvram(struct mtd_info *master,
 	return 0;
 }
 
-static int bcm63xx_read_image_tag(struct mtd_info *master, const char *name,
-	loff_t tag_offset, struct bcm_tag *buf)
-{
-	int ret;
-	size_t retlen;
-	u32 computed_crc;
-
-	ret = mtd_read(master, tag_offset, sizeof(*buf), &retlen, (void *)buf);
-	if (ret)
-		return ret;
-
-	if (retlen != sizeof(*buf))
-		return -EIO;
-
-	computed_crc = crc32_le(IMAGETAG_CRC_START, (u8 *)buf,
-				offsetof(struct bcm_tag, header_crc));
-	if (computed_crc == buf->header_crc) {
-		STR_NULL_TERMINATE(buf->board_id);
-		STR_NULL_TERMINATE(buf->tag_version);
-
-		pr_info("%s: CFE image tag found at 0x%llx with version %s, board type %s\n",
-			name, tag_offset, buf->tag_version, buf->board_id);
-
-		return 0;
-	}
-
-	pr_warn("%s: CFE image tag at 0x%llx CRC invalid (expected %08x, actual %08x)\n",
-		name, tag_offset, buf->header_crc, computed_crc);
-	return 1;
-}
+static const char * const bcm63xx_cfe_part_types[] = {
+	"bcm963xx-imagetag",
+	NULL,
+};
 
 static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	const struct mtd_partition **pparts, struct bcm963xx_nvram *nvram)
 {
-	/* CFE, NVRAM and global Linux are always present */
-	int nrparts = 3, curpart = 0;
-	struct bcm_tag *buf = NULL;
 	struct mtd_partition *parts;
-	int ret;
-	unsigned int rootfsaddr, kerneladdr, spareaddr;
-	unsigned int rootfslen, kernellen, sparelen, totallen;
+	int nrparts = 3, curpart = 0;
 	unsigned int cfelen, nvramlen;
 	unsigned int cfe_erasesize;
 	int i;
-	bool rootfs_first = false;
 
 	cfe_erasesize = max_t(uint32_t, master->erasesize,
 			      BCM963XX_CFE_BLOCK_SIZE);
@@ -147,83 +115,9 @@ static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	nvramlen = nvram->psi_size * SZ_1K;
 	nvramlen = roundup(nvramlen, cfe_erasesize);
 
-	buf = vmalloc(sizeof(struct bcm_tag));
-	if (!buf)
-		return -ENOMEM;
-
-	/* Get the tag */
-	ret = bcm63xx_read_image_tag(master, "rootfs", cfelen, buf);
-	if (!ret) {
-		STR_NULL_TERMINATE(buf->flash_image_start);
-		if (kstrtouint(buf->flash_image_start, 10, &rootfsaddr) ||
-				rootfsaddr < BCM963XX_EXTENDED_SIZE) {
-			pr_err("invalid rootfs address: %*ph\n",
-				(int)sizeof(buf->flash_image_start),
-				buf->flash_image_start);
-			goto invalid_tag;
-		}
-
-		STR_NULL_TERMINATE(buf->kernel_address);
-		if (kstrtouint(buf->kernel_address, 10, &kerneladdr) ||
-				kerneladdr < BCM963XX_EXTENDED_SIZE) {
-			pr_err("invalid kernel address: %*ph\n",
-				(int)sizeof(buf->kernel_address),
-				buf->kernel_address);
-			goto invalid_tag;
-		}
-
-		STR_NULL_TERMINATE(buf->kernel_length);
-		if (kstrtouint(buf->kernel_length, 10, &kernellen)) {
-			pr_err("invalid kernel length: %*ph\n",
-				(int)sizeof(buf->kernel_length),
-				buf->kernel_length);
-			goto invalid_tag;
-		}
-
-		STR_NULL_TERMINATE(buf->total_length);
-		if (kstrtouint(buf->total_length, 10, &totallen)) {
-			pr_err("invalid total length: %*ph\n",
-				(int)sizeof(buf->total_length),
-				buf->total_length);
-			goto invalid_tag;
-		}
-
-		kerneladdr = kerneladdr - BCM963XX_EXTENDED_SIZE;
-		rootfsaddr = rootfsaddr - BCM963XX_EXTENDED_SIZE;
-		spareaddr = roundup(totallen, master->erasesize) + cfelen;
-
-		if (rootfsaddr < kerneladdr) {
-			/* default Broadcom layout */
-			rootfslen = kerneladdr - rootfsaddr;
-			rootfs_first = true;
-		} else {
-			/* OpenWrt layout */
-			rootfsaddr = kerneladdr + kernellen;
-			rootfslen = spareaddr - rootfsaddr;
-		}
-	} else if (ret > 0) {
-invalid_tag:
-		kernellen = 0;
-		rootfslen = 0;
-		rootfsaddr = 0;
-		spareaddr = cfelen;
-	} else {
-		goto out;
-	}
-	sparelen = master->size - spareaddr - nvramlen;
-
-	/* Determine number of partitions */
-	if (rootfslen > 0)
-		nrparts++;
-
-	if (kernellen > 0)
-		nrparts++;
-
 	parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
-	if (!parts) {
-		ret = -ENOMEM;
-		goto out;
-	}
+	if (!parts)
+		return -ENOMEM;
 
 	/* Start building partition list */
 	parts[curpart].name = "CFE";
@@ -231,30 +125,6 @@ static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	parts[curpart].size = cfelen;
 	curpart++;
 
-	if (kernellen > 0) {
-		int kernelpart = curpart;
-
-		if (rootfslen > 0 && rootfs_first)
-			kernelpart++;
-		parts[kernelpart].name = "kernel";
-		parts[kernelpart].offset = kerneladdr;
-		parts[kernelpart].size = kernellen;
-		curpart++;
-	}
-
-	if (rootfslen > 0) {
-		int rootfspart = curpart;
-
-		if (kernellen > 0 && rootfs_first)
-			rootfspart--;
-		parts[rootfspart].name = "rootfs";
-		parts[rootfspart].offset = rootfsaddr;
-		parts[rootfspart].size = rootfslen;
-		if (sparelen > 0  && !rootfs_first)
-			parts[rootfspart].size += sparelen;
-		curpart++;
-	}
-
 	parts[curpart].name = "nvram";
 	parts[curpart].offset = master->size - nvramlen;
 	parts[curpart].size = nvramlen;
@@ -264,22 +134,13 @@ static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	parts[curpart].name = "linux";
 	parts[curpart].offset = cfelen;
 	parts[curpart].size = master->size - cfelen - nvramlen;
+	parts[curpart].types = bcm63xx_cfe_part_types;
 
 	for (i = 0; i < nrparts; i++)
 		pr_info("Partition %d is %s offset %llx and length %llx\n", i,
 			parts[i].name, parts[i].offset,	parts[i].size);
 
-	pr_info("Spare partition is offset %x and length %x\n",	spareaddr,
-		sparelen);
-
 	*pparts = parts;
-	ret = 0;
-
-out:
-	vfree(buf);
-
-	if (ret)
-		return ret;
 
 	return nrparts;
 }
diff --git a/drivers/mtd/parsers/Kconfig b/drivers/mtd/parsers/Kconfig
index ee5ab994132f..a17d751af8da 100644
--- a/drivers/mtd/parsers/Kconfig
+++ b/drivers/mtd/parsers/Kconfig
@@ -1,3 +1,14 @@
+config MTD_PARSER_IMAGETAG
+	tristate "Parser for BCM963XX Image Tag format partitions"
+	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
+	select CRC32
+	help
+	  Image Tag is the firmware header used by broadcom on their xDSL line
+	  of devices. It is used to describe the offsets and lengths of kernel
+	  and rootfs partitions.
+	  This driver adds support for parsing a partition with an Image Tag
+	  header and creates up to two partitions, kernel and rootfs.
+
 config MTD_PARSER_TRX
 	tristate "Parser for TRX format partitions"
 	depends on MTD && (BCM47XX || ARCH_BCM_5301X || COMPILE_TEST)
diff --git a/drivers/mtd/parsers/Makefile b/drivers/mtd/parsers/Makefile
index 5b1bcc3d90d9..02d7a9db8370 100644
--- a/drivers/mtd/parsers/Makefile
+++ b/drivers/mtd/parsers/Makefile
@@ -1,2 +1,3 @@
+obj-$(CONFIG_MTD_PARSER_IMAGETAG)	+= parser_imagetag.o
 obj-$(CONFIG_MTD_PARSER_TRX)		+= parser_trx.o
 obj-$(CONFIG_MTD_SHARPSL_PARTS)		+= sharpslpart.o
diff --git a/drivers/mtd/parsers/parser_imagetag.c b/drivers/mtd/parsers/parser_imagetag.c
new file mode 100644
index 000000000000..81e2fc70c889
--- /dev/null
+++ b/drivers/mtd/parsers/parser_imagetag.c
@@ -0,0 +1,214 @@
+/*
+ * BCM63XX CFE image tag parser
+ *
+ * Copyright © 2006-2008  Florian Fainelli <florian@openwrt.org>
+ *			  Mike Albon <malbon@openwrt.org>
+ * Copyright © 2009-2010  Daniel Dickinson <openwrt@cshore.neomailbox.net>
+ * Copyright © 2011-2013  Jonas Gorski <jonas.gorski@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/bcm963xx_tag.h>
+#include <linux/crc32.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/sizes.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+
+/* Ensure strings read from flash structs are null terminated */
+#define STR_NULL_TERMINATE(x) \
+	do { char *_str = (x); _str[sizeof(x) - 1] = 0; } while (0)
+
+static int bcm963xx_read_imagetag(struct mtd_info *master, const char *name,
+	loff_t tag_offset, struct bcm_tag *buf)
+{
+	int ret;
+	size_t retlen;
+	u32 computed_crc;
+
+	ret = mtd_read(master, tag_offset, sizeof(*buf), &retlen, (void *)buf);
+	if (ret)
+		return ret;
+
+	if (retlen != sizeof(*buf))
+		return -EIO;
+
+	computed_crc = crc32_le(IMAGETAG_CRC_START, (u8 *)buf,
+				offsetof(struct bcm_tag, header_crc));
+	if (computed_crc == buf->header_crc) {
+		STR_NULL_TERMINATE(buf->board_id);
+		STR_NULL_TERMINATE(buf->tag_version);
+
+		pr_info("%s: CFE image tag found at 0x%llx with version %s, board type %s\n",
+			name, tag_offset, buf->tag_version, buf->board_id);
+
+		return 0;
+	}
+
+	pr_warn("%s: CFE image tag at 0x%llx CRC invalid (expected %08x, actual %08x)\n",
+		name, tag_offset, buf->header_crc, computed_crc);
+	return -EINVAL;
+}
+
+static int bcm963xx_parse_imagetag_partitions(struct mtd_info *master,
+					const struct mtd_partition **pparts,
+					struct mtd_part_parser_data *data)
+{
+	/* CFE, NVRAM and global Linux are always present */
+	int nrparts = 0, curpart = 0;
+	struct bcm_tag *buf = NULL;
+	struct mtd_partition *parts;
+	int ret;
+	unsigned int rootfsaddr, kerneladdr, spareaddr, offset;
+	unsigned int rootfslen, kernellen, sparelen, totallen;
+	int i;
+	bool rootfs_first = false;
+
+	buf = vmalloc(sizeof(struct bcm_tag));
+	if (!buf)
+		return -ENOMEM;
+
+	/* Get the tag */
+	ret = bcm963xx_read_imagetag(master, "rootfs", 0, buf);
+	if (!ret) {
+		STR_NULL_TERMINATE(buf->flash_image_start);
+		if (kstrtouint(buf->flash_image_start, 10, &rootfsaddr) ||
+				rootfsaddr < BCM963XX_EXTENDED_SIZE) {
+			pr_err("invalid rootfs address: %*ph\n",
+				(int)sizeof(buf->flash_image_start),
+				buf->flash_image_start);
+			goto out;
+		}
+
+		STR_NULL_TERMINATE(buf->kernel_address);
+		if (kstrtouint(buf->kernel_address, 10, &kerneladdr) ||
+				kerneladdr < BCM963XX_EXTENDED_SIZE) {
+			pr_err("invalid kernel address: %*ph\n",
+				(int)sizeof(buf->kernel_address),
+				buf->kernel_address);
+			goto out;
+		}
+
+		STR_NULL_TERMINATE(buf->kernel_length);
+		if (kstrtouint(buf->kernel_length, 10, &kernellen)) {
+			pr_err("invalid kernel length: %*ph\n",
+				(int)sizeof(buf->kernel_length),
+				buf->kernel_length);
+			goto out;
+		}
+
+		STR_NULL_TERMINATE(buf->total_length);
+		if (kstrtouint(buf->total_length, 10, &totallen)) {
+			pr_err("invalid total length: %*ph\n",
+				(int)sizeof(buf->total_length),
+				buf->total_length);
+			goto out;
+		}
+
+		/*
+		 * Addresses are flash absolute, so convert to partition
+		 * relative addresses. Assume either kernel or rootfs will
+		 * directly follow the image tag.
+		 */
+		if (rootfsaddr < kerneladdr)
+			offset = rootfsaddr - sizeof(struct bcm_tag);
+		else
+			offset = kerneladdr - sizeof(struct bcm_tag);
+
+		kerneladdr = kerneladdr - offset;
+		rootfsaddr = rootfsaddr - offset;
+		spareaddr = roundup(totallen, master->erasesize);
+
+		if (rootfsaddr < kerneladdr) {
+			/* default Broadcom layout */
+			rootfslen = kerneladdr - rootfsaddr;
+			rootfs_first = true;
+		} else {
+			/* OpenWrt layout */
+			rootfsaddr = kerneladdr + kernellen;
+			rootfslen = spareaddr - rootfsaddr;
+		}
+	} else {
+		goto out;
+	}
+	sparelen = master->size - spareaddr;
+
+	/* Determine number of partitions */
+	if (rootfslen > 0)
+		nrparts++;
+
+	if (kernellen > 0)
+		nrparts++;
+
+	parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
+	if (!parts) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	/* Start building partition list */
+	if (kernellen > 0) {
+		int kernelpart = curpart;
+
+		if (rootfslen > 0 && rootfs_first)
+			kernelpart++;
+		parts[kernelpart].name = "kernel";
+		parts[kernelpart].offset = kerneladdr;
+		parts[kernelpart].size = kernellen;
+		curpart++;
+	}
+
+	if (rootfslen > 0) {
+		int rootfspart = curpart;
+
+		if (kernellen > 0 && rootfs_first)
+			rootfspart--;
+		parts[rootfspart].name = "rootfs";
+		parts[rootfspart].offset = rootfsaddr;
+		parts[rootfspart].size = rootfslen;
+		if (sparelen > 0  && !rootfs_first)
+			parts[rootfspart].size += sparelen;
+		curpart++;
+	}
+
+	for (i = 0; i < nrparts; i++)
+		pr_info("Partition %d is %s offset %llx and length %llx\n", i,
+			parts[i].name, parts[i].offset,	parts[i].size);
+
+	pr_info("Spare partition is offset %x and length %x\n",	spareaddr,
+		sparelen);
+
+	*pparts = parts;
+	ret = 0;
+
+out:
+	vfree(buf);
+
+	if (ret)
+		return ret;
+
+	return nrparts;
+}
+
+static struct mtd_part_parser bcm963xx_imagetag_parser = {
+	.parse_fn = bcm963xx_parse_imagetag_partitions,
+	.name = "bcm963xx-imagetag",
+};
+module_mtd_part_parser(bcm963xx_imagetag_parser);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Daniel Dickinson <openwrt@cshore.neomailbox.net>");
+MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
+MODULE_AUTHOR("Mike Albon <malbon@openwrt.org>");
+MODULE_AUTHOR("Jonas Gorski <jonas.gorski@gmail.com");
+MODULE_DESCRIPTION("MTD parser for BCM963XX CFE Image Tag partitions");
-- 
2.13.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 3/5] mtd: bcm63xxpart: move imagetag parsing to its own parser
@ 2018-08-28 11:19   ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut,
	Richard Weinberger, Rob Herring, Mark Rutland, Florian Fainelli

Move the bcm963xx Image Tag parsing into its own partition parser. This
Allows reusing the parser with different full flash parsers.

While moving it, rename it to bcm963* to better reflect it isn't chip,
but reference implementation specific.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/mtd/Kconfig                   |   1 +
 drivers/mtd/bcm63xxpart.c             | 155 ++----------------------
 drivers/mtd/parsers/Kconfig           |  11 ++
 drivers/mtd/parsers/Makefile          |   1 +
 drivers/mtd/parsers/parser_imagetag.c | 214 ++++++++++++++++++++++++++++++++++
 5 files changed, 235 insertions(+), 147 deletions(-)
 create mode 100644 drivers/mtd/parsers/parser_imagetag.c

diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig
index c77f537323ec..a3bd0e315990 100644
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
@@ -143,6 +143,7 @@ config MTD_BCM63XX_PARTS
 	tristate "BCM63XX CFE partitioning support"
 	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
 	select CRC32
+	select MTD_PARSER_IMAGETAG
 	help
 	  This provides partions parsing for BCM63xx devices with CFE
 	  bootloaders.
diff --git a/drivers/mtd/bcm63xxpart.c b/drivers/mtd/bcm63xxpart.c
index f639b4c960f0..b2bd04764e95 100644
--- a/drivers/mtd/bcm63xxpart.c
+++ b/drivers/mtd/bcm63xxpart.c
@@ -94,51 +94,19 @@ static int bcm63xx_read_nvram(struct mtd_info *master,
 	return 0;
 }
 
-static int bcm63xx_read_image_tag(struct mtd_info *master, const char *name,
-	loff_t tag_offset, struct bcm_tag *buf)
-{
-	int ret;
-	size_t retlen;
-	u32 computed_crc;
-
-	ret = mtd_read(master, tag_offset, sizeof(*buf), &retlen, (void *)buf);
-	if (ret)
-		return ret;
-
-	if (retlen != sizeof(*buf))
-		return -EIO;
-
-	computed_crc = crc32_le(IMAGETAG_CRC_START, (u8 *)buf,
-				offsetof(struct bcm_tag, header_crc));
-	if (computed_crc == buf->header_crc) {
-		STR_NULL_TERMINATE(buf->board_id);
-		STR_NULL_TERMINATE(buf->tag_version);
-
-		pr_info("%s: CFE image tag found at 0x%llx with version %s, board type %s\n",
-			name, tag_offset, buf->tag_version, buf->board_id);
-
-		return 0;
-	}
-
-	pr_warn("%s: CFE image tag at 0x%llx CRC invalid (expected %08x, actual %08x)\n",
-		name, tag_offset, buf->header_crc, computed_crc);
-	return 1;
-}
+static const char * const bcm63xx_cfe_part_types[] = {
+	"bcm963xx-imagetag",
+	NULL,
+};
 
 static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	const struct mtd_partition **pparts, struct bcm963xx_nvram *nvram)
 {
-	/* CFE, NVRAM and global Linux are always present */
-	int nrparts = 3, curpart = 0;
-	struct bcm_tag *buf = NULL;
 	struct mtd_partition *parts;
-	int ret;
-	unsigned int rootfsaddr, kerneladdr, spareaddr;
-	unsigned int rootfslen, kernellen, sparelen, totallen;
+	int nrparts = 3, curpart = 0;
 	unsigned int cfelen, nvramlen;
 	unsigned int cfe_erasesize;
 	int i;
-	bool rootfs_first = false;
 
 	cfe_erasesize = max_t(uint32_t, master->erasesize,
 			      BCM963XX_CFE_BLOCK_SIZE);
@@ -147,83 +115,9 @@ static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	nvramlen = nvram->psi_size * SZ_1K;
 	nvramlen = roundup(nvramlen, cfe_erasesize);
 
-	buf = vmalloc(sizeof(struct bcm_tag));
-	if (!buf)
-		return -ENOMEM;
-
-	/* Get the tag */
-	ret = bcm63xx_read_image_tag(master, "rootfs", cfelen, buf);
-	if (!ret) {
-		STR_NULL_TERMINATE(buf->flash_image_start);
-		if (kstrtouint(buf->flash_image_start, 10, &rootfsaddr) ||
-				rootfsaddr < BCM963XX_EXTENDED_SIZE) {
-			pr_err("invalid rootfs address: %*ph\n",
-				(int)sizeof(buf->flash_image_start),
-				buf->flash_image_start);
-			goto invalid_tag;
-		}
-
-		STR_NULL_TERMINATE(buf->kernel_address);
-		if (kstrtouint(buf->kernel_address, 10, &kerneladdr) ||
-				kerneladdr < BCM963XX_EXTENDED_SIZE) {
-			pr_err("invalid kernel address: %*ph\n",
-				(int)sizeof(buf->kernel_address),
-				buf->kernel_address);
-			goto invalid_tag;
-		}
-
-		STR_NULL_TERMINATE(buf->kernel_length);
-		if (kstrtouint(buf->kernel_length, 10, &kernellen)) {
-			pr_err("invalid kernel length: %*ph\n",
-				(int)sizeof(buf->kernel_length),
-				buf->kernel_length);
-			goto invalid_tag;
-		}
-
-		STR_NULL_TERMINATE(buf->total_length);
-		if (kstrtouint(buf->total_length, 10, &totallen)) {
-			pr_err("invalid total length: %*ph\n",
-				(int)sizeof(buf->total_length),
-				buf->total_length);
-			goto invalid_tag;
-		}
-
-		kerneladdr = kerneladdr - BCM963XX_EXTENDED_SIZE;
-		rootfsaddr = rootfsaddr - BCM963XX_EXTENDED_SIZE;
-		spareaddr = roundup(totallen, master->erasesize) + cfelen;
-
-		if (rootfsaddr < kerneladdr) {
-			/* default Broadcom layout */
-			rootfslen = kerneladdr - rootfsaddr;
-			rootfs_first = true;
-		} else {
-			/* OpenWrt layout */
-			rootfsaddr = kerneladdr + kernellen;
-			rootfslen = spareaddr - rootfsaddr;
-		}
-	} else if (ret > 0) {
-invalid_tag:
-		kernellen = 0;
-		rootfslen = 0;
-		rootfsaddr = 0;
-		spareaddr = cfelen;
-	} else {
-		goto out;
-	}
-	sparelen = master->size - spareaddr - nvramlen;
-
-	/* Determine number of partitions */
-	if (rootfslen > 0)
-		nrparts++;
-
-	if (kernellen > 0)
-		nrparts++;
-
 	parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
-	if (!parts) {
-		ret = -ENOMEM;
-		goto out;
-	}
+	if (!parts)
+		return -ENOMEM;
 
 	/* Start building partition list */
 	parts[curpart].name = "CFE";
@@ -231,30 +125,6 @@ static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	parts[curpart].size = cfelen;
 	curpart++;
 
-	if (kernellen > 0) {
-		int kernelpart = curpart;
-
-		if (rootfslen > 0 && rootfs_first)
-			kernelpart++;
-		parts[kernelpart].name = "kernel";
-		parts[kernelpart].offset = kerneladdr;
-		parts[kernelpart].size = kernellen;
-		curpart++;
-	}
-
-	if (rootfslen > 0) {
-		int rootfspart = curpart;
-
-		if (kernellen > 0 && rootfs_first)
-			rootfspart--;
-		parts[rootfspart].name = "rootfs";
-		parts[rootfspart].offset = rootfsaddr;
-		parts[rootfspart].size = rootfslen;
-		if (sparelen > 0  && !rootfs_first)
-			parts[rootfspart].size += sparelen;
-		curpart++;
-	}
-
 	parts[curpart].name = "nvram";
 	parts[curpart].offset = master->size - nvramlen;
 	parts[curpart].size = nvramlen;
@@ -264,22 +134,13 @@ static int bcm63xx_parse_cfe_nor_partitions(struct mtd_info *master,
 	parts[curpart].name = "linux";
 	parts[curpart].offset = cfelen;
 	parts[curpart].size = master->size - cfelen - nvramlen;
+	parts[curpart].types = bcm63xx_cfe_part_types;
 
 	for (i = 0; i < nrparts; i++)
 		pr_info("Partition %d is %s offset %llx and length %llx\n", i,
 			parts[i].name, parts[i].offset,	parts[i].size);
 
-	pr_info("Spare partition is offset %x and length %x\n",	spareaddr,
-		sparelen);
-
 	*pparts = parts;
-	ret = 0;
-
-out:
-	vfree(buf);
-
-	if (ret)
-		return ret;
 
 	return nrparts;
 }
diff --git a/drivers/mtd/parsers/Kconfig b/drivers/mtd/parsers/Kconfig
index ee5ab994132f..a17d751af8da 100644
--- a/drivers/mtd/parsers/Kconfig
+++ b/drivers/mtd/parsers/Kconfig
@@ -1,3 +1,14 @@
+config MTD_PARSER_IMAGETAG
+	tristate "Parser for BCM963XX Image Tag format partitions"
+	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
+	select CRC32
+	help
+	  Image Tag is the firmware header used by broadcom on their xDSL line
+	  of devices. It is used to describe the offsets and lengths of kernel
+	  and rootfs partitions.
+	  This driver adds support for parsing a partition with an Image Tag
+	  header and creates up to two partitions, kernel and rootfs.
+
 config MTD_PARSER_TRX
 	tristate "Parser for TRX format partitions"
 	depends on MTD && (BCM47XX || ARCH_BCM_5301X || COMPILE_TEST)
diff --git a/drivers/mtd/parsers/Makefile b/drivers/mtd/parsers/Makefile
index 5b1bcc3d90d9..02d7a9db8370 100644
--- a/drivers/mtd/parsers/Makefile
+++ b/drivers/mtd/parsers/Makefile
@@ -1,2 +1,3 @@
+obj-$(CONFIG_MTD_PARSER_IMAGETAG)	+= parser_imagetag.o
 obj-$(CONFIG_MTD_PARSER_TRX)		+= parser_trx.o
 obj-$(CONFIG_MTD_SHARPSL_PARTS)		+= sharpslpart.o
diff --git a/drivers/mtd/parsers/parser_imagetag.c b/drivers/mtd/parsers/parser_imagetag.c
new file mode 100644
index 000000000000..81e2fc70c889
--- /dev/null
+++ b/drivers/mtd/parsers/parser_imagetag.c
@@ -0,0 +1,214 @@
+/*
+ * BCM63XX CFE image tag parser
+ *
+ * Copyright © 2006-2008  Florian Fainelli <florian@openwrt.org>
+ *			  Mike Albon <malbon@openwrt.org>
+ * Copyright © 2009-2010  Daniel Dickinson <openwrt@cshore.neomailbox.net>
+ * Copyright © 2011-2013  Jonas Gorski <jonas.gorski@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/bcm963xx_tag.h>
+#include <linux/crc32.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/sizes.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+
+/* Ensure strings read from flash structs are null terminated */
+#define STR_NULL_TERMINATE(x) \
+	do { char *_str = (x); _str[sizeof(x) - 1] = 0; } while (0)
+
+static int bcm963xx_read_imagetag(struct mtd_info *master, const char *name,
+	loff_t tag_offset, struct bcm_tag *buf)
+{
+	int ret;
+	size_t retlen;
+	u32 computed_crc;
+
+	ret = mtd_read(master, tag_offset, sizeof(*buf), &retlen, (void *)buf);
+	if (ret)
+		return ret;
+
+	if (retlen != sizeof(*buf))
+		return -EIO;
+
+	computed_crc = crc32_le(IMAGETAG_CRC_START, (u8 *)buf,
+				offsetof(struct bcm_tag, header_crc));
+	if (computed_crc == buf->header_crc) {
+		STR_NULL_TERMINATE(buf->board_id);
+		STR_NULL_TERMINATE(buf->tag_version);
+
+		pr_info("%s: CFE image tag found at 0x%llx with version %s, board type %s\n",
+			name, tag_offset, buf->tag_version, buf->board_id);
+
+		return 0;
+	}
+
+	pr_warn("%s: CFE image tag at 0x%llx CRC invalid (expected %08x, actual %08x)\n",
+		name, tag_offset, buf->header_crc, computed_crc);
+	return -EINVAL;
+}
+
+static int bcm963xx_parse_imagetag_partitions(struct mtd_info *master,
+					const struct mtd_partition **pparts,
+					struct mtd_part_parser_data *data)
+{
+	/* CFE, NVRAM and global Linux are always present */
+	int nrparts = 0, curpart = 0;
+	struct bcm_tag *buf = NULL;
+	struct mtd_partition *parts;
+	int ret;
+	unsigned int rootfsaddr, kerneladdr, spareaddr, offset;
+	unsigned int rootfslen, kernellen, sparelen, totallen;
+	int i;
+	bool rootfs_first = false;
+
+	buf = vmalloc(sizeof(struct bcm_tag));
+	if (!buf)
+		return -ENOMEM;
+
+	/* Get the tag */
+	ret = bcm963xx_read_imagetag(master, "rootfs", 0, buf);
+	if (!ret) {
+		STR_NULL_TERMINATE(buf->flash_image_start);
+		if (kstrtouint(buf->flash_image_start, 10, &rootfsaddr) ||
+				rootfsaddr < BCM963XX_EXTENDED_SIZE) {
+			pr_err("invalid rootfs address: %*ph\n",
+				(int)sizeof(buf->flash_image_start),
+				buf->flash_image_start);
+			goto out;
+		}
+
+		STR_NULL_TERMINATE(buf->kernel_address);
+		if (kstrtouint(buf->kernel_address, 10, &kerneladdr) ||
+				kerneladdr < BCM963XX_EXTENDED_SIZE) {
+			pr_err("invalid kernel address: %*ph\n",
+				(int)sizeof(buf->kernel_address),
+				buf->kernel_address);
+			goto out;
+		}
+
+		STR_NULL_TERMINATE(buf->kernel_length);
+		if (kstrtouint(buf->kernel_length, 10, &kernellen)) {
+			pr_err("invalid kernel length: %*ph\n",
+				(int)sizeof(buf->kernel_length),
+				buf->kernel_length);
+			goto out;
+		}
+
+		STR_NULL_TERMINATE(buf->total_length);
+		if (kstrtouint(buf->total_length, 10, &totallen)) {
+			pr_err("invalid total length: %*ph\n",
+				(int)sizeof(buf->total_length),
+				buf->total_length);
+			goto out;
+		}
+
+		/*
+		 * Addresses are flash absolute, so convert to partition
+		 * relative addresses. Assume either kernel or rootfs will
+		 * directly follow the image tag.
+		 */
+		if (rootfsaddr < kerneladdr)
+			offset = rootfsaddr - sizeof(struct bcm_tag);
+		else
+			offset = kerneladdr - sizeof(struct bcm_tag);
+
+		kerneladdr = kerneladdr - offset;
+		rootfsaddr = rootfsaddr - offset;
+		spareaddr = roundup(totallen, master->erasesize);
+
+		if (rootfsaddr < kerneladdr) {
+			/* default Broadcom layout */
+			rootfslen = kerneladdr - rootfsaddr;
+			rootfs_first = true;
+		} else {
+			/* OpenWrt layout */
+			rootfsaddr = kerneladdr + kernellen;
+			rootfslen = spareaddr - rootfsaddr;
+		}
+	} else {
+		goto out;
+	}
+	sparelen = master->size - spareaddr;
+
+	/* Determine number of partitions */
+	if (rootfslen > 0)
+		nrparts++;
+
+	if (kernellen > 0)
+		nrparts++;
+
+	parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
+	if (!parts) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	/* Start building partition list */
+	if (kernellen > 0) {
+		int kernelpart = curpart;
+
+		if (rootfslen > 0 && rootfs_first)
+			kernelpart++;
+		parts[kernelpart].name = "kernel";
+		parts[kernelpart].offset = kerneladdr;
+		parts[kernelpart].size = kernellen;
+		curpart++;
+	}
+
+	if (rootfslen > 0) {
+		int rootfspart = curpart;
+
+		if (kernellen > 0 && rootfs_first)
+			rootfspart--;
+		parts[rootfspart].name = "rootfs";
+		parts[rootfspart].offset = rootfsaddr;
+		parts[rootfspart].size = rootfslen;
+		if (sparelen > 0  && !rootfs_first)
+			parts[rootfspart].size += sparelen;
+		curpart++;
+	}
+
+	for (i = 0; i < nrparts; i++)
+		pr_info("Partition %d is %s offset %llx and length %llx\n", i,
+			parts[i].name, parts[i].offset,	parts[i].size);
+
+	pr_info("Spare partition is offset %x and length %x\n",	spareaddr,
+		sparelen);
+
+	*pparts = parts;
+	ret = 0;
+
+out:
+	vfree(buf);
+
+	if (ret)
+		return ret;
+
+	return nrparts;
+}
+
+static struct mtd_part_parser bcm963xx_imagetag_parser = {
+	.parse_fn = bcm963xx_parse_imagetag_partitions,
+	.name = "bcm963xx-imagetag",
+};
+module_mtd_part_parser(bcm963xx_imagetag_parser);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Daniel Dickinson <openwrt@cshore.neomailbox.net>");
+MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
+MODULE_AUTHOR("Mike Albon <malbon@openwrt.org>");
+MODULE_AUTHOR("Jonas Gorski <jonas.gorski@gmail.com");
+MODULE_DESCRIPTION("MTD parser for BCM963XX CFE Image Tag partitions");
-- 
2.13.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  2018-08-28 11:19 ` Jonas Gorski
@ 2018-08-28 11:19   ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: Mark Rutland, Florian Fainelli, Marek Vasut, Richard Weinberger,
	Boris Brezillon, Rob Herring, Brian Norris, David Woodhouse

Describe how to use the BCM963XX ImageTag format in a mixed flash layout
environment.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
 1 file changed, 78 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt

diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
new file mode 100644
index 000000000000..f4a444d69d9a
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
@@ -0,0 +1,78 @@
+Broadcom BCM963XX ImageTag Partition Container
+==============================================
+
+Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
+partitions or non standard bootloader partition sizes. For these a mixed layout
+needs to be used with an explicit firmware partition.
+
+The BCM963XX ImageTag is a simple firmware header describing the offsets and
+sizes of the rootfs and kernel parts contained in the firmware.
+
+Required properties:
+- compatible : must be "brcm,bcm963xx-imagetag"
+
+Examples:
+
+flash@1e000000 {
+	compatible = "cfi-flash";
+	reg = <0x1e000000 0x2000000>;
+	bank-width = <2>;
+
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		cfe@0 {
+			reg = <0x0 0x10000>;
+			read-only;
+		};
+
+		firmware@10000 {
+			reg = <0x10000 0x7d0000>;
+			compatible = "brcm,bcm963xx-imagetag";
+		};
+
+		caldata@7e0000 {
+			reg = <0x7e0000 0x10000>;
+			read-only;
+		};
+
+		nvram@7f0000 {
+			reg = <0x7f0000 0x10000>;
+		};
+	};
+};
+
+
+flash@1e000000 {
+	compatible = "cfi-flash";
+	reg = <0x1e000000 0x2000000>;
+	bank-width = <2>;
+
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		/*
+		 * Some devices use a flash chip with 64k erase blocks, some
+		 * use one with 128k erase blocks, so the vendor decided to
+		 * always use 128k as the firmware offset.
+		 */
+
+		cfe@0 {
+			reg = <0x0 0x20000>;
+			read-only;
+		};
+
+		firmware@20000 {
+			reg = <0x20000 0x7c0000>;
+			compatible = "brcm,bcm963xx-imagetag";
+		};
+
+		nvram@7e0000 {
+			reg = <0x7e0000 0x20000>;
+		};
+	};
+};
-- 
2.13.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
@ 2018-08-28 11:19   ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut,
	Richard Weinberger, Rob Herring, Mark Rutland, Florian Fainelli

Describe how to use the BCM963XX ImageTag format in a mixed flash layout
environment.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
 1 file changed, 78 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt

diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
new file mode 100644
index 000000000000..f4a444d69d9a
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
@@ -0,0 +1,78 @@
+Broadcom BCM963XX ImageTag Partition Container
+==============================================
+
+Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
+partitions or non standard bootloader partition sizes. For these a mixed layout
+needs to be used with an explicit firmware partition.
+
+The BCM963XX ImageTag is a simple firmware header describing the offsets and
+sizes of the rootfs and kernel parts contained in the firmware.
+
+Required properties:
+- compatible : must be "brcm,bcm963xx-imagetag"
+
+Examples:
+
+flash@1e000000 {
+	compatible = "cfi-flash";
+	reg = <0x1e000000 0x2000000>;
+	bank-width = <2>;
+
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		cfe@0 {
+			reg = <0x0 0x10000>;
+			read-only;
+		};
+
+		firmware@10000 {
+			reg = <0x10000 0x7d0000>;
+			compatible = "brcm,bcm963xx-imagetag";
+		};
+
+		caldata@7e0000 {
+			reg = <0x7e0000 0x10000>;
+			read-only;
+		};
+
+		nvram@7f0000 {
+			reg = <0x7f0000 0x10000>;
+		};
+	};
+};
+
+
+flash@1e000000 {
+	compatible = "cfi-flash";
+	reg = <0x1e000000 0x2000000>;
+	bank-width = <2>;
+
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		/*
+		 * Some devices use a flash chip with 64k erase blocks, some
+		 * use one with 128k erase blocks, so the vendor decided to
+		 * always use 128k as the firmware offset.
+		 */
+
+		cfe@0 {
+			reg = <0x0 0x20000>;
+			read-only;
+		};
+
+		firmware@20000 {
+			reg = <0x20000 0x7c0000>;
+			compatible = "brcm,bcm963xx-imagetag";
+		};
+
+		nvram@7e0000 {
+			reg = <0x7e0000 0x20000>;
+		};
+	};
+};
-- 
2.13.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 5/5] mtd: parser_imagetag: add of_match_table support
  2018-08-28 11:19 ` Jonas Gorski
@ 2018-08-28 11:19   ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: Mark Rutland, Florian Fainelli, Marek Vasut, Richard Weinberger,
	Boris Brezillon, Rob Herring, Brian Norris, David Woodhouse

Allow matching the imagetag parser for fixed partitions defined in the
device tree.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/mtd/parsers/parser_imagetag.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/mtd/parsers/parser_imagetag.c b/drivers/mtd/parsers/parser_imagetag.c
index 81e2fc70c889..6897a8c37142 100644
--- a/drivers/mtd/parsers/parser_imagetag.c
+++ b/drivers/mtd/parsers/parser_imagetag.c
@@ -24,6 +24,7 @@
 #include <linux/vmalloc.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <linux/of.h>
 
 /* Ensure strings read from flash structs are null terminated */
 #define STR_NULL_TERMINATE(x) \
@@ -200,9 +201,16 @@ static int bcm963xx_parse_imagetag_partitions(struct mtd_info *master,
 	return nrparts;
 }
 
+static const struct of_device_id parse_bcm963xx_imagetag_match_table[] = {
+	{ .compatible = "brcm,bcm963xx-imagetag" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, parse_bcm963xx_imagetag_match_table);
+
 static struct mtd_part_parser bcm963xx_imagetag_parser = {
 	.parse_fn = bcm963xx_parse_imagetag_partitions,
 	.name = "bcm963xx-imagetag",
+	.of_match_table = parse_bcm963xx_imagetag_match_table,
 };
 module_mtd_part_parser(bcm963xx_imagetag_parser);
 
-- 
2.13.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 5/5] mtd: parser_imagetag: add of_match_table support
@ 2018-08-28 11:19   ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-08-28 11:19 UTC (permalink / raw)
  To: linux-mtd, devicetree
  Cc: David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut,
	Richard Weinberger, Rob Herring, Mark Rutland, Florian Fainelli

Allow matching the imagetag parser for fixed partitions defined in the
device tree.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/mtd/parsers/parser_imagetag.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/mtd/parsers/parser_imagetag.c b/drivers/mtd/parsers/parser_imagetag.c
index 81e2fc70c889..6897a8c37142 100644
--- a/drivers/mtd/parsers/parser_imagetag.c
+++ b/drivers/mtd/parsers/parser_imagetag.c
@@ -24,6 +24,7 @@
 #include <linux/vmalloc.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <linux/of.h>
 
 /* Ensure strings read from flash structs are null terminated */
 #define STR_NULL_TERMINATE(x) \
@@ -200,9 +201,16 @@ static int bcm963xx_parse_imagetag_partitions(struct mtd_info *master,
 	return nrparts;
 }
 
+static const struct of_device_id parse_bcm963xx_imagetag_match_table[] = {
+	{ .compatible = "brcm,bcm963xx-imagetag" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, parse_bcm963xx_imagetag_match_table);
+
 static struct mtd_part_parser bcm963xx_imagetag_parser = {
 	.parse_fn = bcm963xx_parse_imagetag_partitions,
 	.name = "bcm963xx-imagetag",
+	.of_match_table = parse_bcm963xx_imagetag_match_table,
 };
 module_mtd_part_parser(bcm963xx_imagetag_parser);
 
-- 
2.13.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  2018-08-28 11:19   ` Jonas Gorski
@ 2018-09-04  0:30     ` Rob Herring
  -1 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2018-09-04  0:30 UTC (permalink / raw)
  To: Jonas Gorski
  Cc: Mark Rutland, devicetree, Florian Fainelli, Boris Brezillon,
	Richard Weinberger, Marek Vasut, linux-mtd, Brian Norris,
	David Woodhouse

On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
> environment.
> 
> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
> ---
>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
>  1 file changed, 78 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> 
> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> new file mode 100644
> index 000000000000..f4a444d69d9a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> @@ -0,0 +1,78 @@
> +Broadcom BCM963XX ImageTag Partition Container
> +==============================================
> +
> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
> +partitions or non standard bootloader partition sizes. For these a mixed layout
> +needs to be used with an explicit firmware partition.
> +
> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
> +sizes of the rootfs and kernel parts contained in the firmware.
> +
> +Required properties:
> +- compatible : must be "brcm,bcm963xx-imagetag"
> +
> +Examples:
> +
> +flash@1e000000 {
> +	compatible = "cfi-flash";
> +	reg = <0x1e000000 0x2000000>;
> +	bank-width = <2>;
> +
> +	partitions {
> +		compatible = "fixed-partitions";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		cfe@0 {
> +			reg = <0x0 0x10000>;
> +			read-only;
> +		};
> +
> +		firmware@10000 {
> +			reg = <0x10000 0x7d0000>;
> +			compatible = "brcm,bcm963xx-imagetag";
> +		};
> +
> +		caldata@7e0000 {
> +			reg = <0x7e0000 0x10000>;
> +			read-only;
> +		};
> +
> +		nvram@7f0000 {
> +			reg = <0x7f0000 0x10000>;
> +		};
> +	};
> +};
> +
> +
> +flash@1e000000 {
> +	compatible = "cfi-flash";
> +	reg = <0x1e000000 0x2000000>;
> +	bank-width = <2>;
> +
> +	partitions {
> +		compatible = "fixed-partitions";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		/*
> +		 * Some devices use a flash chip with 64k erase blocks, some
> +		 * use one with 128k erase blocks, so the vendor decided to
> +		 * always use 128k as the firmware offset.
> +		 */

That's a interesting piece of info, but not really a reason to have a 
second example.

> +
> +		cfe@0 {
> +			reg = <0x0 0x20000>;
> +			read-only;
> +		};
> +
> +		firmware@20000 {
> +			reg = <0x20000 0x7c0000>;
> +			compatible = "brcm,bcm963xx-imagetag";
> +		};
> +
> +		nvram@7e0000 {
> +			reg = <0x7e0000 0x20000>;
> +		};
> +	};
> +};
> -- 
> 2.13.2
> 


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
@ 2018-09-04  0:30     ` Rob Herring
  0 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2018-09-04  0:30 UTC (permalink / raw)
  To: Jonas Gorski
  Cc: linux-mtd, devicetree, David Woodhouse, Brian Norris,
	Boris Brezillon, Marek Vasut, Richard Weinberger, Mark Rutland,
	Florian Fainelli

On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
> environment.
> 
> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
> ---
>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
>  1 file changed, 78 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> 
> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> new file mode 100644
> index 000000000000..f4a444d69d9a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> @@ -0,0 +1,78 @@
> +Broadcom BCM963XX ImageTag Partition Container
> +==============================================
> +
> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
> +partitions or non standard bootloader partition sizes. For these a mixed layout
> +needs to be used with an explicit firmware partition.
> +
> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
> +sizes of the rootfs and kernel parts contained in the firmware.
> +
> +Required properties:
> +- compatible : must be "brcm,bcm963xx-imagetag"
> +
> +Examples:
> +
> +flash@1e000000 {
> +	compatible = "cfi-flash";
> +	reg = <0x1e000000 0x2000000>;
> +	bank-width = <2>;
> +
> +	partitions {
> +		compatible = "fixed-partitions";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		cfe@0 {
> +			reg = <0x0 0x10000>;
> +			read-only;
> +		};
> +
> +		firmware@10000 {
> +			reg = <0x10000 0x7d0000>;
> +			compatible = "brcm,bcm963xx-imagetag";
> +		};
> +
> +		caldata@7e0000 {
> +			reg = <0x7e0000 0x10000>;
> +			read-only;
> +		};
> +
> +		nvram@7f0000 {
> +			reg = <0x7f0000 0x10000>;
> +		};
> +	};
> +};
> +
> +
> +flash@1e000000 {
> +	compatible = "cfi-flash";
> +	reg = <0x1e000000 0x2000000>;
> +	bank-width = <2>;
> +
> +	partitions {
> +		compatible = "fixed-partitions";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		/*
> +		 * Some devices use a flash chip with 64k erase blocks, some
> +		 * use one with 128k erase blocks, so the vendor decided to
> +		 * always use 128k as the firmware offset.
> +		 */

That's a interesting piece of info, but not really a reason to have a 
second example.

> +
> +		cfe@0 {
> +			reg = <0x0 0x20000>;
> +			read-only;
> +		};
> +
> +		firmware@20000 {
> +			reg = <0x20000 0x7c0000>;
> +			compatible = "brcm,bcm963xx-imagetag";
> +		};
> +
> +		nvram@7e0000 {
> +			reg = <0x7e0000 0x20000>;
> +		};
> +	};
> +};
> -- 
> 2.13.2
> 

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/5] dt-bindings: mtd: describe the simple BCM963XX NOR flash layout
  2018-08-28 11:19   ` Jonas Gorski
@ 2018-09-04 13:33     ` Rob Herring
  -1 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2018-09-04 13:33 UTC (permalink / raw)
  To: Jonas Gorski
  Cc: devicetree, Florian Fainelli, Boris Brezillon,
	Richard Weinberger, Marek Vasut, linux-mtd, Mark Rutland,
	Brian Norris, David Woodhouse

On Tue, 28 Aug 2018 13:19:40 +0200, Jonas Gorski wrote:
> Add binding documentation for the standard CFE based BCM963XX flash
> layout, found in most devices using a BCM63XX SoC with NOR flash.
> 
> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
> ---
>  .../brcm,bcm963xx-cfe-nor-partitions.txt           | 24 ++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
> 

Reviewed-by: Rob Herring <robh@kernel.org>


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/5] dt-bindings: mtd: describe the simple BCM963XX NOR flash layout
@ 2018-09-04 13:33     ` Rob Herring
  0 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2018-09-04 13:33 UTC (permalink / raw)
  To: Jonas Gorski
  Cc: linux-mtd, devicetree, David Woodhouse, Brian Norris,
	Boris Brezillon, Marek Vasut, Richard Weinberger, ,
	Mark Rutland, Florian Fainelli

On Tue, 28 Aug 2018 13:19:40 +0200, Jonas Gorski wrote:
> Add binding documentation for the standard CFE based BCM963XX flash
> layout, found in most devices using a BCM63XX SoC with NOR flash.
> 
> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
> ---
>  .../brcm,bcm963xx-cfe-nor-partitions.txt           | 24 ++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-cfe-nor-partitions.txt
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  2018-09-04  0:30     ` Rob Herring
@ 2018-09-10  9:02       ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-09-10  9:02 UTC (permalink / raw)
  To: Rob Herring
  Cc: Mark Rutland, devicetree, Florian Fainelli, Boris Brezillon,
	Richard Weinberger, Marek Vasut, MTD Maling List, Brian Norris,
	David Woodhouse

On 4 September 2018 at 02:30, Rob Herring <robh@kernel.org> wrote:
> On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
>> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
>> environment.
>>
>> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
>> ---
>>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
>>  1 file changed, 78 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>
>> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>> new file mode 100644
>> index 000000000000..f4a444d69d9a
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>> @@ -0,0 +1,78 @@
>> +Broadcom BCM963XX ImageTag Partition Container
>> +==============================================
>> +
>> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
>> +partitions or non standard bootloader partition sizes. For these a mixed layout
>> +needs to be used with an explicit firmware partition.
>> +
>> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
>> +sizes of the rootfs and kernel parts contained in the firmware.
>> +
>> +Required properties:
>> +- compatible : must be "brcm,bcm963xx-imagetag"
>> +
>> +Examples:
>> +
>> +flash@1e000000 {
>> +     compatible = "cfi-flash";
>> +     reg = <0x1e000000 0x2000000>;
>> +     bank-width = <2>;
>> +
>> +     partitions {
>> +             compatible = "fixed-partitions";
>> +             #address-cells = <1>;
>> +             #size-cells = <1>;
>> +
>> +             cfe@0 {
>> +                     reg = <0x0 0x10000>;
>> +                     read-only;
>> +             };
>> +
>> +             firmware@10000 {
>> +                     reg = <0x10000 0x7d0000>;
>> +                     compatible = "brcm,bcm963xx-imagetag";
>> +             };
>> +
>> +             caldata@7e0000 {
>> +                     reg = <0x7e0000 0x10000>;
>> +                     read-only;
>> +             };
>> +
>> +             nvram@7f0000 {
>> +                     reg = <0x7f0000 0x10000>;
>> +             };
>> +     };
>> +};
>> +
>> +
>> +flash@1e000000 {
>> +     compatible = "cfi-flash";
>> +     reg = <0x1e000000 0x2000000>;
>> +     bank-width = <2>;
>> +
>> +     partitions {
>> +             compatible = "fixed-partitions";
>> +             #address-cells = <1>;
>> +             #size-cells = <1>;
>> +
>> +             /*
>> +              * Some devices use a flash chip with 64k erase blocks, some
>> +              * use one with 128k erase blocks, so the vendor decided to
>> +              * always use 128k as the firmware offset.
>> +              */
>
> That's a interesting piece of info, but not really a reason to have a
> second example.

Generally, I'd rather have one example too many than one too few, but
I can drop it if you think it's unnecessary. If I do that, can I add
your Ack then here as well for the v2?

>
>> +
>> +             cfe@0 {
>> +                     reg = <0x0 0x20000>;
>> +                     read-only;
>> +             };
>> +
>> +             firmware@20000 {
>> +                     reg = <0x20000 0x7c0000>;
>> +                     compatible = "brcm,bcm963xx-imagetag";
>> +             };
>> +
>> +             nvram@7e0000 {
>> +                     reg = <0x7e0000 0x20000>;
>> +             };
>> +     };
>> +};
>> --
>> 2.13.2
>>
>

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
@ 2018-09-10  9:02       ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-09-10  9:02 UTC (permalink / raw)
  To: Rob Herring
  Cc: MTD Maling List, devicetree, David Woodhouse, Brian Norris,
	Boris Brezillon, Marek Vasut, Richard Weinberger, Mark Rutland,
	Florian Fainelli

On 4 September 2018 at 02:30, Rob Herring <robh@kernel.org> wrote:
> On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
>> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
>> environment.
>>
>> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
>> ---
>>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
>>  1 file changed, 78 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>
>> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>> new file mode 100644
>> index 000000000000..f4a444d69d9a
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>> @@ -0,0 +1,78 @@
>> +Broadcom BCM963XX ImageTag Partition Container
>> +==============================================
>> +
>> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
>> +partitions or non standard bootloader partition sizes. For these a mixed layout
>> +needs to be used with an explicit firmware partition.
>> +
>> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
>> +sizes of the rootfs and kernel parts contained in the firmware.
>> +
>> +Required properties:
>> +- compatible : must be "brcm,bcm963xx-imagetag"
>> +
>> +Examples:
>> +
>> +flash@1e000000 {
>> +     compatible = "cfi-flash";
>> +     reg = <0x1e000000 0x2000000>;
>> +     bank-width = <2>;
>> +
>> +     partitions {
>> +             compatible = "fixed-partitions";
>> +             #address-cells = <1>;
>> +             #size-cells = <1>;
>> +
>> +             cfe@0 {
>> +                     reg = <0x0 0x10000>;
>> +                     read-only;
>> +             };
>> +
>> +             firmware@10000 {
>> +                     reg = <0x10000 0x7d0000>;
>> +                     compatible = "brcm,bcm963xx-imagetag";
>> +             };
>> +
>> +             caldata@7e0000 {
>> +                     reg = <0x7e0000 0x10000>;
>> +                     read-only;
>> +             };
>> +
>> +             nvram@7f0000 {
>> +                     reg = <0x7f0000 0x10000>;
>> +             };
>> +     };
>> +};
>> +
>> +
>> +flash@1e000000 {
>> +     compatible = "cfi-flash";
>> +     reg = <0x1e000000 0x2000000>;
>> +     bank-width = <2>;
>> +
>> +     partitions {
>> +             compatible = "fixed-partitions";
>> +             #address-cells = <1>;
>> +             #size-cells = <1>;
>> +
>> +             /*
>> +              * Some devices use a flash chip with 64k erase blocks, some
>> +              * use one with 128k erase blocks, so the vendor decided to
>> +              * always use 128k as the firmware offset.
>> +              */
>
> That's a interesting piece of info, but not really a reason to have a
> second example.

Generally, I'd rather have one example too many than one too few, but
I can drop it if you think it's unnecessary. If I do that, can I add
your Ack then here as well for the v2?

>
>> +
>> +             cfe@0 {
>> +                     reg = <0x0 0x20000>;
>> +                     read-only;
>> +             };
>> +
>> +             firmware@20000 {
>> +                     reg = <0x20000 0x7c0000>;
>> +                     compatible = "brcm,bcm963xx-imagetag";
>> +             };
>> +
>> +             nvram@7e0000 {
>> +                     reg = <0x7e0000 0x20000>;
>> +             };
>> +     };
>> +};
>> --
>> 2.13.2
>>
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  2018-09-10  9:02       ` Jonas Gorski
@ 2018-09-10  9:09         ` Jonas Gorski
  -1 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-09-10  9:09 UTC (permalink / raw)
  To: Rob Herring
  Cc: Mark Rutland, devicetree, Florian Fainelli, Boris Brezillon,
	Richard Weinberger, Marek Vasut, MTD Maling List, Brian Norris,
	David Woodhouse

On 10 September 2018 at 11:02, Jonas Gorski <jonas.gorski@gmail.com> wrote:
> On 4 September 2018 at 02:30, Rob Herring <robh@kernel.org> wrote:
>> On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
>>> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
>>> environment.
>>>
>>> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
>>> ---
>>>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
>>>  1 file changed, 78 insertions(+)
>>>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>> new file mode 100644
>>> index 000000000000..f4a444d69d9a
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>> @@ -0,0 +1,78 @@
>>> +Broadcom BCM963XX ImageTag Partition Container
>>> +==============================================
>>> +
>>> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
>>> +partitions or non standard bootloader partition sizes. For these a mixed layout
>>> +needs to be used with an explicit firmware partition.
>>> +
>>> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
>>> +sizes of the rootfs and kernel parts contained in the firmware.
>>> +
>>> +Required properties:
>>> +- compatible : must be "brcm,bcm963xx-imagetag"
>>> +
>>> +Examples:
>>> +
>>> +flash@1e000000 {
>>> +     compatible = "cfi-flash";
>>> +     reg = <0x1e000000 0x2000000>;
>>> +     bank-width = <2>;
>>> +
>>> +     partitions {
>>> +             compatible = "fixed-partitions";
>>> +             #address-cells = <1>;
>>> +             #size-cells = <1>;
>>> +
>>> +             cfe@0 {
>>> +                     reg = <0x0 0x10000>;
>>> +                     read-only;
>>> +             };
>>> +
>>> +             firmware@10000 {
>>> +                     reg = <0x10000 0x7d0000>;
>>> +                     compatible = "brcm,bcm963xx-imagetag";
>>> +             };
>>> +
>>> +             caldata@7e0000 {
>>> +                     reg = <0x7e0000 0x10000>;
>>> +                     read-only;
>>> +             };
>>> +
>>> +             nvram@7f0000 {
>>> +                     reg = <0x7f0000 0x10000>;
>>> +             };
>>> +     };
>>> +};
>>> +
>>> +
>>> +flash@1e000000 {
>>> +     compatible = "cfi-flash";
>>> +     reg = <0x1e000000 0x2000000>;
>>> +     bank-width = <2>;
>>> +
>>> +     partitions {
>>> +             compatible = "fixed-partitions";
>>> +             #address-cells = <1>;
>>> +             #size-cells = <1>;
>>> +
>>> +             /*
>>> +              * Some devices use a flash chip with 64k erase blocks, some
>>> +              * use one with 128k erase blocks, so the vendor decided to
>>> +              * always use 128k as the firmware offset.
>>> +              */
>>
>> That's a interesting piece of info, but not really a reason to have a
>> second example.
>
> Generally, I'd rather have one example too many than one too few, but
> I can drop it if you think it's unnecessary. If I do that, can I add
> your Ack then here as well for the v2?

Of course a reviewed-by, not an Ack.


Jonas

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
@ 2018-09-10  9:09         ` Jonas Gorski
  0 siblings, 0 replies; 22+ messages in thread
From: Jonas Gorski @ 2018-09-10  9:09 UTC (permalink / raw)
  To: Rob Herring
  Cc: MTD Maling List, devicetree, David Woodhouse, Brian Norris,
	Boris Brezillon, Marek Vasut, Richard Weinberger, Mark Rutland,
	Florian Fainelli

On 10 September 2018 at 11:02, Jonas Gorski <jonas.gorski@gmail.com> wrote:
> On 4 September 2018 at 02:30, Rob Herring <robh@kernel.org> wrote:
>> On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
>>> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
>>> environment.
>>>
>>> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
>>> ---
>>>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
>>>  1 file changed, 78 insertions(+)
>>>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>> new file mode 100644
>>> index 000000000000..f4a444d69d9a
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
>>> @@ -0,0 +1,78 @@
>>> +Broadcom BCM963XX ImageTag Partition Container
>>> +==============================================
>>> +
>>> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
>>> +partitions or non standard bootloader partition sizes. For these a mixed layout
>>> +needs to be used with an explicit firmware partition.
>>> +
>>> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
>>> +sizes of the rootfs and kernel parts contained in the firmware.
>>> +
>>> +Required properties:
>>> +- compatible : must be "brcm,bcm963xx-imagetag"
>>> +
>>> +Examples:
>>> +
>>> +flash@1e000000 {
>>> +     compatible = "cfi-flash";
>>> +     reg = <0x1e000000 0x2000000>;
>>> +     bank-width = <2>;
>>> +
>>> +     partitions {
>>> +             compatible = "fixed-partitions";
>>> +             #address-cells = <1>;
>>> +             #size-cells = <1>;
>>> +
>>> +             cfe@0 {
>>> +                     reg = <0x0 0x10000>;
>>> +                     read-only;
>>> +             };
>>> +
>>> +             firmware@10000 {
>>> +                     reg = <0x10000 0x7d0000>;
>>> +                     compatible = "brcm,bcm963xx-imagetag";
>>> +             };
>>> +
>>> +             caldata@7e0000 {
>>> +                     reg = <0x7e0000 0x10000>;
>>> +                     read-only;
>>> +             };
>>> +
>>> +             nvram@7f0000 {
>>> +                     reg = <0x7f0000 0x10000>;
>>> +             };
>>> +     };
>>> +};
>>> +
>>> +
>>> +flash@1e000000 {
>>> +     compatible = "cfi-flash";
>>> +     reg = <0x1e000000 0x2000000>;
>>> +     bank-width = <2>;
>>> +
>>> +     partitions {
>>> +             compatible = "fixed-partitions";
>>> +             #address-cells = <1>;
>>> +             #size-cells = <1>;
>>> +
>>> +             /*
>>> +              * Some devices use a flash chip with 64k erase blocks, some
>>> +              * use one with 128k erase blocks, so the vendor decided to
>>> +              * always use 128k as the firmware offset.
>>> +              */
>>
>> That's a interesting piece of info, but not really a reason to have a
>> second example.
>
> Generally, I'd rather have one example too many than one too few, but
> I can drop it if you think it's unnecessary. If I do that, can I add
> your Ack then here as well for the v2?

Of course a reviewed-by, not an Ack.


Jonas

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
  2018-09-10  9:09         ` Jonas Gorski
@ 2018-09-10 12:12           ` Rob Herring
  -1 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2018-09-10 12:12 UTC (permalink / raw)
  To: Jonas Gorski
  Cc: Mark Rutland, devicetree, Florian Fainelli, Boris Brezillon,
	Richard Weinberger, Marek Vašut, MTD Maling List,
	Brian Norris, David Woodhouse

On Mon, Sep 10, 2018 at 4:09 AM Jonas Gorski <jonas.gorski@gmail.com> wrote:
>
> On 10 September 2018 at 11:02, Jonas Gorski <jonas.gorski@gmail.com> wrote:
> > On 4 September 2018 at 02:30, Rob Herring <robh@kernel.org> wrote:
> >> On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
> >>> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
> >>> environment.
> >>>
> >>> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
> >>> ---
> >>>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
> >>>  1 file changed, 78 insertions(+)
> >>>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> >>> new file mode 100644
> >>> index 000000000000..f4a444d69d9a
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> >>> @@ -0,0 +1,78 @@
> >>> +Broadcom BCM963XX ImageTag Partition Container
> >>> +==============================================
> >>> +
> >>> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
> >>> +partitions or non standard bootloader partition sizes. For these a mixed layout
> >>> +needs to be used with an explicit firmware partition.
> >>> +
> >>> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
> >>> +sizes of the rootfs and kernel parts contained in the firmware.
> >>> +
> >>> +Required properties:
> >>> +- compatible : must be "brcm,bcm963xx-imagetag"
> >>> +
> >>> +Examples:
> >>> +
> >>> +flash@1e000000 {
> >>> +     compatible = "cfi-flash";
> >>> +     reg = <0x1e000000 0x2000000>;
> >>> +     bank-width = <2>;
> >>> +
> >>> +     partitions {
> >>> +             compatible = "fixed-partitions";
> >>> +             #address-cells = <1>;
> >>> +             #size-cells = <1>;
> >>> +
> >>> +             cfe@0 {
> >>> +                     reg = <0x0 0x10000>;
> >>> +                     read-only;
> >>> +             };
> >>> +
> >>> +             firmware@10000 {
> >>> +                     reg = <0x10000 0x7d0000>;
> >>> +                     compatible = "brcm,bcm963xx-imagetag";
> >>> +             };
> >>> +
> >>> +             caldata@7e0000 {
> >>> +                     reg = <0x7e0000 0x10000>;
> >>> +                     read-only;
> >>> +             };
> >>> +
> >>> +             nvram@7f0000 {
> >>> +                     reg = <0x7f0000 0x10000>;
> >>> +             };
> >>> +     };
> >>> +};
> >>> +
> >>> +
> >>> +flash@1e000000 {
> >>> +     compatible = "cfi-flash";
> >>> +     reg = <0x1e000000 0x2000000>;
> >>> +     bank-width = <2>;
> >>> +
> >>> +     partitions {
> >>> +             compatible = "fixed-partitions";
> >>> +             #address-cells = <1>;
> >>> +             #size-cells = <1>;
> >>> +
> >>> +             /*
> >>> +              * Some devices use a flash chip with 64k erase blocks, some
> >>> +              * use one with 128k erase blocks, so the vendor decided to
> >>> +              * always use 128k as the firmware offset.
> >>> +              */
> >>
> >> That's a interesting piece of info, but not really a reason to have a
> >> second example.
> >
> > Generally, I'd rather have one example too many than one too few, but
> > I can drop it if you think it's unnecessary. If I do that, can I add
> > your Ack then here as well for the v2?
>
> Of course a reviewed-by, not an Ack.

Yes.

Rob

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage
@ 2018-09-10 12:12           ` Rob Herring
  0 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2018-09-10 12:12 UTC (permalink / raw)
  To: Jonas Gorski
  Cc: MTD Maling List, devicetree, David Woodhouse, Brian Norris,
	Boris Brezillon, Marek Vašut, Richard Weinberger,
	Mark Rutland, Florian Fainelli

On Mon, Sep 10, 2018 at 4:09 AM Jonas Gorski <jonas.gorski@gmail.com> wrote:
>
> On 10 September 2018 at 11:02, Jonas Gorski <jonas.gorski@gmail.com> wrote:
> > On 4 September 2018 at 02:30, Rob Herring <robh@kernel.org> wrote:
> >> On Tue, Aug 28, 2018 at 01:19:43PM +0200, Jonas Gorski wrote:
> >>> Describe how to use the BCM963XX ImageTag format in a mixed flash layout
> >>> environment.
> >>>
> >>> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
> >>> ---
> >>>  .../mtd/partitions/brcm,bcm963xx-imagetag.txt      | 78 ++++++++++++++++++++++
> >>>  1 file changed, 78 insertions(+)
> >>>  create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> >>> new file mode 100644
> >>> index 000000000000..f4a444d69d9a
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm963xx-imagetag.txt
> >>> @@ -0,0 +1,78 @@
> >>> +Broadcom BCM963XX ImageTag Partition Container
> >>> +==============================================
> >>> +
> >>> +Some Broadcom BCM63XX SoC based devices contain additional, non discoverable
> >>> +partitions or non standard bootloader partition sizes. For these a mixed layout
> >>> +needs to be used with an explicit firmware partition.
> >>> +
> >>> +The BCM963XX ImageTag is a simple firmware header describing the offsets and
> >>> +sizes of the rootfs and kernel parts contained in the firmware.
> >>> +
> >>> +Required properties:
> >>> +- compatible : must be "brcm,bcm963xx-imagetag"
> >>> +
> >>> +Examples:
> >>> +
> >>> +flash@1e000000 {
> >>> +     compatible = "cfi-flash";
> >>> +     reg = <0x1e000000 0x2000000>;
> >>> +     bank-width = <2>;
> >>> +
> >>> +     partitions {
> >>> +             compatible = "fixed-partitions";
> >>> +             #address-cells = <1>;
> >>> +             #size-cells = <1>;
> >>> +
> >>> +             cfe@0 {
> >>> +                     reg = <0x0 0x10000>;
> >>> +                     read-only;
> >>> +             };
> >>> +
> >>> +             firmware@10000 {
> >>> +                     reg = <0x10000 0x7d0000>;
> >>> +                     compatible = "brcm,bcm963xx-imagetag";
> >>> +             };
> >>> +
> >>> +             caldata@7e0000 {
> >>> +                     reg = <0x7e0000 0x10000>;
> >>> +                     read-only;
> >>> +             };
> >>> +
> >>> +             nvram@7f0000 {
> >>> +                     reg = <0x7f0000 0x10000>;
> >>> +             };
> >>> +     };
> >>> +};
> >>> +
> >>> +
> >>> +flash@1e000000 {
> >>> +     compatible = "cfi-flash";
> >>> +     reg = <0x1e000000 0x2000000>;
> >>> +     bank-width = <2>;
> >>> +
> >>> +     partitions {
> >>> +             compatible = "fixed-partitions";
> >>> +             #address-cells = <1>;
> >>> +             #size-cells = <1>;
> >>> +
> >>> +             /*
> >>> +              * Some devices use a flash chip with 64k erase blocks, some
> >>> +              * use one with 128k erase blocks, so the vendor decided to
> >>> +              * always use 128k as the firmware offset.
> >>> +              */
> >>
> >> That's a interesting piece of info, but not really a reason to have a
> >> second example.
> >
> > Generally, I'd rather have one example too many than one too few, but
> > I can drop it if you think it's unnecessary. If I do that, can I add
> > your Ack then here as well for the v2?
>
> Of course a reviewed-by, not an Ack.

Yes.

Rob

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2018-09-10 12:13 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-28 11:19 [PATCH 0/5] mtd: bcm63xxpart: add device tree support Jonas Gorski
2018-08-28 11:19 ` Jonas Gorski
2018-08-28 11:19 ` [PATCH 1/5] dt-bindings: mtd: describe the simple BCM963XX NOR flash layout Jonas Gorski
2018-08-28 11:19   ` Jonas Gorski
2018-09-04 13:33   ` Rob Herring
2018-09-04 13:33     ` Rob Herring
2018-08-28 11:19 ` [PATCH 2/5] mtd: bcm63xxpart: add of_match_table support Jonas Gorski
2018-08-28 11:19   ` Jonas Gorski
2018-08-28 11:19 ` [PATCH 3/5] mtd: bcm63xxpart: move imagetag parsing to its own parser Jonas Gorski
2018-08-28 11:19   ` Jonas Gorski
2018-08-28 11:19 ` [PATCH 4/5] dt-bindings: mtd: describe BCM963XX ImageTag format and usage Jonas Gorski
2018-08-28 11:19   ` Jonas Gorski
2018-09-04  0:30   ` Rob Herring
2018-09-04  0:30     ` Rob Herring
2018-09-10  9:02     ` Jonas Gorski
2018-09-10  9:02       ` Jonas Gorski
2018-09-10  9:09       ` Jonas Gorski
2018-09-10  9:09         ` Jonas Gorski
2018-09-10 12:12         ` Rob Herring
2018-09-10 12:12           ` Rob Herring
2018-08-28 11:19 ` [PATCH 5/5] mtd: parser_imagetag: add of_match_table support Jonas Gorski
2018-08-28 11:19   ` Jonas Gorski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.