From: "Rafał Miłecki" <zajec5@gmail.com>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
Cc: "Shawn Guo" <shawnguo@kernel.org>,
"Sascha Hauer" <s.hauer@pengutronix.de>,
"Pengutronix Kernel Team" <kernel@pengutronix.de>,
"Fabio Estevam" <festevam@gmail.com>,
"NXP Linux Team" <linux-imx@nxp.com>,
"Miquel Raynal" <miquel.raynal@bootlin.com>,
"Michael Walle" <michael@walle.cc>,
gregkh@linuxfoundation.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, u-boot@lists.denx.de,
"Rafał Miłecki" <rafal@milecki.pl>
Subject: [PATCH 4/4] nvmem: u-boot-env: post-process "ethaddr" env variable
Date: Wed, 22 Feb 2023 18:22:45 +0100 [thread overview]
Message-ID: <20230222172245.6313-5-zajec5@gmail.com> (raw)
In-Reply-To: <20230222172245.6313-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
U-Boot environment variables are stored in ASCII format so "ethaddr"
requires parsing into binary to make it work with Ethernet interfaces.
This includes support for indexes to support #nvmem-cell-cells = <1>.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
drivers/nvmem/Kconfig | 1 +
drivers/nvmem/u-boot-env.c | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index 189ea85bd67d..71322ea7cf53 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -346,6 +346,7 @@ config NVMEM_U_BOOT_ENV
tristate "U-Boot environment variables support"
depends on OF && MTD
select CRC32
+ select GENERIC_NET_UTILS
help
U-Boot stores its setup as environment variables. This driver adds
support for verifying & exporting such data. It also exposes variables
diff --git a/drivers/nvmem/u-boot-env.c b/drivers/nvmem/u-boot-env.c
index 29b1d87a3c51..1f5d8aba98bf 100644
--- a/drivers/nvmem/u-boot-env.c
+++ b/drivers/nvmem/u-boot-env.c
@@ -4,6 +4,8 @@
*/
#include <linux/crc32.h>
+#include <linux/etherdevice.h>
+#include <linux/if_ether.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/mtd/mtd.h>
@@ -70,6 +72,27 @@ static int u_boot_env_read(void *context, unsigned int offset, void *val,
return 0;
}
+static int u_boot_env_read_post_process_ethaddr(void *context, const char *id, int index,
+ unsigned int offset, void **data, size_t *bytes)
+{
+ u8 mac[ETH_ALEN];
+
+ if (*bytes != 3 * ETH_ALEN - 1)
+ return -EINVAL;
+
+ if (!mac_pton(*data, mac))
+ return -EINVAL;
+
+ if (index)
+ eth_addr_add(mac, index);
+
+ /* We need *smaller* buffer so don't bother to krealloc() */
+ ether_addr_copy(*data, mac);
+ *bytes = ETH_ALEN;
+
+ return 0;
+}
+
static int u_boot_env_add_cells(struct u_boot_env *priv, uint8_t *buf,
size_t data_offset, size_t data_len)
{
@@ -101,6 +124,8 @@ static int u_boot_env_add_cells(struct u_boot_env *priv, uint8_t *buf,
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);
+ if (!strcmp(var, "ethaddr"))
+ priv->cells[idx].read_post_process = u_boot_env_read_post_process_ethaddr;
}
if (WARN_ON(idx != priv->ncells))
--
2.34.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: "Rafał Miłecki" <zajec5@gmail.com>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
Cc: "Shawn Guo" <shawnguo@kernel.org>,
"Sascha Hauer" <s.hauer@pengutronix.de>,
"Pengutronix Kernel Team" <kernel@pengutronix.de>,
"Fabio Estevam" <festevam@gmail.com>,
"NXP Linux Team" <linux-imx@nxp.com>,
"Miquel Raynal" <miquel.raynal@bootlin.com>,
"Michael Walle" <michael@walle.cc>,
gregkh@linuxfoundation.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, u-boot@lists.denx.de,
"Rafał Miłecki" <rafal@milecki.pl>
Subject: [PATCH 4/4] nvmem: u-boot-env: post-process "ethaddr" env variable
Date: Wed, 22 Feb 2023 18:22:45 +0100 [thread overview]
Message-ID: <20230222172245.6313-5-zajec5@gmail.com> (raw)
In-Reply-To: <20230222172245.6313-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
U-Boot environment variables are stored in ASCII format so "ethaddr"
requires parsing into binary to make it work with Ethernet interfaces.
This includes support for indexes to support #nvmem-cell-cells = <1>.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
drivers/nvmem/Kconfig | 1 +
drivers/nvmem/u-boot-env.c | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index 189ea85bd67d..71322ea7cf53 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -346,6 +346,7 @@ config NVMEM_U_BOOT_ENV
tristate "U-Boot environment variables support"
depends on OF && MTD
select CRC32
+ select GENERIC_NET_UTILS
help
U-Boot stores its setup as environment variables. This driver adds
support for verifying & exporting such data. It also exposes variables
diff --git a/drivers/nvmem/u-boot-env.c b/drivers/nvmem/u-boot-env.c
index 29b1d87a3c51..1f5d8aba98bf 100644
--- a/drivers/nvmem/u-boot-env.c
+++ b/drivers/nvmem/u-boot-env.c
@@ -4,6 +4,8 @@
*/
#include <linux/crc32.h>
+#include <linux/etherdevice.h>
+#include <linux/if_ether.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/mtd/mtd.h>
@@ -70,6 +72,27 @@ static int u_boot_env_read(void *context, unsigned int offset, void *val,
return 0;
}
+static int u_boot_env_read_post_process_ethaddr(void *context, const char *id, int index,
+ unsigned int offset, void **data, size_t *bytes)
+{
+ u8 mac[ETH_ALEN];
+
+ if (*bytes != 3 * ETH_ALEN - 1)
+ return -EINVAL;
+
+ if (!mac_pton(*data, mac))
+ return -EINVAL;
+
+ if (index)
+ eth_addr_add(mac, index);
+
+ /* We need *smaller* buffer so don't bother to krealloc() */
+ ether_addr_copy(*data, mac);
+ *bytes = ETH_ALEN;
+
+ return 0;
+}
+
static int u_boot_env_add_cells(struct u_boot_env *priv, uint8_t *buf,
size_t data_offset, size_t data_len)
{
@@ -101,6 +124,8 @@ static int u_boot_env_add_cells(struct u_boot_env *priv, uint8_t *buf,
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);
+ if (!strcmp(var, "ethaddr"))
+ priv->cells[idx].read_post_process = u_boot_env_read_post_process_ethaddr;
}
if (WARN_ON(idx != priv->ncells))
--
2.34.1
next prev parent reply other threads:[~2023-02-22 17:24 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-22 17:22 [PATCH 0/4] nvmem: cell post-processing & U-Boot env MAC support Rafał Miłecki
2023-02-22 17:22 ` Rafał Miłecki
2023-02-22 17:22 ` [PATCH 1/4] nvmem: core: add per-cell post processing Rafał Miłecki
2023-02-22 17:22 ` Rafał Miłecki
2023-02-22 17:22 ` [PATCH 2/4] nvmem: core: allow nvmem_cell_post_process_t callbacks to adjust buffer Rafał Miłecki
2023-02-22 17:22 ` Rafał Miłecki
2023-03-09 10:12 ` Srinivas Kandagatla
2023-03-09 10:12 ` Srinivas Kandagatla
2023-03-09 10:32 ` Miquel Raynal
2023-03-09 10:32 ` Miquel Raynal
2023-03-09 10:53 ` Srinivas Kandagatla
2023-03-09 10:53 ` Srinivas Kandagatla
2023-03-09 11:23 ` Miquel Raynal
2023-03-09 11:23 ` Miquel Raynal
2023-03-09 11:44 ` Srinivas Kandagatla
2023-03-09 11:44 ` Srinivas Kandagatla
2023-03-09 11:52 ` Rafał Miłecki
2023-03-09 11:52 ` Rafał Miłecki
2023-03-09 13:10 ` Miquel Raynal
2023-03-09 13:10 ` Miquel Raynal
2023-03-09 13:31 ` Rafał Miłecki
2023-03-09 13:31 ` Rafał Miłecki
2023-03-10 9:25 ` Srinivas Kandagatla
2023-03-10 9:25 ` Srinivas Kandagatla
2023-02-22 17:22 ` [PATCH 3/4] dt-bindings: nvmem: u-boot,env: add MAC's #nvmem-cell-cells Rafał Miłecki
2023-02-22 17:22 ` [PATCH 3/4] dt-bindings: nvmem: u-boot, env: " Rafał Miłecki
2023-02-22 17:22 ` [PATCH 3/4] dt-bindings: nvmem: u-boot,env: " Rafał Miłecki
2023-02-22 17:22 ` Rafał Miłecki [this message]
2023-02-22 17:22 ` [PATCH 4/4] nvmem: u-boot-env: post-process "ethaddr" env variable Rafał Miłecki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230222172245.6313-5-zajec5@gmail.com \
--to=zajec5@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=kernel@pengutronix.de \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=michael@walle.cc \
--cc=miquel.raynal@bootlin.com \
--cc=rafal@milecki.pl \
--cc=robh+dt@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.