9ce78e1f09d336ea3a18ff354556d3a02d51f938
[openwrt/openwrt.git] /
1 From 2cc3b37f5b6df8189d55d0e812d9658ce256dfec Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
3 Date: Fri, 20 Oct 2023 11:55:41 +0100
4 Subject: [PATCH] nvmem: add explicit config option to read old syntax fixed OF
5 cells
6 MIME-Version: 1.0
7 Content-Type: text/plain; charset=UTF-8
8 Content-Transfer-Encoding: 8bit
9
10 Binding for fixed NVMEM cells defined directly as NVMEM device subnodes
11 has been deprecated. It has been replaced by the "fixed-layout" NVMEM
12 layout binding.
13
14 New syntax is meant to be clearer and should help avoiding imprecise
15 bindings.
16
17 NVMEM subsystem already supports the new binding. It should be a good
18 idea to limit support for old syntax to existing drivers that actually
19 support & use it (we can't break backward compatibility!). That way we
20 additionally encourage new bindings & drivers to ignore deprecated
21 binding.
22
23 It wasn't clear (to me) if rtc and w1 code actually uses old syntax
24 fixed cells. I enabled them to don't risk any breakage.
25
26 Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
27 [for meson-{efuse,mx-efuse}.c]
28 Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
29 [for mtk-efuse.c, nvmem/core.c, nvmem-provider.h]
30 Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
31 [MT8192, MT8195 Chromebooks]
32 Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
33 [for microchip-otpc.c]
34 Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
35 [SAMA7G5-EK]
36 Tested-by: Claudiu Beznea <claudiu.beznea@microchip.com>
37 Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
38 Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
39 Link: https://lore.kernel.org/r/20231020105545.216052-3-srinivas.kandagatla@linaro.org
40 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
41 ---
42 drivers/mtd/mtdcore.c | 2 ++
43 drivers/nvmem/apple-efuses.c | 1 +
44 drivers/nvmem/core.c | 8 +++++---
45 drivers/nvmem/imx-ocotp-scu.c | 1 +
46 drivers/nvmem/imx-ocotp.c | 1 +
47 drivers/nvmem/meson-efuse.c | 1 +
48 drivers/nvmem/meson-mx-efuse.c | 1 +
49 drivers/nvmem/microchip-otpc.c | 1 +
50 drivers/nvmem/mtk-efuse.c | 1 +
51 drivers/nvmem/qcom-spmi-sdam.c | 1 +
52 drivers/nvmem/qfprom.c | 1 +
53 drivers/nvmem/rave-sp-eeprom.c | 1 +
54 drivers/nvmem/rockchip-efuse.c | 1 +
55 drivers/nvmem/sc27xx-efuse.c | 1 +
56 drivers/nvmem/sec-qfprom.c | 1 +
57 drivers/nvmem/sprd-efuse.c | 1 +
58 drivers/nvmem/stm32-romem.c | 1 +
59 drivers/nvmem/sunplus-ocotp.c | 1 +
60 drivers/nvmem/sunxi_sid.c | 1 +
61 drivers/nvmem/uniphier-efuse.c | 1 +
62 drivers/nvmem/zynqmp_nvmem.c | 1 +
63 drivers/rtc/nvmem.c | 1 +
64 drivers/w1/slaves/w1_ds250x.c | 1 +
65 include/linux/nvmem-provider.h | 2 ++
66 24 files changed, 30 insertions(+), 3 deletions(-)
67
68 --- a/drivers/mtd/mtdcore.c
69 +++ b/drivers/mtd/mtdcore.c
70 @@ -541,6 +541,7 @@ static int mtd_nvmem_add(struct mtd_info
71 config.dev = &mtd->dev;
72 config.name = dev_name(&mtd->dev);
73 config.owner = THIS_MODULE;
74 + config.add_legacy_fixed_of_cells = of_device_is_compatible(node, "nvmem-cells");
75 config.reg_read = mtd_nvmem_reg_read;
76 config.size = mtd->size;
77 config.word_size = 1;
78 @@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvme
79 config.name = compatible;
80 config.id = NVMEM_DEVID_AUTO;
81 config.owner = THIS_MODULE;
82 + config.add_legacy_fixed_of_cells = true;
83 config.type = NVMEM_TYPE_OTP;
84 config.root_only = true;
85 config.ignore_wp = true;
86 --- a/drivers/nvmem/apple-efuses.c
87 +++ b/drivers/nvmem/apple-efuses.c
88 @@ -36,6 +36,7 @@ static int apple_efuses_probe(struct pla
89 struct resource *res;
90 struct nvmem_config config = {
91 .dev = &pdev->dev,
92 + .add_legacy_fixed_of_cells = true,
93 .read_only = true,
94 .reg_read = apple_efuses_read,
95 .stride = sizeof(u32),
96 --- a/drivers/nvmem/core.c
97 +++ b/drivers/nvmem/core.c
98 @@ -998,9 +998,11 @@ struct nvmem_device *nvmem_register(cons
99 if (rval)
100 goto err_remove_cells;
101
102 - rval = nvmem_add_cells_from_legacy_of(nvmem);
103 - if (rval)
104 - goto err_remove_cells;
105 + if (config->add_legacy_fixed_of_cells) {
106 + rval = nvmem_add_cells_from_legacy_of(nvmem);
107 + if (rval)
108 + goto err_remove_cells;
109 + }
110
111 rval = nvmem_add_cells_from_fixed_layout(nvmem);
112 if (rval)
113 --- a/drivers/nvmem/imx-ocotp-scu.c
114 +++ b/drivers/nvmem/imx-ocotp-scu.c
115 @@ -220,6 +220,7 @@ static int imx_scu_ocotp_write(void *con
116
117 static struct nvmem_config imx_scu_ocotp_nvmem_config = {
118 .name = "imx-scu-ocotp",
119 + .add_legacy_fixed_of_cells = true,
120 .read_only = false,
121 .word_size = 4,
122 .stride = 1,
123 --- a/drivers/nvmem/imx-ocotp.c
124 +++ b/drivers/nvmem/imx-ocotp.c
125 @@ -616,6 +616,7 @@ static int imx_ocotp_probe(struct platfo
126 return PTR_ERR(priv->clk);
127
128 priv->params = of_device_get_match_data(&pdev->dev);
129 + imx_ocotp_nvmem_config.add_legacy_fixed_of_cells = true;
130 imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
131 imx_ocotp_nvmem_config.dev = dev;
132 imx_ocotp_nvmem_config.priv = priv;
133 --- a/drivers/nvmem/meson-efuse.c
134 +++ b/drivers/nvmem/meson-efuse.c
135 @@ -74,6 +74,7 @@ static int meson_efuse_probe(struct plat
136
137 econfig->dev = dev;
138 econfig->name = dev_name(dev);
139 + econfig->add_legacy_fixed_of_cells = true;
140 econfig->stride = 1;
141 econfig->word_size = 1;
142 econfig->reg_read = meson_efuse_read;
143 --- a/drivers/nvmem/meson-mx-efuse.c
144 +++ b/drivers/nvmem/meson-mx-efuse.c
145 @@ -211,6 +211,7 @@ static int meson_mx_efuse_probe(struct p
146 efuse->config.owner = THIS_MODULE;
147 efuse->config.dev = &pdev->dev;
148 efuse->config.priv = efuse;
149 + efuse->config.add_legacy_fixed_of_cells = true;
150 efuse->config.stride = drvdata->word_size;
151 efuse->config.word_size = drvdata->word_size;
152 efuse->config.size = SZ_512;
153 --- a/drivers/nvmem/microchip-otpc.c
154 +++ b/drivers/nvmem/microchip-otpc.c
155 @@ -261,6 +261,7 @@ static int mchp_otpc_probe(struct platfo
156 return ret;
157
158 mchp_nvmem_config.dev = otpc->dev;
159 + mchp_nvmem_config.add_legacy_fixed_of_cells = true;
160 mchp_nvmem_config.size = size;
161 mchp_nvmem_config.priv = otpc;
162 nvmem = devm_nvmem_register(&pdev->dev, &mchp_nvmem_config);
163 --- a/drivers/nvmem/mtk-efuse.c
164 +++ b/drivers/nvmem/mtk-efuse.c
165 @@ -83,6 +83,7 @@ static int mtk_efuse_probe(struct platfo
166 return PTR_ERR(priv->base);
167
168 pdata = device_get_match_data(dev);
169 + econfig.add_legacy_fixed_of_cells = true;
170 econfig.stride = 1;
171 econfig.word_size = 1;
172 econfig.reg_read = mtk_reg_read;
173 --- a/drivers/nvmem/qcom-spmi-sdam.c
174 +++ b/drivers/nvmem/qcom-spmi-sdam.c
175 @@ -142,6 +142,7 @@ static int sdam_probe(struct platform_de
176 sdam->sdam_config.name = "spmi_sdam";
177 sdam->sdam_config.id = NVMEM_DEVID_AUTO;
178 sdam->sdam_config.owner = THIS_MODULE;
179 + sdam->sdam_config.add_legacy_fixed_of_cells = true;
180 sdam->sdam_config.stride = 1;
181 sdam->sdam_config.word_size = 1;
182 sdam->sdam_config.reg_read = sdam_read;
183 --- a/drivers/nvmem/qfprom.c
184 +++ b/drivers/nvmem/qfprom.c
185 @@ -357,6 +357,7 @@ static int qfprom_probe(struct platform_
186 {
187 struct nvmem_config econfig = {
188 .name = "qfprom",
189 + .add_legacy_fixed_of_cells = true,
190 .stride = 1,
191 .word_size = 1,
192 .id = NVMEM_DEVID_AUTO,
193 --- a/drivers/nvmem/rave-sp-eeprom.c
194 +++ b/drivers/nvmem/rave-sp-eeprom.c
195 @@ -328,6 +328,7 @@ static int rave_sp_eeprom_probe(struct p
196 of_property_read_string(np, "zii,eeprom-name", &config.name);
197 config.priv = eeprom;
198 config.dev = dev;
199 + config.add_legacy_fixed_of_cells = true;
200 config.size = size;
201 config.reg_read = rave_sp_eeprom_reg_read;
202 config.reg_write = rave_sp_eeprom_reg_write;
203 --- a/drivers/nvmem/rockchip-efuse.c
204 +++ b/drivers/nvmem/rockchip-efuse.c
205 @@ -205,6 +205,7 @@ static int rockchip_rk3399_efuse_read(vo
206
207 static struct nvmem_config econfig = {
208 .name = "rockchip-efuse",
209 + .add_legacy_fixed_of_cells = true,
210 .stride = 1,
211 .word_size = 1,
212 .read_only = true,
213 --- a/drivers/nvmem/sc27xx-efuse.c
214 +++ b/drivers/nvmem/sc27xx-efuse.c
215 @@ -248,6 +248,7 @@ static int sc27xx_efuse_probe(struct pla
216 econfig.reg_read = sc27xx_efuse_read;
217 econfig.priv = efuse;
218 econfig.dev = &pdev->dev;
219 + econfig.add_legacy_fixed_of_cells = true;
220 nvmem = devm_nvmem_register(&pdev->dev, &econfig);
221 if (IS_ERR(nvmem)) {
222 dev_err(&pdev->dev, "failed to register nvmem config\n");
223 --- a/drivers/nvmem/sec-qfprom.c
224 +++ b/drivers/nvmem/sec-qfprom.c
225 @@ -47,6 +47,7 @@ static int sec_qfprom_probe(struct platf
226 {
227 struct nvmem_config econfig = {
228 .name = "sec-qfprom",
229 + .add_legacy_fixed_of_cells = true,
230 .stride = 1,
231 .word_size = 1,
232 .id = NVMEM_DEVID_AUTO,
233 --- a/drivers/nvmem/sprd-efuse.c
234 +++ b/drivers/nvmem/sprd-efuse.c
235 @@ -408,6 +408,7 @@ static int sprd_efuse_probe(struct platf
236 econfig.read_only = false;
237 econfig.name = "sprd-efuse";
238 econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
239 + econfig.add_legacy_fixed_of_cells = true;
240 econfig.reg_read = sprd_efuse_read;
241 econfig.reg_write = sprd_efuse_write;
242 econfig.priv = efuse;
243 --- a/drivers/nvmem/stm32-romem.c
244 +++ b/drivers/nvmem/stm32-romem.c
245 @@ -207,6 +207,7 @@ static int stm32_romem_probe(struct plat
246 priv->cfg.priv = priv;
247 priv->cfg.owner = THIS_MODULE;
248 priv->cfg.type = NVMEM_TYPE_OTP;
249 + priv->cfg.add_legacy_fixed_of_cells = true;
250
251 priv->lower = 0;
252
253 --- a/drivers/nvmem/sunplus-ocotp.c
254 +++ b/drivers/nvmem/sunplus-ocotp.c
255 @@ -145,6 +145,7 @@ disable_clk:
256
257 static struct nvmem_config sp_ocotp_nvmem_config = {
258 .name = "sp-ocotp",
259 + .add_legacy_fixed_of_cells = true,
260 .read_only = true,
261 .word_size = 1,
262 .size = QAC628_OTP_SIZE,
263 --- a/drivers/nvmem/sunxi_sid.c
264 +++ b/drivers/nvmem/sunxi_sid.c
265 @@ -154,6 +154,7 @@ static int sunxi_sid_probe(struct platfo
266 nvmem_cfg->dev = dev;
267 nvmem_cfg->name = "sunxi-sid";
268 nvmem_cfg->type = NVMEM_TYPE_OTP;
269 + nvmem_cfg->add_legacy_fixed_of_cells = true;
270 nvmem_cfg->read_only = true;
271 nvmem_cfg->size = cfg->size;
272 nvmem_cfg->word_size = 1;
273 --- a/drivers/nvmem/uniphier-efuse.c
274 +++ b/drivers/nvmem/uniphier-efuse.c
275 @@ -52,6 +52,7 @@ static int uniphier_efuse_probe(struct p
276 econfig.size = resource_size(res);
277 econfig.priv = priv;
278 econfig.dev = dev;
279 + econfig.add_legacy_fixed_of_cells = true;
280 nvmem = devm_nvmem_register(dev, &econfig);
281
282 return PTR_ERR_OR_ZERO(nvmem);
283 --- a/drivers/nvmem/zynqmp_nvmem.c
284 +++ b/drivers/nvmem/zynqmp_nvmem.c
285 @@ -58,6 +58,7 @@ static int zynqmp_nvmem_probe(struct pla
286
287 priv->dev = dev;
288 econfig.dev = dev;
289 + econfig.add_legacy_fixed_of_cells = true;
290 econfig.reg_read = zynqmp_nvmem_read;
291 econfig.priv = priv;
292
293 --- a/drivers/rtc/nvmem.c
294 +++ b/drivers/rtc/nvmem.c
295 @@ -21,6 +21,7 @@ int devm_rtc_nvmem_register(struct rtc_d
296
297 nvmem_config->dev = dev;
298 nvmem_config->owner = rtc->owner;
299 + nvmem_config->add_legacy_fixed_of_cells = true;
300 nvmem = devm_nvmem_register(dev, nvmem_config);
301 if (IS_ERR(nvmem))
302 dev_err(dev, "failed to register nvmem device for RTC\n");
303 --- a/drivers/w1/slaves/w1_ds250x.c
304 +++ b/drivers/w1/slaves/w1_ds250x.c
305 @@ -168,6 +168,7 @@ static int w1_eprom_add_slave(struct w1_
306 struct nvmem_device *nvmem;
307 struct nvmem_config nvmem_cfg = {
308 .dev = &sl->dev,
309 + .add_legacy_fixed_of_cells = true,
310 .reg_read = w1_nvmem_read,
311 .type = NVMEM_TYPE_OTP,
312 .read_only = true,
313 --- a/include/linux/nvmem-provider.h
314 +++ b/include/linux/nvmem-provider.h
315 @@ -82,6 +82,7 @@ struct nvmem_cell_info {
316 * @owner: Pointer to exporter module. Used for refcounting.
317 * @cells: Optional array of pre-defined NVMEM cells.
318 * @ncells: Number of elements in cells.
319 + * @add_legacy_fixed_of_cells: Read fixed NVMEM cells from old OF syntax.
320 * @keepout: Optional array of keepout ranges (sorted ascending by start).
321 * @nkeepout: Number of elements in the keepout array.
322 * @type: Type of the nvmem storage
323 @@ -112,6 +113,7 @@ struct nvmem_config {
324 struct module *owner;
325 const struct nvmem_cell_info *cells;
326 int ncells;
327 + bool add_legacy_fixed_of_cells;
328 const struct nvmem_keepout *keepout;
329 unsigned int nkeepout;
330 enum nvmem_type type;