]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - queue-6.6/nvmem-add-explicit-config-option-to-read-old-syntax-.patch
Fixes for 6.6
[thirdparty/kernel/stable-queue.git] / queue-6.6 / nvmem-add-explicit-config-option-to-read-old-syntax-.patch
CommitLineData
7519b981
SL
1From b8f5e8cbf65b50f337ca6e496dfa1321eed5cd97 Mon Sep 17 00:00:00 2001
2From: Sasha Levin <sashal@kernel.org>
3Date: Fri, 20 Oct 2023 11:55:41 +0100
4Subject: nvmem: add explicit config option to read old syntax fixed OF cells
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9From: Rafał Miłecki <rafal@milecki.pl>
10
11[ Upstream commit 2cc3b37f5b6df8189d55d0e812d9658ce256dfec ]
12
13Binding for fixed NVMEM cells defined directly as NVMEM device subnodes
14has been deprecated. It has been replaced by the "fixed-layout" NVMEM
15layout binding.
16
17New syntax is meant to be clearer and should help avoiding imprecise
18bindings.
19
20NVMEM subsystem already supports the new binding. It should be a good
21idea to limit support for old syntax to existing drivers that actually
22support & use it (we can't break backward compatibility!). That way we
23additionally encourage new bindings & drivers to ignore deprecated
24binding.
25
26It wasn't clear (to me) if rtc and w1 code actually uses old syntax
27fixed cells. I enabled them to don't risk any breakage.
28
29Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
30[for meson-{efuse,mx-efuse}.c]
31Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
32[for mtk-efuse.c, nvmem/core.c, nvmem-provider.h]
33Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
34[MT8192, MT8195 Chromebooks]
35Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
36[for microchip-otpc.c]
37Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
38[SAMA7G5-EK]
39Tested-by: Claudiu Beznea <claudiu.beznea@microchip.com>
40Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
41Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
42Link: https://lore.kernel.org/r/20231020105545.216052-3-srinivas.kandagatla@linaro.org
43Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
44Stable-dep-of: d2d73a6dd173 ("mtd: limit OTP NVMEM cell parse to non-NAND devices")
45Signed-off-by: Sasha Levin <sashal@kernel.org>
46---
47 drivers/mtd/mtdcore.c | 2 ++
48 drivers/nvmem/apple-efuses.c | 1 +
49 drivers/nvmem/core.c | 8 +++++---
50 drivers/nvmem/imx-ocotp-scu.c | 1 +
51 drivers/nvmem/imx-ocotp.c | 1 +
52 drivers/nvmem/meson-efuse.c | 1 +
53 drivers/nvmem/meson-mx-efuse.c | 1 +
54 drivers/nvmem/microchip-otpc.c | 1 +
55 drivers/nvmem/mtk-efuse.c | 1 +
56 drivers/nvmem/qcom-spmi-sdam.c | 1 +
57 drivers/nvmem/qfprom.c | 1 +
58 drivers/nvmem/rave-sp-eeprom.c | 1 +
59 drivers/nvmem/rockchip-efuse.c | 1 +
60 drivers/nvmem/sc27xx-efuse.c | 1 +
61 drivers/nvmem/sec-qfprom.c | 1 +
62 drivers/nvmem/sprd-efuse.c | 1 +
63 drivers/nvmem/stm32-romem.c | 1 +
64 drivers/nvmem/sunplus-ocotp.c | 1 +
65 drivers/nvmem/sunxi_sid.c | 1 +
66 drivers/nvmem/uniphier-efuse.c | 1 +
67 drivers/nvmem/zynqmp_nvmem.c | 1 +
68 drivers/rtc/nvmem.c | 1 +
69 drivers/w1/slaves/w1_ds250x.c | 1 +
70 include/linux/nvmem-provider.h | 2 ++
71 24 files changed, 30 insertions(+), 3 deletions(-)
72
73diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
74index 9bd661be3ae93..fbf60d1364f0d 100644
75--- a/drivers/mtd/mtdcore.c
76+++ b/drivers/mtd/mtdcore.c
77@@ -552,6 +552,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd)
78 config.dev = &mtd->dev;
79 config.name = dev_name(&mtd->dev);
80 config.owner = THIS_MODULE;
81+ config.add_legacy_fixed_of_cells = of_device_is_compatible(node, "nvmem-cells");
82 config.reg_read = mtd_nvmem_reg_read;
83 config.size = mtd->size;
84 config.word_size = 1;
85@@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
86 config.name = compatible;
87 config.id = NVMEM_DEVID_AUTO;
88 config.owner = THIS_MODULE;
89+ config.add_legacy_fixed_of_cells = true;
90 config.type = NVMEM_TYPE_OTP;
91 config.root_only = true;
92 config.ignore_wp = true;
93diff --git a/drivers/nvmem/apple-efuses.c b/drivers/nvmem/apple-efuses.c
94index 9b7c871021043..d3d49d22338b3 100644
95--- a/drivers/nvmem/apple-efuses.c
96+++ b/drivers/nvmem/apple-efuses.c
97@@ -36,6 +36,7 @@ static int apple_efuses_probe(struct platform_device *pdev)
98 struct resource *res;
99 struct nvmem_config config = {
100 .dev = &pdev->dev,
101+ .add_legacy_fixed_of_cells = true,
102 .read_only = true,
103 .reg_read = apple_efuses_read,
104 .stride = sizeof(u32),
105diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
106index 5b3955ad40534..e26f79a132bb5 100644
107--- a/drivers/nvmem/core.c
108+++ b/drivers/nvmem/core.c
109@@ -1003,9 +1003,11 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
110 if (rval)
111 goto err_remove_cells;
112
113- rval = nvmem_add_cells_from_legacy_of(nvmem);
114- if (rval)
115- goto err_remove_cells;
116+ if (config->add_legacy_fixed_of_cells) {
117+ rval = nvmem_add_cells_from_legacy_of(nvmem);
118+ if (rval)
119+ goto err_remove_cells;
120+ }
121
122 rval = nvmem_add_cells_from_fixed_layout(nvmem);
123 if (rval)
124diff --git a/drivers/nvmem/imx-ocotp-scu.c b/drivers/nvmem/imx-ocotp-scu.c
125index c38d9c1c3f486..517d83e11af2c 100644
126--- a/drivers/nvmem/imx-ocotp-scu.c
127+++ b/drivers/nvmem/imx-ocotp-scu.c
128@@ -220,6 +220,7 @@ static int imx_scu_ocotp_write(void *context, unsigned int offset,
129
130 static struct nvmem_config imx_scu_ocotp_nvmem_config = {
131 .name = "imx-scu-ocotp",
132+ .add_legacy_fixed_of_cells = true,
133 .read_only = false,
134 .word_size = 4,
135 .stride = 1,
136diff --git a/drivers/nvmem/imx-ocotp.c b/drivers/nvmem/imx-ocotp.c
137index e8b6f194925df..f1e202efaa497 100644
138--- a/drivers/nvmem/imx-ocotp.c
139+++ b/drivers/nvmem/imx-ocotp.c
140@@ -615,6 +615,7 @@ static int imx_ocotp_probe(struct platform_device *pdev)
141 return PTR_ERR(priv->clk);
142
143 priv->params = of_device_get_match_data(&pdev->dev);
144+ imx_ocotp_nvmem_config.add_legacy_fixed_of_cells = true;
145 imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
146 imx_ocotp_nvmem_config.dev = dev;
147 imx_ocotp_nvmem_config.priv = priv;
148diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
149index ba2714bef8d0e..33678d0af2c24 100644
150--- a/drivers/nvmem/meson-efuse.c
151+++ b/drivers/nvmem/meson-efuse.c
152@@ -74,6 +74,7 @@ static int meson_efuse_probe(struct platform_device *pdev)
153
154 econfig->dev = dev;
155 econfig->name = dev_name(dev);
156+ econfig->add_legacy_fixed_of_cells = true;
157 econfig->stride = 1;
158 econfig->word_size = 1;
159 econfig->reg_read = meson_efuse_read;
160diff --git a/drivers/nvmem/meson-mx-efuse.c b/drivers/nvmem/meson-mx-efuse.c
161index d6d7aeda31f92..3ff04d5ca8f85 100644
162--- a/drivers/nvmem/meson-mx-efuse.c
163+++ b/drivers/nvmem/meson-mx-efuse.c
164@@ -210,6 +210,7 @@ static int meson_mx_efuse_probe(struct platform_device *pdev)
165 efuse->config.owner = THIS_MODULE;
166 efuse->config.dev = &pdev->dev;
167 efuse->config.priv = efuse;
168+ efuse->config.add_legacy_fixed_of_cells = true;
169 efuse->config.stride = drvdata->word_size;
170 efuse->config.word_size = drvdata->word_size;
171 efuse->config.size = SZ_512;
172diff --git a/drivers/nvmem/microchip-otpc.c b/drivers/nvmem/microchip-otpc.c
173index 436e0dc4f3375..7cf81738a3e0a 100644
174--- a/drivers/nvmem/microchip-otpc.c
175+++ b/drivers/nvmem/microchip-otpc.c
176@@ -261,6 +261,7 @@ static int mchp_otpc_probe(struct platform_device *pdev)
177 return ret;
178
179 mchp_nvmem_config.dev = otpc->dev;
180+ mchp_nvmem_config.add_legacy_fixed_of_cells = true;
181 mchp_nvmem_config.size = size;
182 mchp_nvmem_config.priv = otpc;
183 nvmem = devm_nvmem_register(&pdev->dev, &mchp_nvmem_config);
184diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
185index b36cd0dcc8c7f..87c94686cfd21 100644
186--- a/drivers/nvmem/mtk-efuse.c
187+++ b/drivers/nvmem/mtk-efuse.c
188@@ -83,6 +83,7 @@ static int mtk_efuse_probe(struct platform_device *pdev)
189 return PTR_ERR(priv->base);
190
191 pdata = device_get_match_data(dev);
192+ econfig.add_legacy_fixed_of_cells = true;
193 econfig.stride = 1;
194 econfig.word_size = 1;
195 econfig.reg_read = mtk_reg_read;
196diff --git a/drivers/nvmem/qcom-spmi-sdam.c b/drivers/nvmem/qcom-spmi-sdam.c
197index 70f2d4f2efbf1..9aa8f42faa4c9 100644
198--- a/drivers/nvmem/qcom-spmi-sdam.c
199+++ b/drivers/nvmem/qcom-spmi-sdam.c
200@@ -142,6 +142,7 @@ static int sdam_probe(struct platform_device *pdev)
201 sdam->sdam_config.name = "spmi_sdam";
202 sdam->sdam_config.id = NVMEM_DEVID_AUTO;
203 sdam->sdam_config.owner = THIS_MODULE;
204+ sdam->sdam_config.add_legacy_fixed_of_cells = true;
205 sdam->sdam_config.stride = 1;
206 sdam->sdam_config.word_size = 1;
207 sdam->sdam_config.reg_read = sdam_read;
208diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c
209index 14814cba2dd65..6c554040c6e67 100644
210--- a/drivers/nvmem/qfprom.c
211+++ b/drivers/nvmem/qfprom.c
212@@ -357,6 +357,7 @@ static int qfprom_probe(struct platform_device *pdev)
213 {
214 struct nvmem_config econfig = {
215 .name = "qfprom",
216+ .add_legacy_fixed_of_cells = true,
217 .stride = 1,
218 .word_size = 1,
219 .id = NVMEM_DEVID_AUTO,
220diff --git a/drivers/nvmem/rave-sp-eeprom.c b/drivers/nvmem/rave-sp-eeprom.c
221index df6a1c594b781..9ecf3873cbb76 100644
222--- a/drivers/nvmem/rave-sp-eeprom.c
223+++ b/drivers/nvmem/rave-sp-eeprom.c
224@@ -328,6 +328,7 @@ static int rave_sp_eeprom_probe(struct platform_device *pdev)
225 of_property_read_string(np, "zii,eeprom-name", &config.name);
226 config.priv = eeprom;
227 config.dev = dev;
228+ config.add_legacy_fixed_of_cells = true;
229 config.size = size;
230 config.reg_read = rave_sp_eeprom_reg_read;
231 config.reg_write = rave_sp_eeprom_reg_write;
232diff --git a/drivers/nvmem/rockchip-efuse.c b/drivers/nvmem/rockchip-efuse.c
233index 4004c5bece423..2b40978ddb18c 100644
234--- a/drivers/nvmem/rockchip-efuse.c
235+++ b/drivers/nvmem/rockchip-efuse.c
236@@ -205,6 +205,7 @@ static int rockchip_rk3399_efuse_read(void *context, unsigned int offset,
237
238 static struct nvmem_config econfig = {
239 .name = "rockchip-efuse",
240+ .add_legacy_fixed_of_cells = true,
241 .stride = 1,
242 .word_size = 1,
243 .read_only = true,
244diff --git a/drivers/nvmem/sc27xx-efuse.c b/drivers/nvmem/sc27xx-efuse.c
245index 2210da40dfbd7..bff27011f4ff2 100644
246--- a/drivers/nvmem/sc27xx-efuse.c
247+++ b/drivers/nvmem/sc27xx-efuse.c
248@@ -247,6 +247,7 @@ static int sc27xx_efuse_probe(struct platform_device *pdev)
249 econfig.reg_read = sc27xx_efuse_read;
250 econfig.priv = efuse;
251 econfig.dev = &pdev->dev;
252+ econfig.add_legacy_fixed_of_cells = true;
253 nvmem = devm_nvmem_register(&pdev->dev, &econfig);
254 if (IS_ERR(nvmem)) {
255 dev_err(&pdev->dev, "failed to register nvmem config\n");
256diff --git a/drivers/nvmem/sec-qfprom.c b/drivers/nvmem/sec-qfprom.c
257index e48c2dc0c44b3..19799b3fe00aa 100644
258--- a/drivers/nvmem/sec-qfprom.c
259+++ b/drivers/nvmem/sec-qfprom.c
260@@ -47,6 +47,7 @@ static int sec_qfprom_probe(struct platform_device *pdev)
261 {
262 struct nvmem_config econfig = {
263 .name = "sec-qfprom",
264+ .add_legacy_fixed_of_cells = true,
265 .stride = 1,
266 .word_size = 1,
267 .id = NVMEM_DEVID_AUTO,
268diff --git a/drivers/nvmem/sprd-efuse.c b/drivers/nvmem/sprd-efuse.c
269index 7e6e31db4baae..bb3105f3291fc 100644
270--- a/drivers/nvmem/sprd-efuse.c
271+++ b/drivers/nvmem/sprd-efuse.c
272@@ -408,6 +408,7 @@ static int sprd_efuse_probe(struct platform_device *pdev)
273 econfig.read_only = false;
274 econfig.name = "sprd-efuse";
275 econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
276+ econfig.add_legacy_fixed_of_cells = true;
277 econfig.reg_read = sprd_efuse_read;
278 econfig.reg_write = sprd_efuse_write;
279 econfig.priv = efuse;
280diff --git a/drivers/nvmem/stm32-romem.c b/drivers/nvmem/stm32-romem.c
281index 0f84044bd1ade..1541c20709d25 100644
282--- a/drivers/nvmem/stm32-romem.c
283+++ b/drivers/nvmem/stm32-romem.c
284@@ -207,6 +207,7 @@ static int stm32_romem_probe(struct platform_device *pdev)
285 priv->cfg.priv = priv;
286 priv->cfg.owner = THIS_MODULE;
287 priv->cfg.type = NVMEM_TYPE_OTP;
288+ priv->cfg.add_legacy_fixed_of_cells = true;
289
290 priv->lower = 0;
291
292diff --git a/drivers/nvmem/sunplus-ocotp.c b/drivers/nvmem/sunplus-ocotp.c
293index f3a18aa0a6c73..38f5d9df39cd5 100644
294--- a/drivers/nvmem/sunplus-ocotp.c
295+++ b/drivers/nvmem/sunplus-ocotp.c
296@@ -145,6 +145,7 @@ static int sp_ocotp_read(void *priv, unsigned int offset, void *value, size_t by
297
298 static struct nvmem_config sp_ocotp_nvmem_config = {
299 .name = "sp-ocotp",
300+ .add_legacy_fixed_of_cells = true,
301 .read_only = true,
302 .word_size = 1,
303 .size = QAC628_OTP_SIZE,
304diff --git a/drivers/nvmem/sunxi_sid.c b/drivers/nvmem/sunxi_sid.c
305index 5d364d85347fc..ba14a76208ab6 100644
306--- a/drivers/nvmem/sunxi_sid.c
307+++ b/drivers/nvmem/sunxi_sid.c
308@@ -153,6 +153,7 @@ static int sunxi_sid_probe(struct platform_device *pdev)
309 nvmem_cfg->dev = dev;
310 nvmem_cfg->name = "sunxi-sid";
311 nvmem_cfg->type = NVMEM_TYPE_OTP;
312+ nvmem_cfg->add_legacy_fixed_of_cells = true;
313 nvmem_cfg->read_only = true;
314 nvmem_cfg->size = cfg->size;
315 nvmem_cfg->word_size = 1;
316diff --git a/drivers/nvmem/uniphier-efuse.c b/drivers/nvmem/uniphier-efuse.c
317index 0a1dbb80537ec..6ad3295d31951 100644
318--- a/drivers/nvmem/uniphier-efuse.c
319+++ b/drivers/nvmem/uniphier-efuse.c
320@@ -52,6 +52,7 @@ static int uniphier_efuse_probe(struct platform_device *pdev)
321 econfig.size = resource_size(res);
322 econfig.priv = priv;
323 econfig.dev = dev;
324+ econfig.add_legacy_fixed_of_cells = true;
325 nvmem = devm_nvmem_register(dev, &econfig);
326
327 return PTR_ERR_OR_ZERO(nvmem);
328diff --git a/drivers/nvmem/zynqmp_nvmem.c b/drivers/nvmem/zynqmp_nvmem.c
329index f49bb9a26d053..7f15aa89a9d09 100644
330--- a/drivers/nvmem/zynqmp_nvmem.c
331+++ b/drivers/nvmem/zynqmp_nvmem.c
332@@ -58,6 +58,7 @@ static int zynqmp_nvmem_probe(struct platform_device *pdev)
333
334 priv->dev = dev;
335 econfig.dev = dev;
336+ econfig.add_legacy_fixed_of_cells = true;
337 econfig.reg_read = zynqmp_nvmem_read;
338 econfig.priv = priv;
339
340diff --git a/drivers/rtc/nvmem.c b/drivers/rtc/nvmem.c
341index 07ede21cee347..37df7e80525b4 100644
342--- a/drivers/rtc/nvmem.c
343+++ b/drivers/rtc/nvmem.c
344@@ -21,6 +21,7 @@ int devm_rtc_nvmem_register(struct rtc_device *rtc,
345
346 nvmem_config->dev = dev;
347 nvmem_config->owner = rtc->owner;
348+ nvmem_config->add_legacy_fixed_of_cells = true;
349 nvmem = devm_nvmem_register(dev, nvmem_config);
350 if (IS_ERR(nvmem))
351 dev_err(dev, "failed to register nvmem device for RTC\n");
352diff --git a/drivers/w1/slaves/w1_ds250x.c b/drivers/w1/slaves/w1_ds250x.c
353index 7592c7050d1d7..cb426f7dd23d4 100644
354--- a/drivers/w1/slaves/w1_ds250x.c
355+++ b/drivers/w1/slaves/w1_ds250x.c
356@@ -168,6 +168,7 @@ static int w1_eprom_add_slave(struct w1_slave *sl)
357 struct nvmem_device *nvmem;
358 struct nvmem_config nvmem_cfg = {
359 .dev = &sl->dev,
360+ .add_legacy_fixed_of_cells = true,
361 .reg_read = w1_nvmem_read,
362 .type = NVMEM_TYPE_OTP,
363 .read_only = true,
364diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
365index dae26295e6bed..1b81adebdb8be 100644
366--- a/include/linux/nvmem-provider.h
367+++ b/include/linux/nvmem-provider.h
368@@ -82,6 +82,7 @@ struct nvmem_cell_info {
369 * @owner: Pointer to exporter module. Used for refcounting.
370 * @cells: Optional array of pre-defined NVMEM cells.
371 * @ncells: Number of elements in cells.
372+ * @add_legacy_fixed_of_cells: Read fixed NVMEM cells from old OF syntax.
373 * @keepout: Optional array of keepout ranges (sorted ascending by start).
374 * @nkeepout: Number of elements in the keepout array.
375 * @type: Type of the nvmem storage
376@@ -112,6 +113,7 @@ struct nvmem_config {
377 struct module *owner;
378 const struct nvmem_cell_info *cells;
379 int ncells;
380+ bool add_legacy_fixed_of_cells;
381 const struct nvmem_keepout *keepout;
382 unsigned int nkeepout;
383 enum nvmem_type type;
384--
3852.43.0
386