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
	 Rafał Miłecki
					Rafał Miłecki