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 commitc997634c01)
This commit is contained in:
		| @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com> | |||||||
|  	mtd->type = MTD_NORFLASH; |  	mtd->type = MTD_NORFLASH; | ||||||
| --- a/drivers/mtd/mtdcore.c | --- a/drivers/mtd/mtdcore.c | ||||||
| +++ b/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) |  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" |  #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); |  		register_reboot_notifier(&mtd->reboot_notifier); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/mtdcore.c | --- a/drivers/mtd/mtdcore.c | ||||||
| +++ b/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); |  	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; |  	mtd->type = MTD_NORFLASH; | ||||||
| --- a/drivers/mtd/mtdcore.c | --- a/drivers/mtd/mtdcore.c | ||||||
| +++ b/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) |  static void mtd_set_dev_defaults(struct mtd_info *mtd) | ||||||
|  { |  { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki