mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
kernel: backport nvmem v6.6 fixes and v6.7 changes
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
75aeb7ed62
commit
b595670070
@ -0,0 +1,28 @@
|
|||||||
|
From 414a98abbefd82d591f4e2d1efd2917bcd3b6f6d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Date: Fri, 13 Oct 2023 13:49:02 +0100
|
||||||
|
Subject: [PATCH] nvmem: imx: correct nregs for i.MX6SLL
|
||||||
|
|
||||||
|
The nregs for i.MX6SLL should be 80 per fuse map, correct it.
|
||||||
|
|
||||||
|
Fixes: 6da27821a6f5 ("nvmem: imx-ocotp: add support for imx6sll")
|
||||||
|
Cc: Stable@vger.kernel.org
|
||||||
|
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231013124904.175782-2-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -499,7 +499,7 @@ static const struct ocotp_params imx6sl_
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ocotp_params imx6sll_params = {
|
||||||
|
- .nregs = 128,
|
||||||
|
+ .nregs = 80,
|
||||||
|
.bank_address_words = 0,
|
||||||
|
.set_timing = imx_ocotp_set_imx6_timing,
|
||||||
|
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
@ -0,0 +1,28 @@
|
|||||||
|
From 7d6e10f5d254681983b53d979422c8de3fadbefb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Date: Fri, 13 Oct 2023 13:49:03 +0100
|
||||||
|
Subject: [PATCH] nvmem: imx: correct nregs for i.MX6UL
|
||||||
|
|
||||||
|
The nregs for i.MX6UL should be 144 per fuse map, correct it.
|
||||||
|
|
||||||
|
Fixes: 4aa2b4802046 ("nvmem: octop: Add support for imx6ul")
|
||||||
|
Cc: Stable@vger.kernel.org
|
||||||
|
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231013124904.175782-3-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -513,7 +513,7 @@ static const struct ocotp_params imx6sx_
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ocotp_params imx6ul_params = {
|
||||||
|
- .nregs = 128,
|
||||||
|
+ .nregs = 144,
|
||||||
|
.bank_address_words = 0,
|
||||||
|
.set_timing = imx_ocotp_set_imx6_timing,
|
||||||
|
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
@ -0,0 +1,28 @@
|
|||||||
|
From 2382c1b044231fd49eaf9aa82bc7113fc55487b8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Date: Fri, 13 Oct 2023 13:49:04 +0100
|
||||||
|
Subject: [PATCH] nvmem: imx: correct nregs for i.MX6ULL
|
||||||
|
|
||||||
|
The nregs for i.MX6ULL should be 80 per fuse map, correct it.
|
||||||
|
|
||||||
|
Fixes: ffbc34bf0e9c ("nvmem: imx-ocotp: Implement i.MX6ULL/ULZ support")
|
||||||
|
Cc: Stable@vger.kernel.org
|
||||||
|
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231013124904.175782-4-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -520,7 +520,7 @@ static const struct ocotp_params imx6ul_
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ocotp_params imx6ull_params = {
|
||||||
|
- .nregs = 64,
|
||||||
|
+ .nregs = 80,
|
||||||
|
.bank_address_words = 0,
|
||||||
|
.set_timing = imx_ocotp_set_imx6_timing,
|
||||||
|
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
@ -0,0 +1,37 @@
|
|||||||
|
From 16724d6ea40a2c9315f5a0d81005dfa4d7a6da24 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Luca Weiss <luca.weiss@fairphone.com>
|
||||||
|
Date: Fri, 20 Oct 2023 11:55:40 +0100
|
||||||
|
Subject: [PATCH] nvmem: qfprom: Mark core clk as optional
|
||||||
|
|
||||||
|
On some platforms like sc7280 on non-ChromeOS devices the core clock
|
||||||
|
cannot be touched by Linux so we cannot provide it. Mark it as optional
|
||||||
|
as accessing qfprom for reading works without it but we still prohibit
|
||||||
|
writing if we cannot provide the clock.
|
||||||
|
|
||||||
|
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
|
||||||
|
Reviewed-by: Douglas Anderson <dianders@chromium.org>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231020105545.216052-2-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/qfprom.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/qfprom.c
|
||||||
|
+++ b/drivers/nvmem/qfprom.c
|
||||||
|
@@ -423,12 +423,12 @@ static int qfprom_probe(struct platform_
|
||||||
|
if (IS_ERR(priv->vcc))
|
||||||
|
return PTR_ERR(priv->vcc);
|
||||||
|
|
||||||
|
- priv->secclk = devm_clk_get(dev, "core");
|
||||||
|
+ priv->secclk = devm_clk_get_optional(dev, "core");
|
||||||
|
if (IS_ERR(priv->secclk))
|
||||||
|
return dev_err_probe(dev, PTR_ERR(priv->secclk), "Error getting clock\n");
|
||||||
|
|
||||||
|
- /* Only enable writing if we have SoC data. */
|
||||||
|
- if (priv->soc_data)
|
||||||
|
+ /* Only enable writing if we have SoC data and a valid clock */
|
||||||
|
+ if (priv->soc_data && priv->secclk)
|
||||||
|
econfig.reg_write = qfprom_reg_write;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,330 @@
|
|||||||
|
From 2cc3b37f5b6df8189d55d0e812d9658ce256dfec Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Fri, 20 Oct 2023 11:55:41 +0100
|
||||||
|
Subject: [PATCH] nvmem: add explicit config option to read old syntax fixed OF
|
||||||
|
cells
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Binding for fixed NVMEM cells defined directly as NVMEM device subnodes
|
||||||
|
has been deprecated. It has been replaced by the "fixed-layout" NVMEM
|
||||||
|
layout binding.
|
||||||
|
|
||||||
|
New syntax is meant to be clearer and should help avoiding imprecise
|
||||||
|
bindings.
|
||||||
|
|
||||||
|
NVMEM subsystem already supports the new binding. It should be a good
|
||||||
|
idea to limit support for old syntax to existing drivers that actually
|
||||||
|
support & use it (we can't break backward compatibility!). That way we
|
||||||
|
additionally encourage new bindings & drivers to ignore deprecated
|
||||||
|
binding.
|
||||||
|
|
||||||
|
It wasn't clear (to me) if rtc and w1 code actually uses old syntax
|
||||||
|
fixed cells. I enabled them to don't risk any breakage.
|
||||||
|
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
[for meson-{efuse,mx-efuse}.c]
|
||||||
|
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||||
|
[for mtk-efuse.c, nvmem/core.c, nvmem-provider.h]
|
||||||
|
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||||
|
[MT8192, MT8195 Chromebooks]
|
||||||
|
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||||
|
[for microchip-otpc.c]
|
||||||
|
Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
|
[SAMA7G5-EK]
|
||||||
|
Tested-by: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
|
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231020105545.216052-3-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 2 ++
|
||||||
|
drivers/nvmem/apple-efuses.c | 1 +
|
||||||
|
drivers/nvmem/core.c | 8 +++++---
|
||||||
|
drivers/nvmem/imx-ocotp-scu.c | 1 +
|
||||||
|
drivers/nvmem/imx-ocotp.c | 1 +
|
||||||
|
drivers/nvmem/meson-efuse.c | 1 +
|
||||||
|
drivers/nvmem/meson-mx-efuse.c | 1 +
|
||||||
|
drivers/nvmem/microchip-otpc.c | 1 +
|
||||||
|
drivers/nvmem/mtk-efuse.c | 1 +
|
||||||
|
drivers/nvmem/qcom-spmi-sdam.c | 1 +
|
||||||
|
drivers/nvmem/qfprom.c | 1 +
|
||||||
|
drivers/nvmem/rave-sp-eeprom.c | 1 +
|
||||||
|
drivers/nvmem/rockchip-efuse.c | 1 +
|
||||||
|
drivers/nvmem/sc27xx-efuse.c | 1 +
|
||||||
|
drivers/nvmem/sec-qfprom.c | 1 +
|
||||||
|
drivers/nvmem/sprd-efuse.c | 1 +
|
||||||
|
drivers/nvmem/stm32-romem.c | 1 +
|
||||||
|
drivers/nvmem/sunplus-ocotp.c | 1 +
|
||||||
|
drivers/nvmem/sunxi_sid.c | 1 +
|
||||||
|
drivers/nvmem/uniphier-efuse.c | 1 +
|
||||||
|
drivers/nvmem/zynqmp_nvmem.c | 1 +
|
||||||
|
drivers/rtc/nvmem.c | 1 +
|
||||||
|
drivers/w1/slaves/w1_ds250x.c | 1 +
|
||||||
|
include/linux/nvmem-provider.h | 2 ++
|
||||||
|
24 files changed, 30 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -541,6 +541,7 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
config.dev = &mtd->dev;
|
||||||
|
config.name = dev_name(&mtd->dev);
|
||||||
|
config.owner = THIS_MODULE;
|
||||||
|
+ config.add_legacy_fixed_of_cells = of_device_is_compatible(node, "nvmem-cells");
|
||||||
|
config.reg_read = mtd_nvmem_reg_read;
|
||||||
|
config.size = mtd->size;
|
||||||
|
config.word_size = 1;
|
||||||
|
@@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvme
|
||||||
|
config.name = compatible;
|
||||||
|
config.id = NVMEM_DEVID_AUTO;
|
||||||
|
config.owner = THIS_MODULE;
|
||||||
|
+ config.add_legacy_fixed_of_cells = true;
|
||||||
|
config.type = NVMEM_TYPE_OTP;
|
||||||
|
config.root_only = true;
|
||||||
|
config.ignore_wp = true;
|
||||||
|
--- a/drivers/nvmem/apple-efuses.c
|
||||||
|
+++ b/drivers/nvmem/apple-efuses.c
|
||||||
|
@@ -36,6 +36,7 @@ static int apple_efuses_probe(struct pla
|
||||||
|
struct resource *res;
|
||||||
|
struct nvmem_config config = {
|
||||||
|
.dev = &pdev->dev,
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.read_only = true,
|
||||||
|
.reg_read = apple_efuses_read,
|
||||||
|
.stride = sizeof(u32),
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -998,9 +998,11 @@ struct nvmem_device *nvmem_register(cons
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||||
|
- if (rval)
|
||||||
|
- goto err_remove_cells;
|
||||||
|
+ if (config->add_legacy_fixed_of_cells) {
|
||||||
|
+ rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||||
|
+ if (rval)
|
||||||
|
+ goto err_remove_cells;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
|
if (rval)
|
||||||
|
--- a/drivers/nvmem/imx-ocotp-scu.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp-scu.c
|
||||||
|
@@ -220,6 +220,7 @@ static int imx_scu_ocotp_write(void *con
|
||||||
|
|
||||||
|
static struct nvmem_config imx_scu_ocotp_nvmem_config = {
|
||||||
|
.name = "imx-scu-ocotp",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.read_only = false,
|
||||||
|
.word_size = 4,
|
||||||
|
.stride = 1,
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -616,6 +616,7 @@ static int imx_ocotp_probe(struct platfo
|
||||||
|
return PTR_ERR(priv->clk);
|
||||||
|
|
||||||
|
priv->params = of_device_get_match_data(&pdev->dev);
|
||||||
|
+ imx_ocotp_nvmem_config.add_legacy_fixed_of_cells = true;
|
||||||
|
imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
|
||||||
|
imx_ocotp_nvmem_config.dev = dev;
|
||||||
|
imx_ocotp_nvmem_config.priv = priv;
|
||||||
|
--- a/drivers/nvmem/meson-efuse.c
|
||||||
|
+++ b/drivers/nvmem/meson-efuse.c
|
||||||
|
@@ -93,6 +93,7 @@ static int meson_efuse_probe(struct plat
|
||||||
|
|
||||||
|
econfig->dev = dev;
|
||||||
|
econfig->name = dev_name(dev);
|
||||||
|
+ econfig->add_legacy_fixed_of_cells = true;
|
||||||
|
econfig->stride = 1;
|
||||||
|
econfig->word_size = 1;
|
||||||
|
econfig->reg_read = meson_efuse_read;
|
||||||
|
--- a/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
+++ b/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
@@ -211,6 +211,7 @@ static int meson_mx_efuse_probe(struct p
|
||||||
|
efuse->config.owner = THIS_MODULE;
|
||||||
|
efuse->config.dev = &pdev->dev;
|
||||||
|
efuse->config.priv = efuse;
|
||||||
|
+ efuse->config.add_legacy_fixed_of_cells = true;
|
||||||
|
efuse->config.stride = drvdata->word_size;
|
||||||
|
efuse->config.word_size = drvdata->word_size;
|
||||||
|
efuse->config.size = SZ_512;
|
||||||
|
--- a/drivers/nvmem/microchip-otpc.c
|
||||||
|
+++ b/drivers/nvmem/microchip-otpc.c
|
||||||
|
@@ -261,6 +261,7 @@ static int mchp_otpc_probe(struct platfo
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
mchp_nvmem_config.dev = otpc->dev;
|
||||||
|
+ mchp_nvmem_config.add_legacy_fixed_of_cells = true;
|
||||||
|
mchp_nvmem_config.size = size;
|
||||||
|
mchp_nvmem_config.priv = otpc;
|
||||||
|
nvmem = devm_nvmem_register(&pdev->dev, &mchp_nvmem_config);
|
||||||
|
--- a/drivers/nvmem/mtk-efuse.c
|
||||||
|
+++ b/drivers/nvmem/mtk-efuse.c
|
||||||
|
@@ -83,6 +83,7 @@ static int mtk_efuse_probe(struct platfo
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
||||||
|
pdata = device_get_match_data(dev);
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
econfig.stride = 1;
|
||||||
|
econfig.word_size = 1;
|
||||||
|
econfig.reg_read = mtk_reg_read;
|
||||||
|
--- a/drivers/nvmem/qcom-spmi-sdam.c
|
||||||
|
+++ b/drivers/nvmem/qcom-spmi-sdam.c
|
||||||
|
@@ -142,6 +142,7 @@ static int sdam_probe(struct platform_de
|
||||||
|
sdam->sdam_config.name = "spmi_sdam";
|
||||||
|
sdam->sdam_config.id = NVMEM_DEVID_AUTO;
|
||||||
|
sdam->sdam_config.owner = THIS_MODULE;
|
||||||
|
+ sdam->sdam_config.add_legacy_fixed_of_cells = true;
|
||||||
|
sdam->sdam_config.stride = 1;
|
||||||
|
sdam->sdam_config.word_size = 1;
|
||||||
|
sdam->sdam_config.reg_read = sdam_read;
|
||||||
|
--- a/drivers/nvmem/qfprom.c
|
||||||
|
+++ b/drivers/nvmem/qfprom.c
|
||||||
|
@@ -357,6 +357,7 @@ static int qfprom_probe(struct platform_
|
||||||
|
{
|
||||||
|
struct nvmem_config econfig = {
|
||||||
|
.name = "qfprom",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.stride = 1,
|
||||||
|
.word_size = 1,
|
||||||
|
.id = NVMEM_DEVID_AUTO,
|
||||||
|
--- a/drivers/nvmem/rave-sp-eeprom.c
|
||||||
|
+++ b/drivers/nvmem/rave-sp-eeprom.c
|
||||||
|
@@ -328,6 +328,7 @@ static int rave_sp_eeprom_probe(struct p
|
||||||
|
of_property_read_string(np, "zii,eeprom-name", &config.name);
|
||||||
|
config.priv = eeprom;
|
||||||
|
config.dev = dev;
|
||||||
|
+ config.add_legacy_fixed_of_cells = true;
|
||||||
|
config.size = size;
|
||||||
|
config.reg_read = rave_sp_eeprom_reg_read;
|
||||||
|
config.reg_write = rave_sp_eeprom_reg_write;
|
||||||
|
--- a/drivers/nvmem/rockchip-efuse.c
|
||||||
|
+++ b/drivers/nvmem/rockchip-efuse.c
|
||||||
|
@@ -205,6 +205,7 @@ static int rockchip_rk3399_efuse_read(vo
|
||||||
|
|
||||||
|
static struct nvmem_config econfig = {
|
||||||
|
.name = "rockchip-efuse",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.stride = 1,
|
||||||
|
.word_size = 1,
|
||||||
|
.read_only = true,
|
||||||
|
--- a/drivers/nvmem/sc27xx-efuse.c
|
||||||
|
+++ b/drivers/nvmem/sc27xx-efuse.c
|
||||||
|
@@ -248,6 +248,7 @@ static int sc27xx_efuse_probe(struct pla
|
||||||
|
econfig.reg_read = sc27xx_efuse_read;
|
||||||
|
econfig.priv = efuse;
|
||||||
|
econfig.dev = &pdev->dev;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem = devm_nvmem_register(&pdev->dev, &econfig);
|
||||||
|
if (IS_ERR(nvmem)) {
|
||||||
|
dev_err(&pdev->dev, "failed to register nvmem config\n");
|
||||||
|
--- a/drivers/nvmem/sec-qfprom.c
|
||||||
|
+++ b/drivers/nvmem/sec-qfprom.c
|
||||||
|
@@ -47,6 +47,7 @@ static int sec_qfprom_probe(struct platf
|
||||||
|
{
|
||||||
|
struct nvmem_config econfig = {
|
||||||
|
.name = "sec-qfprom",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.stride = 1,
|
||||||
|
.word_size = 1,
|
||||||
|
.id = NVMEM_DEVID_AUTO,
|
||||||
|
--- a/drivers/nvmem/sprd-efuse.c
|
||||||
|
+++ b/drivers/nvmem/sprd-efuse.c
|
||||||
|
@@ -408,6 +408,7 @@ static int sprd_efuse_probe(struct platf
|
||||||
|
econfig.read_only = false;
|
||||||
|
econfig.name = "sprd-efuse";
|
||||||
|
econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
econfig.reg_read = sprd_efuse_read;
|
||||||
|
econfig.reg_write = sprd_efuse_write;
|
||||||
|
econfig.priv = efuse;
|
||||||
|
--- a/drivers/nvmem/stm32-romem.c
|
||||||
|
+++ b/drivers/nvmem/stm32-romem.c
|
||||||
|
@@ -207,6 +207,7 @@ static int stm32_romem_probe(struct plat
|
||||||
|
priv->cfg.priv = priv;
|
||||||
|
priv->cfg.owner = THIS_MODULE;
|
||||||
|
priv->cfg.type = NVMEM_TYPE_OTP;
|
||||||
|
+ priv->cfg.add_legacy_fixed_of_cells = true;
|
||||||
|
|
||||||
|
priv->lower = 0;
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/sunplus-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/sunplus-ocotp.c
|
||||||
|
@@ -145,6 +145,7 @@ disable_clk:
|
||||||
|
|
||||||
|
static struct nvmem_config sp_ocotp_nvmem_config = {
|
||||||
|
.name = "sp-ocotp",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.read_only = true,
|
||||||
|
.word_size = 1,
|
||||||
|
.size = QAC628_OTP_SIZE,
|
||||||
|
--- a/drivers/nvmem/sunxi_sid.c
|
||||||
|
+++ b/drivers/nvmem/sunxi_sid.c
|
||||||
|
@@ -154,6 +154,7 @@ static int sunxi_sid_probe(struct platfo
|
||||||
|
nvmem_cfg->dev = dev;
|
||||||
|
nvmem_cfg->name = "sunxi-sid";
|
||||||
|
nvmem_cfg->type = NVMEM_TYPE_OTP;
|
||||||
|
+ nvmem_cfg->add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem_cfg->read_only = true;
|
||||||
|
nvmem_cfg->size = cfg->size;
|
||||||
|
nvmem_cfg->word_size = 1;
|
||||||
|
--- a/drivers/nvmem/uniphier-efuse.c
|
||||||
|
+++ b/drivers/nvmem/uniphier-efuse.c
|
||||||
|
@@ -52,6 +52,7 @@ static int uniphier_efuse_probe(struct p
|
||||||
|
econfig.size = resource_size(res);
|
||||||
|
econfig.priv = priv;
|
||||||
|
econfig.dev = dev;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem = devm_nvmem_register(dev, &econfig);
|
||||||
|
|
||||||
|
return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
--- a/drivers/nvmem/zynqmp_nvmem.c
|
||||||
|
+++ b/drivers/nvmem/zynqmp_nvmem.c
|
||||||
|
@@ -58,6 +58,7 @@ static int zynqmp_nvmem_probe(struct pla
|
||||||
|
|
||||||
|
priv->dev = dev;
|
||||||
|
econfig.dev = dev;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
econfig.reg_read = zynqmp_nvmem_read;
|
||||||
|
econfig.priv = priv;
|
||||||
|
|
||||||
|
--- a/drivers/rtc/nvmem.c
|
||||||
|
+++ b/drivers/rtc/nvmem.c
|
||||||
|
@@ -21,6 +21,7 @@ int devm_rtc_nvmem_register(struct rtc_d
|
||||||
|
|
||||||
|
nvmem_config->dev = dev;
|
||||||
|
nvmem_config->owner = rtc->owner;
|
||||||
|
+ nvmem_config->add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem = devm_nvmem_register(dev, nvmem_config);
|
||||||
|
if (IS_ERR(nvmem))
|
||||||
|
dev_err(dev, "failed to register nvmem device for RTC\n");
|
||||||
|
--- a/drivers/w1/slaves/w1_ds250x.c
|
||||||
|
+++ b/drivers/w1/slaves/w1_ds250x.c
|
||||||
|
@@ -168,6 +168,7 @@ static int w1_eprom_add_slave(struct w1_
|
||||||
|
struct nvmem_device *nvmem;
|
||||||
|
struct nvmem_config nvmem_cfg = {
|
||||||
|
.dev = &sl->dev,
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.reg_read = w1_nvmem_read,
|
||||||
|
.type = NVMEM_TYPE_OTP,
|
||||||
|
.read_only = true,
|
||||||
|
--- a/include/linux/nvmem-provider.h
|
||||||
|
+++ b/include/linux/nvmem-provider.h
|
||||||
|
@@ -82,6 +82,7 @@ struct nvmem_cell_info {
|
||||||
|
* @owner: Pointer to exporter module. Used for refcounting.
|
||||||
|
* @cells: Optional array of pre-defined NVMEM cells.
|
||||||
|
* @ncells: Number of elements in cells.
|
||||||
|
+ * @add_legacy_fixed_of_cells: Read fixed NVMEM cells from old OF syntax.
|
||||||
|
* @keepout: Optional array of keepout ranges (sorted ascending by start).
|
||||||
|
* @nkeepout: Number of elements in the keepout array.
|
||||||
|
* @type: Type of the nvmem storage
|
||||||
|
@@ -112,6 +113,7 @@ struct nvmem_config {
|
||||||
|
struct module *owner;
|
||||||
|
const struct nvmem_cell_info *cells;
|
||||||
|
int ncells;
|
||||||
|
+ bool add_legacy_fixed_of_cells;
|
||||||
|
const struct nvmem_keepout *keepout;
|
||||||
|
unsigned int nkeepout;
|
||||||
|
enum nvmem_type type;
|
@ -0,0 +1,77 @@
|
|||||||
|
From 0720219f4d34a88a9badb4de70cfad7585687d48 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Herring <robh@kernel.org>
|
||||||
|
Date: Fri, 20 Oct 2023 11:55:45 +0100
|
||||||
|
Subject: [PATCH] nvmem: Use device_get_match_data()
|
||||||
|
|
||||||
|
Use preferred device_get_match_data() instead of of_match_device() to
|
||||||
|
get the driver match data. With this, adjust the includes to explicitly
|
||||||
|
include the correct headers.
|
||||||
|
|
||||||
|
Signed-off-by: Rob Herring <robh@kernel.org>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231020105545.216052-7-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/mxs-ocotp.c | 10 ++++------
|
||||||
|
drivers/nvmem/stm32-romem.c | 7 ++++---
|
||||||
|
2 files changed, 8 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/mxs-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/mxs-ocotp.c
|
||||||
|
@@ -13,8 +13,9 @@
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/nvmem-provider.h>
|
||||||
|
-#include <linux/of_device.h>
|
||||||
|
+#include <linux/of.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
+#include <linux/property.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/stmp_device.h>
|
||||||
|
|
||||||
|
@@ -140,11 +141,10 @@ static int mxs_ocotp_probe(struct platfo
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
const struct mxs_data *data;
|
||||||
|
struct mxs_ocotp *otp;
|
||||||
|
- const struct of_device_id *match;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
- match = of_match_device(dev->driver->of_match_table, dev);
|
||||||
|
- if (!match || !match->data)
|
||||||
|
+ data = device_get_match_data(dev);
|
||||||
|
+ if (!data)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
otp = devm_kzalloc(dev, sizeof(*otp), GFP_KERNEL);
|
||||||
|
@@ -169,8 +169,6 @@ static int mxs_ocotp_probe(struct platfo
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- data = match->data;
|
||||||
|
-
|
||||||
|
ocotp_config.size = data->size;
|
||||||
|
ocotp_config.priv = otp;
|
||||||
|
ocotp_config.dev = dev;
|
||||||
|
--- a/drivers/nvmem/stm32-romem.c
|
||||||
|
+++ b/drivers/nvmem/stm32-romem.c
|
||||||
|
@@ -10,7 +10,9 @@
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/nvmem-provider.h>
|
||||||
|
-#include <linux/of_device.h>
|
||||||
|
+#include <linux/of.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+#include <linux/property.h>
|
||||||
|
#include <linux/tee_drv.h>
|
||||||
|
|
||||||
|
#include "stm32-bsec-optee-ta.h"
|
||||||
|
@@ -211,8 +213,7 @@ static int stm32_romem_probe(struct plat
|
||||||
|
|
||||||
|
priv->lower = 0;
|
||||||
|
|
||||||
|
- cfg = (const struct stm32_romem_cfg *)
|
||||||
|
- of_match_device(dev->driver->of_match_table, dev)->data;
|
||||||
|
+ cfg = device_get_match_data(dev);
|
||||||
|
if (!cfg) {
|
||||||
|
priv->cfg.read_only = true;
|
||||||
|
priv->cfg.size = resource_size(res);
|
@ -0,0 +1,77 @@
|
|||||||
|
From f4cf4e5db331a5ce69e3f0b21d322cac0f4e4b5d Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Mon, 23 Oct 2023 12:27:59 +0200
|
||||||
|
Subject: [PATCH] Revert "nvmem: add new config option"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This reverts commit 517f14d9cf3533d5ab4fded195ab6f80a92e378f.
|
||||||
|
|
||||||
|
Config option "no_of_node" is no longer needed since adding a more
|
||||||
|
explicit and targeted option "add_legacy_fixed_of_cells".
|
||||||
|
|
||||||
|
That "no_of_node" config option was needed *earlier* to help mtd's case.
|
||||||
|
|
||||||
|
DT nodes of MTD partitions (that are also NVMEM devices) may contain
|
||||||
|
subnodes. Those SHOULD NOT be treated as NVMEM fixed cells.
|
||||||
|
|
||||||
|
To prevent NVMEM core code from parsing subnodes a "no_of_node" option
|
||||||
|
was added (and set to true in mtd) to make for_each_child_of_node() in
|
||||||
|
NVMEM a no-op. That was a bit hacky because it was messing with
|
||||||
|
"of_node" pointer to achieve some side-effect.
|
||||||
|
|
||||||
|
With the introduction of "add_legacy_fixed_of_cells" config option
|
||||||
|
things got more explicit. MTD subsystem simply tells NVMEM when to look
|
||||||
|
for fixed cells and there is no need to hack "of_node" pointer anymore.
|
||||||
|
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231023102759.31529-1-zajec5@gmail.com
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 1 -
|
||||||
|
drivers/nvmem/core.c | 2 +-
|
||||||
|
include/linux/nvmem-provider.h | 2 --
|
||||||
|
3 files changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -549,7 +549,6 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
config.read_only = true;
|
||||||
|
config.root_only = true;
|
||||||
|
config.ignore_wp = true;
|
||||||
|
- config.no_of_node = !of_device_is_compatible(node, "nvmem-cells");
|
||||||
|
config.priv = mtd;
|
||||||
|
|
||||||
|
mtd->nvmem = nvmem_register(&config);
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -936,7 +936,7 @@ struct nvmem_device *nvmem_register(cons
|
||||||
|
nvmem->nkeepout = config->nkeepout;
|
||||||
|
if (config->of_node)
|
||||||
|
nvmem->dev.of_node = config->of_node;
|
||||||
|
- else if (!config->no_of_node)
|
||||||
|
+ else
|
||||||
|
nvmem->dev.of_node = config->dev->of_node;
|
||||||
|
|
||||||
|
switch (config->id) {
|
||||||
|
--- a/include/linux/nvmem-provider.h
|
||||||
|
+++ b/include/linux/nvmem-provider.h
|
||||||
|
@@ -89,7 +89,6 @@ struct nvmem_cell_info {
|
||||||
|
* @read_only: Device is read-only.
|
||||||
|
* @root_only: Device is accessibly to root only.
|
||||||
|
* @of_node: If given, this will be used instead of the parent's of_node.
|
||||||
|
- * @no_of_node: Device should not use the parent's of_node even if it's !NULL.
|
||||||
|
* @reg_read: Callback to read data.
|
||||||
|
* @reg_write: Callback to write data.
|
||||||
|
* @size: Device size.
|
||||||
|
@@ -122,7 +121,6 @@ struct nvmem_config {
|
||||||
|
bool ignore_wp;
|
||||||
|
struct nvmem_layout *layout;
|
||||||
|
struct device_node *of_node;
|
||||||
|
- bool no_of_node;
|
||||||
|
nvmem_reg_read_t reg_read;
|
||||||
|
nvmem_reg_write_t reg_write;
|
||||||
|
int size;
|
@ -0,0 +1,28 @@
|
|||||||
|
From 414a98abbefd82d591f4e2d1efd2917bcd3b6f6d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Date: Fri, 13 Oct 2023 13:49:02 +0100
|
||||||
|
Subject: [PATCH] nvmem: imx: correct nregs for i.MX6SLL
|
||||||
|
|
||||||
|
The nregs for i.MX6SLL should be 80 per fuse map, correct it.
|
||||||
|
|
||||||
|
Fixes: 6da27821a6f5 ("nvmem: imx-ocotp: add support for imx6sll")
|
||||||
|
Cc: Stable@vger.kernel.org
|
||||||
|
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231013124904.175782-2-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -499,7 +499,7 @@ static const struct ocotp_params imx6sl_
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ocotp_params imx6sll_params = {
|
||||||
|
- .nregs = 128,
|
||||||
|
+ .nregs = 80,
|
||||||
|
.bank_address_words = 0,
|
||||||
|
.set_timing = imx_ocotp_set_imx6_timing,
|
||||||
|
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
@ -0,0 +1,28 @@
|
|||||||
|
From 7d6e10f5d254681983b53d979422c8de3fadbefb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Date: Fri, 13 Oct 2023 13:49:03 +0100
|
||||||
|
Subject: [PATCH] nvmem: imx: correct nregs for i.MX6UL
|
||||||
|
|
||||||
|
The nregs for i.MX6UL should be 144 per fuse map, correct it.
|
||||||
|
|
||||||
|
Fixes: 4aa2b4802046 ("nvmem: octop: Add support for imx6ul")
|
||||||
|
Cc: Stable@vger.kernel.org
|
||||||
|
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231013124904.175782-3-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -513,7 +513,7 @@ static const struct ocotp_params imx6sx_
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ocotp_params imx6ul_params = {
|
||||||
|
- .nregs = 128,
|
||||||
|
+ .nregs = 144,
|
||||||
|
.bank_address_words = 0,
|
||||||
|
.set_timing = imx_ocotp_set_imx6_timing,
|
||||||
|
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
@ -0,0 +1,28 @@
|
|||||||
|
From 2382c1b044231fd49eaf9aa82bc7113fc55487b8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Date: Fri, 13 Oct 2023 13:49:04 +0100
|
||||||
|
Subject: [PATCH] nvmem: imx: correct nregs for i.MX6ULL
|
||||||
|
|
||||||
|
The nregs for i.MX6ULL should be 80 per fuse map, correct it.
|
||||||
|
|
||||||
|
Fixes: ffbc34bf0e9c ("nvmem: imx-ocotp: Implement i.MX6ULL/ULZ support")
|
||||||
|
Cc: Stable@vger.kernel.org
|
||||||
|
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231013124904.175782-4-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -520,7 +520,7 @@ static const struct ocotp_params imx6ul_
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ocotp_params imx6ull_params = {
|
||||||
|
- .nregs = 64,
|
||||||
|
+ .nregs = 80,
|
||||||
|
.bank_address_words = 0,
|
||||||
|
.set_timing = imx_ocotp_set_imx6_timing,
|
||||||
|
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
@ -0,0 +1,37 @@
|
|||||||
|
From 16724d6ea40a2c9315f5a0d81005dfa4d7a6da24 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Luca Weiss <luca.weiss@fairphone.com>
|
||||||
|
Date: Fri, 20 Oct 2023 11:55:40 +0100
|
||||||
|
Subject: [PATCH] nvmem: qfprom: Mark core clk as optional
|
||||||
|
|
||||||
|
On some platforms like sc7280 on non-ChromeOS devices the core clock
|
||||||
|
cannot be touched by Linux so we cannot provide it. Mark it as optional
|
||||||
|
as accessing qfprom for reading works without it but we still prohibit
|
||||||
|
writing if we cannot provide the clock.
|
||||||
|
|
||||||
|
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
|
||||||
|
Reviewed-by: Douglas Anderson <dianders@chromium.org>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231020105545.216052-2-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/qfprom.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/qfprom.c
|
||||||
|
+++ b/drivers/nvmem/qfprom.c
|
||||||
|
@@ -423,12 +423,12 @@ static int qfprom_probe(struct platform_
|
||||||
|
if (IS_ERR(priv->vcc))
|
||||||
|
return PTR_ERR(priv->vcc);
|
||||||
|
|
||||||
|
- priv->secclk = devm_clk_get(dev, "core");
|
||||||
|
+ priv->secclk = devm_clk_get_optional(dev, "core");
|
||||||
|
if (IS_ERR(priv->secclk))
|
||||||
|
return dev_err_probe(dev, PTR_ERR(priv->secclk), "Error getting clock\n");
|
||||||
|
|
||||||
|
- /* Only enable writing if we have SoC data. */
|
||||||
|
- if (priv->soc_data)
|
||||||
|
+ /* Only enable writing if we have SoC data and a valid clock */
|
||||||
|
+ if (priv->soc_data && priv->secclk)
|
||||||
|
econfig.reg_write = qfprom_reg_write;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,330 @@
|
|||||||
|
From 2cc3b37f5b6df8189d55d0e812d9658ce256dfec Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Fri, 20 Oct 2023 11:55:41 +0100
|
||||||
|
Subject: [PATCH] nvmem: add explicit config option to read old syntax fixed OF
|
||||||
|
cells
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Binding for fixed NVMEM cells defined directly as NVMEM device subnodes
|
||||||
|
has been deprecated. It has been replaced by the "fixed-layout" NVMEM
|
||||||
|
layout binding.
|
||||||
|
|
||||||
|
New syntax is meant to be clearer and should help avoiding imprecise
|
||||||
|
bindings.
|
||||||
|
|
||||||
|
NVMEM subsystem already supports the new binding. It should be a good
|
||||||
|
idea to limit support for old syntax to existing drivers that actually
|
||||||
|
support & use it (we can't break backward compatibility!). That way we
|
||||||
|
additionally encourage new bindings & drivers to ignore deprecated
|
||||||
|
binding.
|
||||||
|
|
||||||
|
It wasn't clear (to me) if rtc and w1 code actually uses old syntax
|
||||||
|
fixed cells. I enabled them to don't risk any breakage.
|
||||||
|
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
[for meson-{efuse,mx-efuse}.c]
|
||||||
|
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||||
|
[for mtk-efuse.c, nvmem/core.c, nvmem-provider.h]
|
||||||
|
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||||
|
[MT8192, MT8195 Chromebooks]
|
||||||
|
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||||
|
[for microchip-otpc.c]
|
||||||
|
Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
|
[SAMA7G5-EK]
|
||||||
|
Tested-by: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
|
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231020105545.216052-3-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 2 ++
|
||||||
|
drivers/nvmem/apple-efuses.c | 1 +
|
||||||
|
drivers/nvmem/core.c | 8 +++++---
|
||||||
|
drivers/nvmem/imx-ocotp-scu.c | 1 +
|
||||||
|
drivers/nvmem/imx-ocotp.c | 1 +
|
||||||
|
drivers/nvmem/meson-efuse.c | 1 +
|
||||||
|
drivers/nvmem/meson-mx-efuse.c | 1 +
|
||||||
|
drivers/nvmem/microchip-otpc.c | 1 +
|
||||||
|
drivers/nvmem/mtk-efuse.c | 1 +
|
||||||
|
drivers/nvmem/qcom-spmi-sdam.c | 1 +
|
||||||
|
drivers/nvmem/qfprom.c | 1 +
|
||||||
|
drivers/nvmem/rave-sp-eeprom.c | 1 +
|
||||||
|
drivers/nvmem/rockchip-efuse.c | 1 +
|
||||||
|
drivers/nvmem/sc27xx-efuse.c | 1 +
|
||||||
|
drivers/nvmem/sec-qfprom.c | 1 +
|
||||||
|
drivers/nvmem/sprd-efuse.c | 1 +
|
||||||
|
drivers/nvmem/stm32-romem.c | 1 +
|
||||||
|
drivers/nvmem/sunplus-ocotp.c | 1 +
|
||||||
|
drivers/nvmem/sunxi_sid.c | 1 +
|
||||||
|
drivers/nvmem/uniphier-efuse.c | 1 +
|
||||||
|
drivers/nvmem/zynqmp_nvmem.c | 1 +
|
||||||
|
drivers/rtc/nvmem.c | 1 +
|
||||||
|
drivers/w1/slaves/w1_ds250x.c | 1 +
|
||||||
|
include/linux/nvmem-provider.h | 2 ++
|
||||||
|
24 files changed, 30 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -523,6 +523,7 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
config.dev = &mtd->dev;
|
||||||
|
config.name = dev_name(&mtd->dev);
|
||||||
|
config.owner = THIS_MODULE;
|
||||||
|
+ config.add_legacy_fixed_of_cells = of_device_is_compatible(node, "nvmem-cells");
|
||||||
|
config.reg_read = mtd_nvmem_reg_read;
|
||||||
|
config.size = mtd->size;
|
||||||
|
config.word_size = 1;
|
||||||
|
@@ -891,6 +892,7 @@ static struct nvmem_device *mtd_otp_nvme
|
||||||
|
config.name = compatible;
|
||||||
|
config.id = NVMEM_DEVID_AUTO;
|
||||||
|
config.owner = THIS_MODULE;
|
||||||
|
+ config.add_legacy_fixed_of_cells = true;
|
||||||
|
config.type = NVMEM_TYPE_OTP;
|
||||||
|
config.root_only = true;
|
||||||
|
config.ignore_wp = true;
|
||||||
|
--- a/drivers/nvmem/apple-efuses.c
|
||||||
|
+++ b/drivers/nvmem/apple-efuses.c
|
||||||
|
@@ -36,6 +36,7 @@ static int apple_efuses_probe(struct pla
|
||||||
|
struct resource *res;
|
||||||
|
struct nvmem_config config = {
|
||||||
|
.dev = &pdev->dev,
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.read_only = true,
|
||||||
|
.reg_read = apple_efuses_read,
|
||||||
|
.stride = sizeof(u32),
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -998,9 +998,11 @@ struct nvmem_device *nvmem_register(cons
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||||
|
- if (rval)
|
||||||
|
- goto err_remove_cells;
|
||||||
|
+ if (config->add_legacy_fixed_of_cells) {
|
||||||
|
+ rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||||
|
+ if (rval)
|
||||||
|
+ goto err_remove_cells;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
|
if (rval)
|
||||||
|
--- a/drivers/nvmem/imx-ocotp-scu.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp-scu.c
|
||||||
|
@@ -220,6 +220,7 @@ static int imx_scu_ocotp_write(void *con
|
||||||
|
|
||||||
|
static struct nvmem_config imx_scu_ocotp_nvmem_config = {
|
||||||
|
.name = "imx-scu-ocotp",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.read_only = false,
|
||||||
|
.word_size = 4,
|
||||||
|
.stride = 1,
|
||||||
|
--- a/drivers/nvmem/imx-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/imx-ocotp.c
|
||||||
|
@@ -616,6 +616,7 @@ static int imx_ocotp_probe(struct platfo
|
||||||
|
return PTR_ERR(priv->clk);
|
||||||
|
|
||||||
|
priv->params = of_device_get_match_data(&pdev->dev);
|
||||||
|
+ imx_ocotp_nvmem_config.add_legacy_fixed_of_cells = true;
|
||||||
|
imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
|
||||||
|
imx_ocotp_nvmem_config.dev = dev;
|
||||||
|
imx_ocotp_nvmem_config.priv = priv;
|
||||||
|
--- a/drivers/nvmem/meson-efuse.c
|
||||||
|
+++ b/drivers/nvmem/meson-efuse.c
|
||||||
|
@@ -93,6 +93,7 @@ static int meson_efuse_probe(struct plat
|
||||||
|
|
||||||
|
econfig->dev = dev;
|
||||||
|
econfig->name = dev_name(dev);
|
||||||
|
+ econfig->add_legacy_fixed_of_cells = true;
|
||||||
|
econfig->stride = 1;
|
||||||
|
econfig->word_size = 1;
|
||||||
|
econfig->reg_read = meson_efuse_read;
|
||||||
|
--- a/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
+++ b/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
@@ -211,6 +211,7 @@ static int meson_mx_efuse_probe(struct p
|
||||||
|
efuse->config.owner = THIS_MODULE;
|
||||||
|
efuse->config.dev = &pdev->dev;
|
||||||
|
efuse->config.priv = efuse;
|
||||||
|
+ efuse->config.add_legacy_fixed_of_cells = true;
|
||||||
|
efuse->config.stride = drvdata->word_size;
|
||||||
|
efuse->config.word_size = drvdata->word_size;
|
||||||
|
efuse->config.size = SZ_512;
|
||||||
|
--- a/drivers/nvmem/microchip-otpc.c
|
||||||
|
+++ b/drivers/nvmem/microchip-otpc.c
|
||||||
|
@@ -261,6 +261,7 @@ static int mchp_otpc_probe(struct platfo
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
mchp_nvmem_config.dev = otpc->dev;
|
||||||
|
+ mchp_nvmem_config.add_legacy_fixed_of_cells = true;
|
||||||
|
mchp_nvmem_config.size = size;
|
||||||
|
mchp_nvmem_config.priv = otpc;
|
||||||
|
nvmem = devm_nvmem_register(&pdev->dev, &mchp_nvmem_config);
|
||||||
|
--- a/drivers/nvmem/mtk-efuse.c
|
||||||
|
+++ b/drivers/nvmem/mtk-efuse.c
|
||||||
|
@@ -83,6 +83,7 @@ static int mtk_efuse_probe(struct platfo
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
||||||
|
pdata = device_get_match_data(dev);
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
econfig.stride = 1;
|
||||||
|
econfig.word_size = 1;
|
||||||
|
econfig.reg_read = mtk_reg_read;
|
||||||
|
--- a/drivers/nvmem/qcom-spmi-sdam.c
|
||||||
|
+++ b/drivers/nvmem/qcom-spmi-sdam.c
|
||||||
|
@@ -142,6 +142,7 @@ static int sdam_probe(struct platform_de
|
||||||
|
sdam->sdam_config.name = "spmi_sdam";
|
||||||
|
sdam->sdam_config.id = NVMEM_DEVID_AUTO;
|
||||||
|
sdam->sdam_config.owner = THIS_MODULE;
|
||||||
|
+ sdam->sdam_config.add_legacy_fixed_of_cells = true;
|
||||||
|
sdam->sdam_config.stride = 1;
|
||||||
|
sdam->sdam_config.word_size = 1;
|
||||||
|
sdam->sdam_config.reg_read = sdam_read;
|
||||||
|
--- a/drivers/nvmem/qfprom.c
|
||||||
|
+++ b/drivers/nvmem/qfprom.c
|
||||||
|
@@ -357,6 +357,7 @@ static int qfprom_probe(struct platform_
|
||||||
|
{
|
||||||
|
struct nvmem_config econfig = {
|
||||||
|
.name = "qfprom",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.stride = 1,
|
||||||
|
.word_size = 1,
|
||||||
|
.id = NVMEM_DEVID_AUTO,
|
||||||
|
--- a/drivers/nvmem/rave-sp-eeprom.c
|
||||||
|
+++ b/drivers/nvmem/rave-sp-eeprom.c
|
||||||
|
@@ -328,6 +328,7 @@ static int rave_sp_eeprom_probe(struct p
|
||||||
|
of_property_read_string(np, "zii,eeprom-name", &config.name);
|
||||||
|
config.priv = eeprom;
|
||||||
|
config.dev = dev;
|
||||||
|
+ config.add_legacy_fixed_of_cells = true;
|
||||||
|
config.size = size;
|
||||||
|
config.reg_read = rave_sp_eeprom_reg_read;
|
||||||
|
config.reg_write = rave_sp_eeprom_reg_write;
|
||||||
|
--- a/drivers/nvmem/rockchip-efuse.c
|
||||||
|
+++ b/drivers/nvmem/rockchip-efuse.c
|
||||||
|
@@ -205,6 +205,7 @@ static int rockchip_rk3399_efuse_read(vo
|
||||||
|
|
||||||
|
static struct nvmem_config econfig = {
|
||||||
|
.name = "rockchip-efuse",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.stride = 1,
|
||||||
|
.word_size = 1,
|
||||||
|
.read_only = true,
|
||||||
|
--- a/drivers/nvmem/sc27xx-efuse.c
|
||||||
|
+++ b/drivers/nvmem/sc27xx-efuse.c
|
||||||
|
@@ -248,6 +248,7 @@ static int sc27xx_efuse_probe(struct pla
|
||||||
|
econfig.reg_read = sc27xx_efuse_read;
|
||||||
|
econfig.priv = efuse;
|
||||||
|
econfig.dev = &pdev->dev;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem = devm_nvmem_register(&pdev->dev, &econfig);
|
||||||
|
if (IS_ERR(nvmem)) {
|
||||||
|
dev_err(&pdev->dev, "failed to register nvmem config\n");
|
||||||
|
--- a/drivers/nvmem/sec-qfprom.c
|
||||||
|
+++ b/drivers/nvmem/sec-qfprom.c
|
||||||
|
@@ -47,6 +47,7 @@ static int sec_qfprom_probe(struct platf
|
||||||
|
{
|
||||||
|
struct nvmem_config econfig = {
|
||||||
|
.name = "sec-qfprom",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.stride = 1,
|
||||||
|
.word_size = 1,
|
||||||
|
.id = NVMEM_DEVID_AUTO,
|
||||||
|
--- a/drivers/nvmem/sprd-efuse.c
|
||||||
|
+++ b/drivers/nvmem/sprd-efuse.c
|
||||||
|
@@ -408,6 +408,7 @@ static int sprd_efuse_probe(struct platf
|
||||||
|
econfig.read_only = false;
|
||||||
|
econfig.name = "sprd-efuse";
|
||||||
|
econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
econfig.reg_read = sprd_efuse_read;
|
||||||
|
econfig.reg_write = sprd_efuse_write;
|
||||||
|
econfig.priv = efuse;
|
||||||
|
--- a/drivers/nvmem/stm32-romem.c
|
||||||
|
+++ b/drivers/nvmem/stm32-romem.c
|
||||||
|
@@ -207,6 +207,7 @@ static int stm32_romem_probe(struct plat
|
||||||
|
priv->cfg.priv = priv;
|
||||||
|
priv->cfg.owner = THIS_MODULE;
|
||||||
|
priv->cfg.type = NVMEM_TYPE_OTP;
|
||||||
|
+ priv->cfg.add_legacy_fixed_of_cells = true;
|
||||||
|
|
||||||
|
priv->lower = 0;
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/sunplus-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/sunplus-ocotp.c
|
||||||
|
@@ -145,6 +145,7 @@ disable_clk:
|
||||||
|
|
||||||
|
static struct nvmem_config sp_ocotp_nvmem_config = {
|
||||||
|
.name = "sp-ocotp",
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.read_only = true,
|
||||||
|
.word_size = 1,
|
||||||
|
.size = QAC628_OTP_SIZE,
|
||||||
|
--- a/drivers/nvmem/sunxi_sid.c
|
||||||
|
+++ b/drivers/nvmem/sunxi_sid.c
|
||||||
|
@@ -154,6 +154,7 @@ static int sunxi_sid_probe(struct platfo
|
||||||
|
nvmem_cfg->dev = dev;
|
||||||
|
nvmem_cfg->name = "sunxi-sid";
|
||||||
|
nvmem_cfg->type = NVMEM_TYPE_OTP;
|
||||||
|
+ nvmem_cfg->add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem_cfg->read_only = true;
|
||||||
|
nvmem_cfg->size = cfg->size;
|
||||||
|
nvmem_cfg->word_size = 1;
|
||||||
|
--- a/drivers/nvmem/uniphier-efuse.c
|
||||||
|
+++ b/drivers/nvmem/uniphier-efuse.c
|
||||||
|
@@ -52,6 +52,7 @@ static int uniphier_efuse_probe(struct p
|
||||||
|
econfig.size = resource_size(res);
|
||||||
|
econfig.priv = priv;
|
||||||
|
econfig.dev = dev;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem = devm_nvmem_register(dev, &econfig);
|
||||||
|
|
||||||
|
return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
--- a/drivers/nvmem/zynqmp_nvmem.c
|
||||||
|
+++ b/drivers/nvmem/zynqmp_nvmem.c
|
||||||
|
@@ -58,6 +58,7 @@ static int zynqmp_nvmem_probe(struct pla
|
||||||
|
|
||||||
|
priv->dev = dev;
|
||||||
|
econfig.dev = dev;
|
||||||
|
+ econfig.add_legacy_fixed_of_cells = true;
|
||||||
|
econfig.reg_read = zynqmp_nvmem_read;
|
||||||
|
econfig.priv = priv;
|
||||||
|
|
||||||
|
--- a/drivers/rtc/nvmem.c
|
||||||
|
+++ b/drivers/rtc/nvmem.c
|
||||||
|
@@ -21,6 +21,7 @@ int devm_rtc_nvmem_register(struct rtc_d
|
||||||
|
|
||||||
|
nvmem_config->dev = dev;
|
||||||
|
nvmem_config->owner = rtc->owner;
|
||||||
|
+ nvmem_config->add_legacy_fixed_of_cells = true;
|
||||||
|
nvmem = devm_nvmem_register(dev, nvmem_config);
|
||||||
|
if (IS_ERR(nvmem))
|
||||||
|
dev_err(dev, "failed to register nvmem device for RTC\n");
|
||||||
|
--- a/drivers/w1/slaves/w1_ds250x.c
|
||||||
|
+++ b/drivers/w1/slaves/w1_ds250x.c
|
||||||
|
@@ -168,6 +168,7 @@ static int w1_eprom_add_slave(struct w1_
|
||||||
|
struct nvmem_device *nvmem;
|
||||||
|
struct nvmem_config nvmem_cfg = {
|
||||||
|
.dev = &sl->dev,
|
||||||
|
+ .add_legacy_fixed_of_cells = true,
|
||||||
|
.reg_read = w1_nvmem_read,
|
||||||
|
.type = NVMEM_TYPE_OTP,
|
||||||
|
.read_only = true,
|
||||||
|
--- a/include/linux/nvmem-provider.h
|
||||||
|
+++ b/include/linux/nvmem-provider.h
|
||||||
|
@@ -82,6 +82,7 @@ struct nvmem_cell_info {
|
||||||
|
* @owner: Pointer to exporter module. Used for refcounting.
|
||||||
|
* @cells: Optional array of pre-defined NVMEM cells.
|
||||||
|
* @ncells: Number of elements in cells.
|
||||||
|
+ * @add_legacy_fixed_of_cells: Read fixed NVMEM cells from old OF syntax.
|
||||||
|
* @keepout: Optional array of keepout ranges (sorted ascending by start).
|
||||||
|
* @nkeepout: Number of elements in the keepout array.
|
||||||
|
* @type: Type of the nvmem storage
|
||||||
|
@@ -112,6 +113,7 @@ struct nvmem_config {
|
||||||
|
struct module *owner;
|
||||||
|
const struct nvmem_cell_info *cells;
|
||||||
|
int ncells;
|
||||||
|
+ bool add_legacy_fixed_of_cells;
|
||||||
|
const struct nvmem_keepout *keepout;
|
||||||
|
unsigned int nkeepout;
|
||||||
|
enum nvmem_type type;
|
@ -0,0 +1,77 @@
|
|||||||
|
From 0720219f4d34a88a9badb4de70cfad7585687d48 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Herring <robh@kernel.org>
|
||||||
|
Date: Fri, 20 Oct 2023 11:55:45 +0100
|
||||||
|
Subject: [PATCH] nvmem: Use device_get_match_data()
|
||||||
|
|
||||||
|
Use preferred device_get_match_data() instead of of_match_device() to
|
||||||
|
get the driver match data. With this, adjust the includes to explicitly
|
||||||
|
include the correct headers.
|
||||||
|
|
||||||
|
Signed-off-by: Rob Herring <robh@kernel.org>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231020105545.216052-7-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/mxs-ocotp.c | 10 ++++------
|
||||||
|
drivers/nvmem/stm32-romem.c | 7 ++++---
|
||||||
|
2 files changed, 8 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/mxs-ocotp.c
|
||||||
|
+++ b/drivers/nvmem/mxs-ocotp.c
|
||||||
|
@@ -13,8 +13,9 @@
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/nvmem-provider.h>
|
||||||
|
-#include <linux/of_device.h>
|
||||||
|
+#include <linux/of.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
+#include <linux/property.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/stmp_device.h>
|
||||||
|
|
||||||
|
@@ -140,11 +141,10 @@ static int mxs_ocotp_probe(struct platfo
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
const struct mxs_data *data;
|
||||||
|
struct mxs_ocotp *otp;
|
||||||
|
- const struct of_device_id *match;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
- match = of_match_device(dev->driver->of_match_table, dev);
|
||||||
|
- if (!match || !match->data)
|
||||||
|
+ data = device_get_match_data(dev);
|
||||||
|
+ if (!data)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
otp = devm_kzalloc(dev, sizeof(*otp), GFP_KERNEL);
|
||||||
|
@@ -169,8 +169,6 @@ static int mxs_ocotp_probe(struct platfo
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- data = match->data;
|
||||||
|
-
|
||||||
|
ocotp_config.size = data->size;
|
||||||
|
ocotp_config.priv = otp;
|
||||||
|
ocotp_config.dev = dev;
|
||||||
|
--- a/drivers/nvmem/stm32-romem.c
|
||||||
|
+++ b/drivers/nvmem/stm32-romem.c
|
||||||
|
@@ -10,7 +10,9 @@
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/nvmem-provider.h>
|
||||||
|
-#include <linux/of_device.h>
|
||||||
|
+#include <linux/of.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+#include <linux/property.h>
|
||||||
|
#include <linux/tee_drv.h>
|
||||||
|
|
||||||
|
#include "stm32-bsec-optee-ta.h"
|
||||||
|
@@ -211,8 +213,7 @@ static int stm32_romem_probe(struct plat
|
||||||
|
|
||||||
|
priv->lower = 0;
|
||||||
|
|
||||||
|
- cfg = (const struct stm32_romem_cfg *)
|
||||||
|
- of_match_device(dev->driver->of_match_table, dev)->data;
|
||||||
|
+ cfg = device_get_match_data(dev);
|
||||||
|
if (!cfg) {
|
||||||
|
priv->cfg.read_only = true;
|
||||||
|
priv->cfg.size = resource_size(res);
|
@ -0,0 +1,77 @@
|
|||||||
|
From f4cf4e5db331a5ce69e3f0b21d322cac0f4e4b5d Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Mon, 23 Oct 2023 12:27:59 +0200
|
||||||
|
Subject: [PATCH] Revert "nvmem: add new config option"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This reverts commit 517f14d9cf3533d5ab4fded195ab6f80a92e378f.
|
||||||
|
|
||||||
|
Config option "no_of_node" is no longer needed since adding a more
|
||||||
|
explicit and targeted option "add_legacy_fixed_of_cells".
|
||||||
|
|
||||||
|
That "no_of_node" config option was needed *earlier* to help mtd's case.
|
||||||
|
|
||||||
|
DT nodes of MTD partitions (that are also NVMEM devices) may contain
|
||||||
|
subnodes. Those SHOULD NOT be treated as NVMEM fixed cells.
|
||||||
|
|
||||||
|
To prevent NVMEM core code from parsing subnodes a "no_of_node" option
|
||||||
|
was added (and set to true in mtd) to make for_each_child_of_node() in
|
||||||
|
NVMEM a no-op. That was a bit hacky because it was messing with
|
||||||
|
"of_node" pointer to achieve some side-effect.
|
||||||
|
|
||||||
|
With the introduction of "add_legacy_fixed_of_cells" config option
|
||||||
|
things got more explicit. MTD subsystem simply tells NVMEM when to look
|
||||||
|
for fixed cells and there is no need to hack "of_node" pointer anymore.
|
||||||
|
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20231023102759.31529-1-zajec5@gmail.com
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 1 -
|
||||||
|
drivers/nvmem/core.c | 2 +-
|
||||||
|
include/linux/nvmem-provider.h | 2 --
|
||||||
|
3 files changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -531,7 +531,6 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
config.read_only = true;
|
||||||
|
config.root_only = true;
|
||||||
|
config.ignore_wp = true;
|
||||||
|
- config.no_of_node = !of_device_is_compatible(node, "nvmem-cells");
|
||||||
|
config.priv = mtd;
|
||||||
|
|
||||||
|
mtd->nvmem = nvmem_register(&config);
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -936,7 +936,7 @@ struct nvmem_device *nvmem_register(cons
|
||||||
|
nvmem->nkeepout = config->nkeepout;
|
||||||
|
if (config->of_node)
|
||||||
|
nvmem->dev.of_node = config->of_node;
|
||||||
|
- else if (!config->no_of_node)
|
||||||
|
+ else
|
||||||
|
nvmem->dev.of_node = config->dev->of_node;
|
||||||
|
|
||||||
|
switch (config->id) {
|
||||||
|
--- a/include/linux/nvmem-provider.h
|
||||||
|
+++ b/include/linux/nvmem-provider.h
|
||||||
|
@@ -89,7 +89,6 @@ struct nvmem_cell_info {
|
||||||
|
* @read_only: Device is read-only.
|
||||||
|
* @root_only: Device is accessibly to root only.
|
||||||
|
* @of_node: If given, this will be used instead of the parent's of_node.
|
||||||
|
- * @no_of_node: Device should not use the parent's of_node even if it's !NULL.
|
||||||
|
* @reg_read: Callback to read data.
|
||||||
|
* @reg_write: Callback to write data.
|
||||||
|
* @size: Device size.
|
||||||
|
@@ -122,7 +121,6 @@ struct nvmem_config {
|
||||||
|
bool ignore_wp;
|
||||||
|
struct nvmem_layout *layout;
|
||||||
|
struct device_node *of_node;
|
||||||
|
- bool no_of_node;
|
||||||
|
nvmem_reg_read_t reg_read;
|
||||||
|
nvmem_reg_write_t reg_write;
|
||||||
|
int size;
|
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
|
|
||||||
@@ -1082,6 +1083,8 @@ int mtd_device_parse_register(struct mtd
|
@@ -1083,6 +1084,8 @@ int mtd_device_parse_register(struct mtd
|
||||||
register_reboot_notifier(&mtd->reboot_notifier);
|
register_reboot_notifier(&mtd->reboot_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
|
|
||||||
@@ -1074,6 +1075,8 @@ int mtd_device_parse_register(struct mtd
|
@@ -1075,6 +1076,8 @@ int mtd_device_parse_register(struct mtd
|
||||||
register_reboot_notifier(&mtd->reboot_notifier);
|
register_reboot_notifier(&mtd->reboot_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user