123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- From 7c8979b42b1a9c5604f431ba804928e55919263c Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]>
- Date: Thu, 21 Dec 2023 18:34:18 +0100
- Subject: [PATCH] nvmem: u-boot-env: use nvmem_add_one_cell() nvmem subsystem
- helper
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- Simplify adding NVMEM cells.
- Signed-off-by: Rafał Miłecki <[email protected]>
- Reviewed-by: Miquel Raynal <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Greg Kroah-Hartman <[email protected]>
- ---
- drivers/nvmem/u-boot-env.c | 55 +++++++++++++++-----------------------
- 1 file changed, 21 insertions(+), 34 deletions(-)
- --- a/drivers/nvmem/u-boot-env.c
- +++ b/drivers/nvmem/u-boot-env.c
- @@ -23,13 +23,10 @@ enum u_boot_env_format {
-
- struct u_boot_env {
- struct device *dev;
- + struct nvmem_device *nvmem;
- enum u_boot_env_format format;
-
- struct mtd_info *mtd;
- -
- - /* Cells */
- - struct nvmem_cell_info *cells;
- - int ncells;
- };
-
- struct u_boot_env_image_single {
- @@ -94,43 +91,36 @@ static int u_boot_env_read_post_process_
- static int u_boot_env_add_cells(struct u_boot_env *priv, uint8_t *buf,
- size_t data_offset, size_t data_len)
- {
- + struct nvmem_device *nvmem = priv->nvmem;
- struct device *dev = priv->dev;
- char *data = buf + data_offset;
- char *var, *value, *eq;
- - int idx;
- -
- - priv->ncells = 0;
- - for (var = data; var < data + data_len && *var; var += strlen(var) + 1)
- - priv->ncells++;
- -
- - priv->cells = devm_kcalloc(dev, priv->ncells, sizeof(*priv->cells), GFP_KERNEL);
- - if (!priv->cells)
- - return -ENOMEM;
-
- - for (var = data, idx = 0;
- + for (var = data;
- var < data + data_len && *var;
- - var = value + strlen(value) + 1, idx++) {
- + var = value + strlen(value) + 1) {
- + struct nvmem_cell_info info = {};
- +
- eq = strchr(var, '=');
- if (!eq)
- break;
- *eq = '\0';
- value = eq + 1;
-
- - priv->cells[idx].name = devm_kstrdup(dev, var, GFP_KERNEL);
- - if (!priv->cells[idx].name)
- + info.name = devm_kstrdup(dev, var, GFP_KERNEL);
- + if (!info.name)
- return -ENOMEM;
- - priv->cells[idx].offset = data_offset + value - data;
- - priv->cells[idx].bytes = strlen(value);
- - priv->cells[idx].np = of_get_child_by_name(dev->of_node, priv->cells[idx].name);
- + info.offset = data_offset + value - data;
- + info.bytes = strlen(value);
- + info.np = of_get_child_by_name(dev->of_node, info.name);
- if (!strcmp(var, "ethaddr")) {
- - priv->cells[idx].raw_len = strlen(value);
- - priv->cells[idx].bytes = ETH_ALEN;
- - priv->cells[idx].read_post_process = u_boot_env_read_post_process_ethaddr;
- + info.raw_len = strlen(value);
- + info.bytes = ETH_ALEN;
- + info.read_post_process = u_boot_env_read_post_process_ethaddr;
- }
- - }
-
- - if (WARN_ON(idx != priv->ncells))
- - priv->ncells = idx;
- + nvmem_add_one_cell(nvmem, &info);
- + }
-
- return 0;
- }
- @@ -209,7 +199,6 @@ static int u_boot_env_probe(struct platf
- struct device *dev = &pdev->dev;
- struct device_node *np = dev->of_node;
- struct u_boot_env *priv;
- - int err;
-
- priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
- if (!priv)
- @@ -224,17 +213,15 @@ static int u_boot_env_probe(struct platf
- return PTR_ERR(priv->mtd);
- }
-
- - err = u_boot_env_parse(priv);
- - if (err)
- - return err;
- -
- config.dev = dev;
- - config.cells = priv->cells;
- - config.ncells = priv->ncells;
- config.priv = priv;
- config.size = priv->mtd->size;
-
- - return PTR_ERR_OR_ZERO(devm_nvmem_register(dev, &config));
- + priv->nvmem = devm_nvmem_register(dev, &config);
- + if (IS_ERR(priv->nvmem))
- + return PTR_ERR(priv->nvmem);
- +
- + return u_boot_env_parse(priv);
- }
-
- static const struct of_device_id u_boot_env_of_match_table[] = {
|