Flash partitions may specify MTDPART_SIZ_FULL (=0) as the size of the
partition to indicate "the remainder of the flash". Make this work with
device-tree "fixed-partitions" as well.

This makes MTD partitioning compatible with the Linux kernel, see:
  
https://github.com/torvalds/linux/blob/master/include/linux/mtd/partitions.h#L29
  https://github.com/torvalds/linux/blob/master/drivers/mtd/mtdpart.c#L123

Previously, this could only be done through MTDPARTS so this change allows
boards like topic_miami to migrate from `mtdparts`/`mtdids` to devicetree
partitions.

Signed-off-by: Mike Looijmans <mike.looijm...@topic.nl>
---

Changes in v2:
Amend commit text to add links to Linux code and explain the rationale

 drivers/mtd/mtdpart.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 88094b81e7a..5284890bd88 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -910,11 +910,13 @@ int add_mtd_partitions_of(struct mtd_info *master)
                        continue;
 
                offset = ofnode_get_addr_size_index_notrans(child, 0, &size);
-               if (offset == FDT_ADDR_T_NONE || !size) {
-                       debug("Missing partition offset/size on \"%s\" 
partition\n",
+               if (offset == FDT_ADDR_T_NONE) {
+                       debug("Missing partition offset on \"%s\" partition\n",
                              master->name);
                        continue;
                }
+               if (size == MTDPART_SIZ_FULL)
+                       size = master->size - offset;
 
                part.name = ofnode_read_string(child, "label");
                if (!part.name)
-- 
2.43.0


Met vriendelijke groet / kind regards,

Mike Looijmans
System Expert


TOPIC Embedded Products B.V.
Materiaalweg 4, 5681 RJ Best
The Netherlands

T: +31 (0) 499 33 69 69
E: mike.looijm...@topic.nl
W: www.topic.nl

Please consider the environment before printing this e-mail

Reply via email to