From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= 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 --- drivers/mtd/mtdcore.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -519,6 +519,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);