kernel: fix mtd/NVMEM regression affecting U-Boot env NVMEM driver
Fixes: b595670070
("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>
This commit is contained in:
parent
c441f9b2c5
commit
c997634c01
9 changed files with 103 additions and 7 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,7 +33,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
||||||
mtd->flags = MTD_CAP_NORFLASH;
|
mtd->flags = MTD_CAP_NORFLASH;
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -840,6 +840,17 @@ out_error:
|
@@ -863,6 +863,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);
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
|
|
||||||
@@ -1075,6 +1076,8 @@ int mtd_device_parse_register(struct mtd
|
@@ -1098,6 +1099,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
|
||||||
@@ -750,7 +750,8 @@ int add_mtd_device(struct mtd_info *mtd)
|
@@ -773,7 +773,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);
|
|
@ -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
|
||||||
|
@@ -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 = -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue