mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
nvmem: add explicit config option to read old syntax fixed OF cells
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>
This commit is contained in:
parent
16724d6ea4
commit
2cc3b37f5b
@ -552,6 +552,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd)
|
|||||||
config.dev = &mtd->dev;
|
config.dev = &mtd->dev;
|
||||||
config.name = dev_name(&mtd->dev);
|
config.name = dev_name(&mtd->dev);
|
||||||
config.owner = THIS_MODULE;
|
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.reg_read = mtd_nvmem_reg_read;
|
||||||
config.size = mtd->size;
|
config.size = mtd->size;
|
||||||
config.word_size = 1;
|
config.word_size = 1;
|
||||||
@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
|
|||||||
config.name = compatible;
|
config.name = compatible;
|
||||||
config.id = NVMEM_DEVID_AUTO;
|
config.id = NVMEM_DEVID_AUTO;
|
||||||
config.owner = THIS_MODULE;
|
config.owner = THIS_MODULE;
|
||||||
|
config.add_legacy_fixed_of_cells = true;
|
||||||
config.type = NVMEM_TYPE_OTP;
|
config.type = NVMEM_TYPE_OTP;
|
||||||
config.root_only = true;
|
config.root_only = true;
|
||||||
config.ignore_wp = true;
|
config.ignore_wp = true;
|
||||||
|
@ -36,6 +36,7 @@ static int apple_efuses_probe(struct platform_device *pdev)
|
|||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct nvmem_config config = {
|
struct nvmem_config config = {
|
||||||
.dev = &pdev->dev,
|
.dev = &pdev->dev,
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.read_only = true,
|
.read_only = true,
|
||||||
.reg_read = apple_efuses_read,
|
.reg_read = apple_efuses_read,
|
||||||
.stride = sizeof(u32),
|
.stride = sizeof(u32),
|
||||||
|
@ -997,9 +997,11 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
|
|||||||
if (rval)
|
if (rval)
|
||||||
goto err_remove_cells;
|
goto err_remove_cells;
|
||||||
|
|
||||||
rval = nvmem_add_cells_from_legacy_of(nvmem);
|
if (config->add_legacy_fixed_of_cells) {
|
||||||
if (rval)
|
rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||||
goto err_remove_cells;
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
}
|
||||||
|
|
||||||
rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
if (rval)
|
if (rval)
|
||||||
|
@ -220,6 +220,7 @@ static int imx_scu_ocotp_write(void *context, unsigned int offset,
|
|||||||
|
|
||||||
static struct nvmem_config imx_scu_ocotp_nvmem_config = {
|
static struct nvmem_config imx_scu_ocotp_nvmem_config = {
|
||||||
.name = "imx-scu-ocotp",
|
.name = "imx-scu-ocotp",
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.read_only = false,
|
.read_only = false,
|
||||||
.word_size = 4,
|
.word_size = 4,
|
||||||
.stride = 1,
|
.stride = 1,
|
||||||
|
@ -615,6 +615,7 @@ static int imx_ocotp_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(priv->clk);
|
return PTR_ERR(priv->clk);
|
||||||
|
|
||||||
priv->params = of_device_get_match_data(&pdev->dev);
|
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.size = 4 * priv->params->nregs;
|
||||||
imx_ocotp_nvmem_config.dev = dev;
|
imx_ocotp_nvmem_config.dev = dev;
|
||||||
imx_ocotp_nvmem_config.priv = priv;
|
imx_ocotp_nvmem_config.priv = priv;
|
||||||
|
@ -93,6 +93,7 @@ static int meson_efuse_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
econfig->dev = dev;
|
econfig->dev = dev;
|
||||||
econfig->name = dev_name(dev);
|
econfig->name = dev_name(dev);
|
||||||
|
econfig->add_legacy_fixed_of_cells = true;
|
||||||
econfig->stride = 1;
|
econfig->stride = 1;
|
||||||
econfig->word_size = 1;
|
econfig->word_size = 1;
|
||||||
econfig->reg_read = meson_efuse_read;
|
econfig->reg_read = meson_efuse_read;
|
||||||
|
@ -210,6 +210,7 @@ static int meson_mx_efuse_probe(struct platform_device *pdev)
|
|||||||
efuse->config.owner = THIS_MODULE;
|
efuse->config.owner = THIS_MODULE;
|
||||||
efuse->config.dev = &pdev->dev;
|
efuse->config.dev = &pdev->dev;
|
||||||
efuse->config.priv = efuse;
|
efuse->config.priv = efuse;
|
||||||
|
efuse->config.add_legacy_fixed_of_cells = true;
|
||||||
efuse->config.stride = drvdata->word_size;
|
efuse->config.stride = drvdata->word_size;
|
||||||
efuse->config.word_size = drvdata->word_size;
|
efuse->config.word_size = drvdata->word_size;
|
||||||
efuse->config.size = SZ_512;
|
efuse->config.size = SZ_512;
|
||||||
|
@ -261,6 +261,7 @@ static int mchp_otpc_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
mchp_nvmem_config.dev = otpc->dev;
|
mchp_nvmem_config.dev = otpc->dev;
|
||||||
|
mchp_nvmem_config.add_legacy_fixed_of_cells = true;
|
||||||
mchp_nvmem_config.size = size;
|
mchp_nvmem_config.size = size;
|
||||||
mchp_nvmem_config.priv = otpc;
|
mchp_nvmem_config.priv = otpc;
|
||||||
nvmem = devm_nvmem_register(&pdev->dev, &mchp_nvmem_config);
|
nvmem = devm_nvmem_register(&pdev->dev, &mchp_nvmem_config);
|
||||||
|
@ -83,6 +83,7 @@ static int mtk_efuse_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(priv->base);
|
return PTR_ERR(priv->base);
|
||||||
|
|
||||||
pdata = device_get_match_data(dev);
|
pdata = device_get_match_data(dev);
|
||||||
|
econfig.add_legacy_fixed_of_cells = true;
|
||||||
econfig.stride = 1;
|
econfig.stride = 1;
|
||||||
econfig.word_size = 1;
|
econfig.word_size = 1;
|
||||||
econfig.reg_read = mtk_reg_read;
|
econfig.reg_read = mtk_reg_read;
|
||||||
|
@ -142,6 +142,7 @@ static int sdam_probe(struct platform_device *pdev)
|
|||||||
sdam->sdam_config.name = "spmi_sdam";
|
sdam->sdam_config.name = "spmi_sdam";
|
||||||
sdam->sdam_config.id = NVMEM_DEVID_AUTO;
|
sdam->sdam_config.id = NVMEM_DEVID_AUTO;
|
||||||
sdam->sdam_config.owner = THIS_MODULE;
|
sdam->sdam_config.owner = THIS_MODULE;
|
||||||
|
sdam->sdam_config.add_legacy_fixed_of_cells = true;
|
||||||
sdam->sdam_config.stride = 1;
|
sdam->sdam_config.stride = 1;
|
||||||
sdam->sdam_config.word_size = 1;
|
sdam->sdam_config.word_size = 1;
|
||||||
sdam->sdam_config.reg_read = sdam_read;
|
sdam->sdam_config.reg_read = sdam_read;
|
||||||
|
@ -357,6 +357,7 @@ static int qfprom_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct nvmem_config econfig = {
|
struct nvmem_config econfig = {
|
||||||
.name = "qfprom",
|
.name = "qfprom",
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.stride = 1,
|
.stride = 1,
|
||||||
.word_size = 1,
|
.word_size = 1,
|
||||||
.id = NVMEM_DEVID_AUTO,
|
.id = NVMEM_DEVID_AUTO,
|
||||||
|
@ -328,6 +328,7 @@ static int rave_sp_eeprom_probe(struct platform_device *pdev)
|
|||||||
of_property_read_string(np, "zii,eeprom-name", &config.name);
|
of_property_read_string(np, "zii,eeprom-name", &config.name);
|
||||||
config.priv = eeprom;
|
config.priv = eeprom;
|
||||||
config.dev = dev;
|
config.dev = dev;
|
||||||
|
config.add_legacy_fixed_of_cells = true;
|
||||||
config.size = size;
|
config.size = size;
|
||||||
config.reg_read = rave_sp_eeprom_reg_read;
|
config.reg_read = rave_sp_eeprom_reg_read;
|
||||||
config.reg_write = rave_sp_eeprom_reg_write;
|
config.reg_write = rave_sp_eeprom_reg_write;
|
||||||
|
@ -205,6 +205,7 @@ static int rockchip_rk3399_efuse_read(void *context, unsigned int offset,
|
|||||||
|
|
||||||
static struct nvmem_config econfig = {
|
static struct nvmem_config econfig = {
|
||||||
.name = "rockchip-efuse",
|
.name = "rockchip-efuse",
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.stride = 1,
|
.stride = 1,
|
||||||
.word_size = 1,
|
.word_size = 1,
|
||||||
.read_only = true,
|
.read_only = true,
|
||||||
|
@ -247,6 +247,7 @@ static int sc27xx_efuse_probe(struct platform_device *pdev)
|
|||||||
econfig.reg_read = sc27xx_efuse_read;
|
econfig.reg_read = sc27xx_efuse_read;
|
||||||
econfig.priv = efuse;
|
econfig.priv = efuse;
|
||||||
econfig.dev = &pdev->dev;
|
econfig.dev = &pdev->dev;
|
||||||
|
econfig.add_legacy_fixed_of_cells = true;
|
||||||
nvmem = devm_nvmem_register(&pdev->dev, &econfig);
|
nvmem = devm_nvmem_register(&pdev->dev, &econfig);
|
||||||
if (IS_ERR(nvmem)) {
|
if (IS_ERR(nvmem)) {
|
||||||
dev_err(&pdev->dev, "failed to register nvmem config\n");
|
dev_err(&pdev->dev, "failed to register nvmem config\n");
|
||||||
|
@ -47,6 +47,7 @@ static int sec_qfprom_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct nvmem_config econfig = {
|
struct nvmem_config econfig = {
|
||||||
.name = "sec-qfprom",
|
.name = "sec-qfprom",
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.stride = 1,
|
.stride = 1,
|
||||||
.word_size = 1,
|
.word_size = 1,
|
||||||
.id = NVMEM_DEVID_AUTO,
|
.id = NVMEM_DEVID_AUTO,
|
||||||
|
@ -408,6 +408,7 @@ static int sprd_efuse_probe(struct platform_device *pdev)
|
|||||||
econfig.read_only = false;
|
econfig.read_only = false;
|
||||||
econfig.name = "sprd-efuse";
|
econfig.name = "sprd-efuse";
|
||||||
econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
|
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_read = sprd_efuse_read;
|
||||||
econfig.reg_write = sprd_efuse_write;
|
econfig.reg_write = sprd_efuse_write;
|
||||||
econfig.priv = efuse;
|
econfig.priv = efuse;
|
||||||
|
@ -207,6 +207,7 @@ static int stm32_romem_probe(struct platform_device *pdev)
|
|||||||
priv->cfg.priv = priv;
|
priv->cfg.priv = priv;
|
||||||
priv->cfg.owner = THIS_MODULE;
|
priv->cfg.owner = THIS_MODULE;
|
||||||
priv->cfg.type = NVMEM_TYPE_OTP;
|
priv->cfg.type = NVMEM_TYPE_OTP;
|
||||||
|
priv->cfg.add_legacy_fixed_of_cells = true;
|
||||||
|
|
||||||
priv->lower = 0;
|
priv->lower = 0;
|
||||||
|
|
||||||
|
@ -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 = {
|
static struct nvmem_config sp_ocotp_nvmem_config = {
|
||||||
.name = "sp-ocotp",
|
.name = "sp-ocotp",
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.read_only = true,
|
.read_only = true,
|
||||||
.word_size = 1,
|
.word_size = 1,
|
||||||
.size = QAC628_OTP_SIZE,
|
.size = QAC628_OTP_SIZE,
|
||||||
|
@ -153,6 +153,7 @@ static int sunxi_sid_probe(struct platform_device *pdev)
|
|||||||
nvmem_cfg->dev = dev;
|
nvmem_cfg->dev = dev;
|
||||||
nvmem_cfg->name = "sunxi-sid";
|
nvmem_cfg->name = "sunxi-sid";
|
||||||
nvmem_cfg->type = NVMEM_TYPE_OTP;
|
nvmem_cfg->type = NVMEM_TYPE_OTP;
|
||||||
|
nvmem_cfg->add_legacy_fixed_of_cells = true;
|
||||||
nvmem_cfg->read_only = true;
|
nvmem_cfg->read_only = true;
|
||||||
nvmem_cfg->size = cfg->size;
|
nvmem_cfg->size = cfg->size;
|
||||||
nvmem_cfg->word_size = 1;
|
nvmem_cfg->word_size = 1;
|
||||||
|
@ -52,6 +52,7 @@ static int uniphier_efuse_probe(struct platform_device *pdev)
|
|||||||
econfig.size = resource_size(res);
|
econfig.size = resource_size(res);
|
||||||
econfig.priv = priv;
|
econfig.priv = priv;
|
||||||
econfig.dev = dev;
|
econfig.dev = dev;
|
||||||
|
econfig.add_legacy_fixed_of_cells = true;
|
||||||
nvmem = devm_nvmem_register(dev, &econfig);
|
nvmem = devm_nvmem_register(dev, &econfig);
|
||||||
|
|
||||||
return PTR_ERR_OR_ZERO(nvmem);
|
return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
@ -58,6 +58,7 @@ static int zynqmp_nvmem_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
priv->dev = dev;
|
priv->dev = dev;
|
||||||
econfig.dev = dev;
|
econfig.dev = dev;
|
||||||
|
econfig.add_legacy_fixed_of_cells = true;
|
||||||
econfig.reg_read = zynqmp_nvmem_read;
|
econfig.reg_read = zynqmp_nvmem_read;
|
||||||
econfig.priv = priv;
|
econfig.priv = priv;
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ int devm_rtc_nvmem_register(struct rtc_device *rtc,
|
|||||||
|
|
||||||
nvmem_config->dev = dev;
|
nvmem_config->dev = dev;
|
||||||
nvmem_config->owner = rtc->owner;
|
nvmem_config->owner = rtc->owner;
|
||||||
|
nvmem_config->add_legacy_fixed_of_cells = true;
|
||||||
nvmem = devm_nvmem_register(dev, nvmem_config);
|
nvmem = devm_nvmem_register(dev, nvmem_config);
|
||||||
if (IS_ERR(nvmem))
|
if (IS_ERR(nvmem))
|
||||||
dev_err(dev, "failed to register nvmem device for RTC\n");
|
dev_err(dev, "failed to register nvmem device for RTC\n");
|
||||||
|
@ -168,6 +168,7 @@ static int w1_eprom_add_slave(struct w1_slave *sl)
|
|||||||
struct nvmem_device *nvmem;
|
struct nvmem_device *nvmem;
|
||||||
struct nvmem_config nvmem_cfg = {
|
struct nvmem_config nvmem_cfg = {
|
||||||
.dev = &sl->dev,
|
.dev = &sl->dev,
|
||||||
|
.add_legacy_fixed_of_cells = true,
|
||||||
.reg_read = w1_nvmem_read,
|
.reg_read = w1_nvmem_read,
|
||||||
.type = NVMEM_TYPE_OTP,
|
.type = NVMEM_TYPE_OTP,
|
||||||
.read_only = true,
|
.read_only = true,
|
||||||
|
@ -82,6 +82,7 @@ struct nvmem_cell_info {
|
|||||||
* @owner: Pointer to exporter module. Used for refcounting.
|
* @owner: Pointer to exporter module. Used for refcounting.
|
||||||
* @cells: Optional array of pre-defined NVMEM cells.
|
* @cells: Optional array of pre-defined NVMEM cells.
|
||||||
* @ncells: Number of elements in 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).
|
* @keepout: Optional array of keepout ranges (sorted ascending by start).
|
||||||
* @nkeepout: Number of elements in the keepout array.
|
* @nkeepout: Number of elements in the keepout array.
|
||||||
* @type: Type of the nvmem storage
|
* @type: Type of the nvmem storage
|
||||||
@ -112,6 +113,7 @@ struct nvmem_config {
|
|||||||
struct module *owner;
|
struct module *owner;
|
||||||
const struct nvmem_cell_info *cells;
|
const struct nvmem_cell_info *cells;
|
||||||
int ncells;
|
int ncells;
|
||||||
|
bool add_legacy_fixed_of_cells;
|
||||||
const struct nvmem_keepout *keepout;
|
const struct nvmem_keepout *keepout;
|
||||||
unsigned int nkeepout;
|
unsigned int nkeepout;
|
||||||
enum nvmem_type type;
|
enum nvmem_type type;
|
||||||
|
Loading…
Reference in New Issue
Block a user