kernel: backport support for "linux,rootfs" in DT
authorRafał Miłecki <rafal@milecki.pl>
Mon, 7 Nov 2022 18:24:48 +0000 (19:24 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Tue, 8 Nov 2022 08:12:16 +0000 (09:12 +0100)
This DT property allows marking flash partition that Linux should use as
a root device. It's useful for devices that don't use U-Boot and cmdline
parser for partitioning. It may be used with "fixed-partitions" or some
dynamic partitioning based on flash content.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
14 files changed:
target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch
target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch
target/linux/generic/backport-5.10/418-v6.2-mtd-core-set-ROOT_DEV-for-partitions-marked-as-rootf.patch [new file with mode: 0644]
target/linux/generic/backport-5.15/408-v6.2-mtd-core-set-ROOT_DEV-for-partitions-marked-as-rootf.patch [new file with mode: 0644]
target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch
target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch [deleted file]
target/linux/generic/hack-5.10/420-mtd-support-OpenWrt-s-MTD_ROOTFS_ROOT_DEV.patch [new file with mode: 0644]
target/linux/generic/hack-5.10/421-mtd-fix-squashfs-root-on-targets-with-CONFIG_FIT_PAR.patch
target/linux/generic/hack-5.15/402-mtd-blktrans-call-add-disks-after-mtd-device.patch
target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch [deleted file]
target/linux/generic/hack-5.15/420-mtd-support-OpenWrt-s-MTD_ROOTFS_ROOT_DEV.patch [new file with mode: 0644]
target/linux/generic/pending-5.10/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch
target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch
target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch

index 5b14d1f8cb17c75fc00ea1261cd555a198e0d9d8..cf8ef1b8802ab75f0bcecb467d2f54540a76240c 100644 (file)
@@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
        mtd->type = MTD_NORFLASH;
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -843,6 +843,17 @@ out_error:
+@@ -848,6 +848,17 @@ out_error:
   */
  static void mtd_set_dev_defaults(struct mtd_info *mtd)
  {
index 5ff2a61c7a01af5efb8f748f923774ee78f55e3d..98939ac9e381f024d7baa7990fde54c6eec705de 100644 (file)
@@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
        mtd->type = MTD_NORFLASH;
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -843,6 +843,17 @@ out_error:
+@@ -845,6 +845,17 @@ out_error:
   */
  static void mtd_set_dev_defaults(struct mtd_info *mtd)
  {
diff --git a/target/linux/generic/backport-5.10/418-v6.2-mtd-core-set-ROOT_DEV-for-partitions-marked-as-rootf.patch b/target/linux/generic/backport-5.10/418-v6.2-mtd-core-set-ROOT_DEV-for-partitions-marked-as-rootf.patch
new file mode 100644 (file)
index 0000000..ac5b438
--- /dev/null
@@ -0,0 +1,47 @@
+From 26422ac78e9d8767bd4aabfbae616b15edbf6a1b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Sat, 22 Oct 2022 23:13:18 +0200
+Subject: [PATCH] mtd: core: set ROOT_DEV for partitions marked as rootfs in DT
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+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.
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20221022211318.32009-2-zajec5@gmail.com
+---
+ drivers/mtd/mtdcore.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/drivers/mtd/mtdcore.c
++++ b/drivers/mtd/mtdcore.c
+@@ -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>
+@@ -743,6 +744,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
diff --git a/target/linux/generic/backport-5.15/408-v6.2-mtd-core-set-ROOT_DEV-for-partitions-marked-as-rootf.patch b/target/linux/generic/backport-5.15/408-v6.2-mtd-core-set-ROOT_DEV-for-partitions-marked-as-rootf.patch
new file mode 100644 (file)
index 0000000..60b1764
--- /dev/null
@@ -0,0 +1,47 @@
+From 26422ac78e9d8767bd4aabfbae616b15edbf6a1b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Sat, 22 Oct 2022 23:13:18 +0200
+Subject: [PATCH] mtd: core: set ROOT_DEV for partitions marked as rootfs in DT
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+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.
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20221022211318.32009-2-zajec5@gmail.com
+---
+ drivers/mtd/mtdcore.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/drivers/mtd/mtdcore.c
++++ b/drivers/mtd/mtdcore.c
+@@ -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>
+@@ -746,6 +747,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
index a650320cd0a098a52ff410648599a9a09b3c0162..dc342da831708e00c242d0097b374ac30bc4bbac 100644 (file)
@@ -69,7 +69,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
        unsigned long flags;
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -31,6 +31,7 @@
+@@ -32,6 +32,7 @@
  
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/partitions.h>
@@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  
  #include "mtdcore.h"
  
-@@ -916,6 +917,8 @@ int mtd_device_parse_register(struct mtd
+@@ -928,6 +929,8 @@ int mtd_device_parse_register(struct mtd
                register_reboot_notifier(&mtd->reboot_notifier);
        }
  
diff --git a/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch b/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch
deleted file mode 100644 (file)
index a70d8af..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-From: Gabor Juhos <juhosg@openwrt.org>
-Subject: kernel/3.1[02]: move MTD root device setup code to mtdcore
-
-The current code only allows to automatically set
-root device on MTD partitions. Move the code to MTD
-core to allow to use it with all MTD devices.
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
----
- drivers/mtd/mtdcore.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/drivers/mtd/mtdcore.c
-+++ b/drivers/mtd/mtdcore.c
-@@ -27,6 +27,7 @@
- #include <linux/reboot.h>
- #include <linux/leds.h>
- #include <linux/debugfs.h>
-+#include <linux/root_dev.h>
- #include <linux/nvmem-provider.h>
- #include <linux/mtd/mtd.h>
-@@ -759,6 +760,16 @@ int add_mtd_device(struct mtd_info *mtd)
-          of this try_ nonsense, and no bitching about it
-          either. :) */
-       __module_get(THIS_MODULE);
-+
-+      if (!strcmp(mtd->name, "rootfs") &&
-+          IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) &&
-+          ROOT_DEV == 0) {
-+              unsigned int index = mtd->index;
-+              pr_notice("mtd: device %d (%s) set to be root filesystem\n",
-+                        mtd->index, mtd->name);
-+              ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, index);
-+      }
-+
-       return 0;
- fail_nvmem_add:
diff --git a/target/linux/generic/hack-5.10/420-mtd-support-OpenWrt-s-MTD_ROOTFS_ROOT_DEV.patch b/target/linux/generic/hack-5.10/420-mtd-support-OpenWrt-s-MTD_ROOTFS_ROOT_DEV.patch
new file mode 100644 (file)
index 0000000..89ac3cb
--- /dev/null
@@ -0,0 +1,24 @@
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Mon, 7 Nov 2022 23:48:24 +0100
+Subject: [PATCH] mtd: support OpenWrt's MTD_ROOTFS_ROOT_DEV
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows setting ROOT_DEV to MTD partition named "rootfs".
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+---
+
+--- a/drivers/mtd/mtdcore.c
++++ b/drivers/mtd/mtdcore.c
+@@ -756,7 +756,8 @@ int add_mtd_device(struct mtd_info *mtd)
+       mutex_unlock(&mtd_table_mutex);
+-      if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL)) {
++      if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL) ||
++          (IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
+               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);
index 2f7da2aaba3047df2fba7701ebd48ac600297fc4..1cd0efd6245829136564461427bf388d2c9c76d8 100644 (file)
@@ -7,13 +7,25 @@ Fix assumption about the block device index
 
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -767,6 +767,9 @@ int add_mtd_device(struct mtd_info *mtd)
-               unsigned int index = mtd->index;
-               pr_notice("mtd: device %d (%s) set to be root filesystem\n",
-                         mtd->index, mtd->name);
+@@ -758,12 +758,18 @@ int add_mtd_device(struct mtd_info *mtd)
+       if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL) ||
+           (IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
++              unsigned int index = mtd->index;
++
 +#ifdef CONFIG_FIT_PARTITION
 +              index <<= 2;
 +#endif
-               ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, index);
++
+               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);
++                      pr_info("mtd: setting mtd%d (%s) as root device\n", index, mtd->name);
++                      ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, index);
+               } else {
+                       pr_warn("mtd: can't set mtd%d (%s) as root device - mtd must be builtin\n",
+-                              mtd->index, mtd->name);
++                              index, mtd->name);
+               }
        }
  
