Skip to content

Commit

Permalink
nvmem: add explicit config option to read old syntax fixed OF cells
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Rafał Miłecki authored and Greg Kroah-Hartman committed Oct 21, 2023
1 parent 16724d6 commit 2cc3b37
Show file tree
Hide file tree
Showing 24 changed files with 30 additions and 3 deletions.
2 changes: 2 additions & 0 deletions drivers/mtd/mtdcore.c
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd)
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;
Expand Down Expand Up @@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/apple-efuses.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ static int apple_efuses_probe(struct platform_device *pdev)
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),
Expand Down
8 changes: 5 additions & 3 deletions drivers/nvmem/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -997,9 +997,11 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
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)
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/imx-ocotp-scu.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ static int imx_scu_ocotp_write(void *context, unsigned int offset,

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,
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/imx-ocotp.c
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@ static int imx_ocotp_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/meson-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ static int meson_efuse_probe(struct platform_device *pdev)

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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/meson-mx-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ static int meson_mx_efuse_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/microchip-otpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ static int mchp_otpc_probe(struct platform_device *pdev)
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);
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/mtk-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ static int mtk_efuse_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/qcom-spmi-sdam.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ static int sdam_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/qfprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,7 @@ static int qfprom_probe(struct platform_device *pdev)
{
struct nvmem_config econfig = {
.name = "qfprom",
.add_legacy_fixed_of_cells = true,
.stride = 1,
.word_size = 1,
.id = NVMEM_DEVID_AUTO,
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/rave-sp-eeprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ static int rave_sp_eeprom_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/rockchip-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ static int rockchip_rk3399_efuse_read(void *context, unsigned int offset,

static struct nvmem_config econfig = {
.name = "rockchip-efuse",
.add_legacy_fixed_of_cells = true,
.stride = 1,
.word_size = 1,
.read_only = true,
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/sc27xx-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,7 @@ static int sc27xx_efuse_probe(struct platform_device *pdev)
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");
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/sec-qfprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ static int sec_qfprom_probe(struct platform_device *pdev)
{
struct nvmem_config econfig = {
.name = "sec-qfprom",
.add_legacy_fixed_of_cells = true,
.stride = 1,
.word_size = 1,
.id = NVMEM_DEVID_AUTO,
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/sprd-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,7 @@ static int sprd_efuse_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/stm32-romem.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ static int stm32_romem_probe(struct platform_device *pdev)
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;

Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/sunplus-ocotp.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ static int sp_ocotp_read(void *priv, unsigned int offset, void *value, size_t by

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,
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/sunxi_sid.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ static int sunxi_sid_probe(struct platform_device *pdev)
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;
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/uniphier-efuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ static int uniphier_efuse_probe(struct platform_device *pdev)
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);
Expand Down
1 change: 1 addition & 0 deletions drivers/nvmem/zynqmp_nvmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ static int zynqmp_nvmem_probe(struct platform_device *pdev)

priv->dev = dev;
econfig.dev = dev;
econfig.add_legacy_fixed_of_cells = true;
econfig.reg_read = zynqmp_nvmem_read;
econfig.priv = priv;

Expand Down
1 change: 1 addition & 0 deletions drivers/rtc/nvmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ int devm_rtc_nvmem_register(struct rtc_device *rtc,

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");
Expand Down
1 change: 1 addition & 0 deletions drivers/w1/slaves/w1_ds250x.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ static int w1_eprom_add_slave(struct w1_slave *sl)
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,
Expand Down
2 changes: 2 additions & 0 deletions include/linux/nvmem-provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 2cc3b37

Please sign in to comment.