mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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
 | |
| @@ -548,6 +548,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 = NVMEM_DEVID_NONE;
 | |
|  	config.dev = &mtd->dev;
 | |
|  	config.name = dev_name(&mtd->dev);
 |