Skip to contentSkip to conversation

dt-bindings: mtd: partitions: support marking root device partition

PATCH Superseded Rafał Miłecki 2 participants 4 messages Oct 19, 2022 – Oct 21, 2022

Subsystems (2)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 dt-bindings: mtd: partitions: support marking root device 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,root-device" property to mark correct flash partition.

---
 .../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..e627085df4fc 100644
@@ -84,6 +84,7 @@ examples:
         partition@0 {
             label = "filesystem";
             reg = <0x00000000 0x1 0x00000000>;
+            linux,root-device;
         };
     };
 
Documentation/devicetree/bindings/mtd/partitions/partition.yaml +4 -0
index f1a02d840b12..671906acf1bd 100644
@@ -52,6 +52,10 @@ properties:
       immune to paired-pages corruptions
     type: boolean
 
+  linux,root-device:
+    description: Marks partition that is a root device with filesystem to mount
+      and boot user space from
+
 if:
   not:
     required: [ reg ]
Signature · 6 lines
2.34.1


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

PATCH 2/2 mtd: core: set ROOT_DEV for partitions marked as root devices in DT

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

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

---
 drivers/mtd/mtdcore.c | 7 +++++++
 1 file changed, 7 insertions(+)
drivers/mtd/mtdcore.c +7 -0
index 07249af4f890..034b06aff660 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,12 @@ 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)) {
+		pr_info("mtd: setting mtd%d (%s) as root device\n", mtd->index, mtd->name);
+		ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, mtd->index);
+	}
+
 	/* 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 · 6 lines
2.34.1


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

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

Quoted 24 lines · Rafał Miłecki

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

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

---
  drivers/mtd/mtdcore.c | 7 +++++++
  1 file changed, 7 insertions(+)
drivers/mtd/mtdcore.c +1 -0
index 07249af4f890..034b06aff660 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>

drivers/mtd/mtdcore.c int add_mtd_device(struct mtd_info *mtd) · line 740

Quoted 5 lines
drivers/mtd/mtdcore.c +2 -0
@@ -735,6 +736,12 @@ 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)) {

I forgot to re-do "format-patch" after "commit --amend". s/linux,rootfs/linux,root-device/

I'll fix that in V2 after giving this patchset some time to review.

drivers/mtd/mtdcore.c int add_mtd_device(struct mtd_info *mtd) · line 747

Quoted 7 lines
drivers/mtd/mtdcore.c +4 -0
+		pr_info("mtd: setting mtd%d (%s) as root device\n", mtd->index, mtd->name);
+		ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, mtd->index);
+	}
+
  	/* 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

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

maintainer
#3 lore raw

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

Quoted 23 lines · Rafał Miłecki
Quoted 22 lines · Rafał Miłecki

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

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

---
  drivers/mtd/mtdcore.c | 7 +++++++
  1 file changed, 7 insertions(+)
drivers/mtd/mtdcore.c +1 -0
index 07249af4f890..034b06aff660 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>
Quoted 8 lines

drivers/mtd/mtdcore.c int add_mtd_device(struct mtd_info *mtd) · line 739

Quoted 5 lines
drivers/mtd/mtdcore.c +2 -0
@@ -735,6 +736,12 @@ 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)) {

I forgot to re-do "format-patch" after "commit --amend". s/linux,rootfs/linux,root-device/

It's really the filesystem you are tagging, not a device, so I think 'linux,rootfs' is better.

Rob