kernel: fix mtd/NVMEM regression affecting U-Boot env NVMEM driver
Fixes: 20736013e9 ("kernel: backport nvmem v6.6 fixes and v6.7 changes")
Fixes: https://github.com/openwrt/openwrt/issues/13831
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit c997634c017294cb38cf6f9a0112860c7e736a53)
			
			
This commit is contained in:
		@@ -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
 | 
			
		||||
@@ -847,6 +847,17 @@ out_error:
 | 
			
		||||
@@ -870,6 +870,17 @@ out_error:
 | 
			
		||||
  */
 | 
			
		||||
 static void mtd_set_dev_defaults(struct mtd_info *mtd)
 | 
			
		||||
 {
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
			
		||||
 
 | 
			
		||||
 #include "mtdcore.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -1083,6 +1084,8 @@ int mtd_device_parse_register(struct mtd
 | 
			
		||||
@@ -1106,6 +1107,8 @@ int mtd_device_parse_register(struct mtd
 | 
			
		||||
 		register_reboot_notifier(&mtd->reboot_notifier);
 | 
			
		||||
 	}
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
 | 
			
		||||
 | 
			
		||||
--- a/drivers/mtd/mtdcore.c
 | 
			
		||||
+++ b/drivers/mtd/mtdcore.c
 | 
			
		||||
@@ -761,7 +761,8 @@ int add_mtd_device(struct mtd_info *mtd)
 | 
			
		||||
@@ -784,7 +784,8 @@ int add_mtd_device(struct mtd_info *mtd)
 | 
			
		||||
 
 | 
			
		||||
 	mutex_unlock(&mtd_table_mutex);
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,48 @@
 | 
			
		||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
 | 
			
		||||
Date: Tue, 31 Oct 2023 15:51:01 +0100
 | 
			
		||||
Subject: [PATCH] mtd: don't register NVMEM devices for partitions with custom
 | 
			
		||||
 drivers
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Type: text/plain; charset=UTF-8
 | 
			
		||||
Content-Transfer-Encoding: 8bit
 | 
			
		||||
 | 
			
		||||
This fixes issue exposed by upstream commit f4cf4e5db331 ("Revert
 | 
			
		||||
"nvmem: add new config option"").
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
 | 
			
		||||
---
 | 
			
		||||
 drivers/mtd/mtdcore.c | 23 +++++++++++++++++++++++
 | 
			
		||||
 1 file changed, 23 insertions(+)
 | 
			
		||||
 | 
			
		||||
--- a/drivers/mtd/mtdcore.c
 | 
			
		||||
+++ b/drivers/mtd/mtdcore.c
 | 
			
		||||
@@ -537,6 +537,29 @@ static int mtd_nvmem_add(struct mtd_info
 | 
			
		||||
 	struct device_node *node = mtd_get_of_node(mtd);
 | 
			
		||||
 	struct nvmem_config config = {};
 | 
			
		||||
 
 | 
			
		||||
+	/*
 | 
			
		||||
+	 * Do NOT register NVMEM device for any partition that is meant to be
 | 
			
		||||
+	 * handled by a U-Boot env driver. That would result in associating two
 | 
			
		||||
+	 * different NVMEM devices with the same OF node.
 | 
			
		||||
+	 *
 | 
			
		||||
+	 * An example of unwanted behaviour of above (forwardtrace):
 | 
			
		||||
+	 * of_get_mac_addr_nvmem()
 | 
			
		||||
+	 * of_nvmem_cell_get()
 | 
			
		||||
+	 * __nvmem_device_get()
 | 
			
		||||
+	 *
 | 
			
		||||
+	 * We can't have __nvmem_device_get() return "mtdX" NVMEM device instead
 | 
			
		||||
+	 * of U-Boot env NVMEM device. That would result in failing to find
 | 
			
		||||
+	 * NVMEM cell.
 | 
			
		||||
+	 *
 | 
			
		||||
+	 * This issue seems to affect U-Boot env case only and will go away with
 | 
			
		||||
+	 * switch to NVMEM layouts.
 | 
			
		||||
+	 */
 | 
			
		||||
+	if (of_device_is_compatible(node, "u-boot,env") ||
 | 
			
		||||
+	    of_device_is_compatible(node, "u-boot,env-redundant-bool") ||
 | 
			
		||||
+	    of_device_is_compatible(node, "u-boot,env-redundant-count") ||
 | 
			
		||||
+	    of_device_is_compatible(node, "brcm,env"))
 | 
			
		||||
+		return 0;
 | 
			
		||||
+
 | 
			
		||||
 	config.id = -1;
 | 
			
		||||
 	config.dev = &mtd->dev;
 | 
			
		||||
 	config.name = dev_name(&mtd->dev);
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -847,6 +847,17 @@ out_error:
 | 
			
		||||
@@ -870,6 +870,17 @@ out_error:
 | 
			
		||||
  */
 | 
			
		||||
 static void mtd_set_dev_defaults(struct mtd_info *mtd)
 | 
			
		||||
 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user