Skip to contentSkip to conversation

dt-bindings: mtd: partitions: support marking rootfs partition

PATCH Applied Rafał Miłecki 3 participants 5 messages Oct 22, 2022 – Nov 7, 2022

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH v3 1/2 dt-bindings: mtd: partitions: support marking rootfs partition

From: Rafał Miłecki <[email protected]>

Linux needs to know what to use as root device. On embedded devices with flash the only common way to specify that is cmdline & root= parameter.

That solution works with U-Boot which is Linux & cmdline aware but isn't available with all market bootloaders. Also that method is fragile:
1. Requires specific probing order on multi-flash devices
2. Uses hardcoded partitions indexes

A lot of devices use different partitioning methods. It may be "fixed-partitions" or some dynamic partitioning (e.g. based on parts table). For such cases allow "linux,rootfs" property to mark correct flash partition.

---
V2: Use "linux,rootfs" as more accurate. Thanks Rob.

---
 .../devicetree/bindings/mtd/partitions/fixed-partitions.yaml  | 1 +
 .../devicetree/bindings/mtd/partitions/partition.yaml         | 4 ++++
 2 files changed, 5 insertions(+)
Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml +1 -0
index ad3ccd250802..d66a6e3bcb56 100644
@@ -84,6 +84,7 @@ examples:
         partition@0 {
             label = "filesystem";
             reg = <0x00000000 0x1 0x00000000>;
+            linux,rootfs;
         };
     };
 
Documentation/devicetree/bindings/mtd/partitions/partition.yaml +4 -0
index f1a02d840b12..a25cd23a34c0 100644
@@ -52,6 +52,10 @@ properties:
       immune to paired-pages corruptions
     type: boolean
 
+  linux,rootfs:
+    description: Marks partition that contains root filesystem to mount and boot
+      user space from
+
 if:
   not:
     required: [ reg ]
Signature · 1 line
2.34.1
#1 lore raw

PATCH v3 2/2 mtd: core: set ROOT_DEV for partitions marked as rootfs in DT

From: Rafał Miłecki <[email protected]>

This adds support for "linux,rootfs" binding that is used to mark flash partition containing rootfs. It's useful for devices using device tree that don't have bootloader passing root info in cmdline.

---
V2: Use "linux,rootfs" as more accurate. Thanks Rob.
V3: Add IS_BUILTIN(CONFIG_MTD) check to avoid
ERROR: modpost: "ROOT_DEV" [drivers/mtd/mtd.ko] undefined!

---
 drivers/mtd/mtdcore.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
drivers/mtd/mtdcore.c +12 -0
index 20fcedc3021e..f70a5e66843b 100644
@@ -28,6 +28,7 @@
 #include <linux/leds.h>
 #include <linux/debugfs.h>
 #include <linux/nvmem-provider.h>
+#include <linux/root_dev.h>
 
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
@@ -735,6 +736,17 @@ int add_mtd_device(struct mtd_info *mtd)
 		not->add(mtd);
 
 	mutex_unlock(&mtd_table_mutex);
+
+	if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL)) {
+		if (IS_BUILTIN(CONFIG_MTD)) {
+			pr_info("mtd: setting mtd%d (%s) as root device\n", mtd->index, mtd->name);
+			ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, mtd->index);
+		} else {
+			pr_warn("mtd: can't set mtd%d (%s) as root device - mtd must be builtin\n",
+				mtd->index, mtd->name);
+		}
+	}
+
 	/* We _know_ we aren't being removed, because
 	   our caller is still holding us here. So none
 	   of this try_ nonsense, and no bitching about it
Signature · 1 line
2.34.1
maintainer Applied
#2 lore raw

Re: [PATCH V3 2/2] mtd: core: set ROOT_DEV for partitions marked as rootfs in DT

Quoted 7 lines · On Sat, 2022-10-22 at 21:13:18 UTC, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= wrote:

From: Rafał Miłecki <[email protected]>

This adds support for "linux,rootfs" binding that is used to mark flash partition containing rootfs. It's useful for devices using device tree that don't have bootloader passing root info in cmdline.

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next, thanks.

Miquel

maintainer Reviewed-by on v3 1/2
#3 lore raw
In reply to Rafał Miłecki
Quoted 15 lines · Rafał Miłecki

From: Rafał Miłecki <[email protected]>

Linux needs to know what to use as root device. On embedded devices with flash the only common way to specify that is cmdline & root= parameter.

That solution works with U-Boot which is Linux & cmdline aware but isn't available with all market bootloaders. Also that method is fragile:
1. Requires specific probing order on multi-flash devices
2. Uses hardcoded partitions indexes

A lot of devices use different partitioning methods. It may be "fixed-partitions" or some dynamic partitioning (e.g. based on parts table). For such cases allow "linux,rootfs" property to mark correct flash partition.

Quoted 8 lines

---
V2: Use "linux,rootfs" as more accurate. Thanks Rob.

---
 .../devicetree/bindings/mtd/partitions/fixed-partitions.yaml  | 1 +
 .../devicetree/bindings/mtd/partitions/partition.yaml         | 4 ++++
 2 files changed, 5 insertions(+)
maintainer Applied
#4 lore raw
In reply to Rafał Miłecki
Quoted 10 lines · On Sat, 2022-10-22 at 21:13:17 UTC, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= wrote:

From: Rafał Miłecki <[email protected]>

Linux needs to know what to use as root device. On embedded devices with flash the only common way to specify that is cmdline & root= parameter.

That solution works with U-Boot which is Linux & cmdline aware but isn't available with all market bootloaders. Also that method is fragile:
1. Requires specific probing order on multi-flash devices
2. Uses hardcoded partitions indexes

Quoted 7 lines

A lot of devices use different partitioning methods. It may be "fixed-partitions" or some dynamic partitioning (e.g. based on parts table). For such cases allow "linux,rootfs" property to mark correct flash partition.

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next, thanks.

Miquel