index dcb1aaa6e4884ba0bc265db715168370f1a3bb31..65772cc195d2fc044ed5486a0098f71851ffbb61 100644 (file)
@@ -69,7 +69,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
        unsigned long flags;
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -31,6 +31,7 @@
+@@ -32,6 +32,7 @@
  
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/partitions.h>
@@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  
  #include "mtdcore.h"
  
-@@ -1067,6 +1068,8 @@ int mtd_device_parse_register(struct mtd
+@@ -1079,6 +1080,8 @@ int mtd_device_parse_register(struct mtd
  
        ret = mtd_otp_nvmem_add(mtd);
  
diff --git a/target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch b/target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch
deleted file mode 100644 (file)
index f3004b6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-From: Gabor Juhos <juhosg@openwrt.org>
-Subject: kernel/3.1[02]: move MTD root device setup code to mtdcore
-
-The current code only allows to automatically set
-root device on MTD partitions. Move the code to MTD
-core to allow to use it with all MTD devices.
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
----
- drivers/mtd/mtdcore.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/drivers/mtd/mtdcore.c
-+++ b/drivers/mtd/mtdcore.c
-@@ -27,6 +27,7 @@
- #include <linux/reboot.h>
- #include <linux/leds.h>
- #include <linux/debugfs.h>
-+#include <linux/root_dev.h>
- #include <linux/nvmem-provider.h>
- #include <linux/mtd/mtd.h>
-@@ -762,6 +763,16 @@ int add_mtd_device(struct mtd_info *mtd)
-          of this try_ nonsense, and no bitching about it
-          either. :) */
-       __module_get(THIS_MODULE);
-+
-+      if (!strcmp(mtd->name, "rootfs") &&
-+          IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) &&
-+          ROOT_DEV == 0) {
-+              unsigned int index = mtd->index;
-+              pr_notice("mtd: device %d (%s) set to be root filesystem\n",
-+                        mtd->index, mtd->name);
-+              ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, index);
-+      }
-+
-       return 0;
- fail_nvmem_add:
diff --git a/target/linux/generic/hack-5.15/420-mtd-support-OpenWrt-s-MTD_ROOTFS_ROOT_DEV.patch b/target/linux/generic/hack-5.15/420-mtd-support-OpenWrt-s-MTD_ROOTFS_ROOT_DEV.patch
new file mode 100644 (file)
index 0000000..15531df
--- /dev/null
@@ -0,0 +1,24 @@
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Mon, 7 Nov 2022 23:48:24 +0100
+Subject: [PATCH] mtd: support OpenWrt's MTD_ROOTFS_ROOT_DEV
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows setting ROOT_DEV to MTD partition named "rootfs".
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+---
+
+--- a/drivers/mtd/mtdcore.c
++++ b/drivers/mtd/mtdcore.c
+@@ -759,7 +759,8 @@ int add_mtd_device(struct mtd_info *mtd)
+       mutex_unlock(&mtd_table_mutex);
+-      if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL)) {
++      if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL) ||
++          (IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
+               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);
index 53d5637e41de0662dce027bcda76f36a0dd5a5cd..498876ef2fb4fba65bf4ae54635d2a64463db4be 100644 (file)
@@ -80,7 +80,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
 
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -163,6 +163,15 @@ static ssize_t mtd_erasesize_show(struct
+@@ -164,6 +164,15 @@ static ssize_t mtd_erasesize_show(struct
  }
  static DEVICE_ATTR(erasesize, S_IRUGO, mtd_erasesize_show, NULL);
  
@@ -96,7 +96,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
  static ssize_t mtd_writesize_show(struct device *dev,
                struct device_attribute *attr, char *buf)
  {
-@@ -312,6 +321,7 @@ static struct attribute *mtd_attrs[] = {
+@@ -313,6 +322,7 @@ static struct attribute *mtd_attrs[] = {
        &dev_attr_flags.attr,
        &dev_attr_size.attr,
        &dev_attr_erasesize.attr,
index ed9d1c9dc13865c43b392e95195edd87a5c442b5..b4fa08f0ea9eddb455c682af8b5ed792aed6a9f4 100644 (file)
@@ -80,7 +80,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
 
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -168,6 +168,15 @@ static ssize_t mtd_erasesize_show(struct
+@@ -169,6 +169,15 @@ static ssize_t mtd_erasesize_show(struct
  }
  MTD_DEVICE_ATTR_RO(erasesize);
  
@@ -96,7 +96,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
  static ssize_t mtd_writesize_show(struct device *dev,
                struct device_attribute *attr, char *buf)
  {
-@@ -313,6 +322,7 @@ static struct attribute *mtd_attrs[] = {
+@@ -314,6 +323,7 @@ static struct attribute *mtd_attrs[] = {
        &dev_attr_flags.attr,
        &dev_attr_size.attr,
        &dev_attr_erasesize.attr,
index 5b14d1f8cb17c75fc00ea1261cd555a198e0d9d8..cf8ef1b8802ab75f0bcecb467d2f54540a76240c 100644 (file)
@@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
        mtd->type = MTD_NORFLASH;
 --- a/drivers/mtd/mtdcore.c
 +++ b/drivers/mtd/mtdcore.c
-@@ -843,6 +843,17 @@ out_error:
+@@ -848,6 +848,17 @@ out_error:
   */
  static void mtd_set_dev_defaults(struct mtd_info *mtd)
  {