ath79: Allow to set spi-nor mtd name via devicetree
authorSven Eckelmann <sven@narfation.org>
Wed, 30 Dec 2020 23:25:10 +0000 (00:25 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 16 Jan 2022 20:42:19 +0000 (21:42 +0100)
On ar71xx, it was possible to overwrite the name of the spi-nor mtd device
identifier using the flash_platform_data which each mach-*.c could adjust
for its devices. A similar feature was introduced for mtd-physmap in
devicetree's. The property linux,mtd-name can be used to set the name and
provide a stable identifier for mtdpart from the bootloader.

But this feature is not yet available upstream for spi-nor devices which
also might receive their partition layout from the bootloader. But the
OpenWrt pistachio support for this property can simply be imported into
ath79 to gain this support.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch [new file with mode: 0644]

diff --git a/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch
new file mode 100644 (file)
index 0000000..b85ecef
--- /dev/null
@@ -0,0 +1,54 @@
+From f32bc2aa01edcba2f2ed5db151cf183eac9ef919 Mon Sep 17 00:00:00 2001
+From: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
+Date: Sat, 25 Feb 2017 16:42:50 +0000
+Subject: mtd: nor: support mtd name from device tree
+
+Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
+---
+ drivers/mtd/spi-nor/spi-nor.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/drivers/mtd/spi-nor/core.c
++++ b/drivers/mtd/spi-nor/core.c
+@@ -3189,6 +3189,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+       struct device *dev = nor->dev;
+       struct mtd_info *mtd = &nor->mtd;
+       struct device_node *np = spi_nor_get_flash_node(nor);
++      const char __maybe_unused *of_mtd_name = NULL;
+       int ret;
+       int i;
+@@ -3243,7 +3244,12 @@ int spi_nor_scan(struct spi_nor *nor, co
+       if (ret)
+               return ret;
+-      if (!mtd->name)
++#ifdef CONFIG_MTD_OF_PARTS
++      of_property_read_string(np, "linux,mtd-name", &of_mtd_name);
++#endif
++      if (of_mtd_name)
++              mtd->name = of_mtd_name;
++      else if (!mtd->name)
+               mtd->name = dev_name(dev);
+       mtd->priv = nor;
+       mtd->type = MTD_NORFLASH;
+--- a/drivers/mtd/mtdcore.c
++++ b/drivers/mtd/mtdcore.c
+@@ -778,6 +778,17 @@ out_error:
+  */
+ static void mtd_set_dev_defaults(struct mtd_info *mtd)
+ {
++#ifdef CONFIG_MTD_OF_PARTS
++      const char __maybe_unused *of_mtd_name = NULL;
++      struct device_node *np;
++
++      np = mtd_get_of_node(mtd);
++      if (np && !mtd->name) {
++              of_property_read_string(np, "linux,mtd-name", &of_mtd_name);
++              if (of_mtd_name)
++                      mtd->name = of_mtd_name;
++      } else
++#endif
+       if (mtd->dev.parent) {
+               if (!mtd->owner && mtd->dev.parent->driver)
+                       mtd->owner = mtd->dev.parent->driver->owner;