forked from Openwrt/openwrt
323072f3a6
They add NVMEM layouts support. It allows handling NVMEM content independently of NVMEM device access. Skip U-Boot env data patch for now as it break our downstream MAC hacks. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
82 lines
2.7 KiB
Diff
82 lines
2.7 KiB
Diff
From 6c56a82d7895a213a43182a5d01a21a906a79847 Mon Sep 17 00:00:00 2001
|
|
From: Michael Walle <michael@walle.cc>
|
|
Date: Tue, 4 Apr 2023 18:21:26 +0100
|
|
Subject: [PATCH] nvmem: imx-ocotp: replace global post processing with layouts
|
|
|
|
In preparation of retiring the global post processing hook change this
|
|
driver to use layouts. The layout will be supplied during registration
|
|
and will be used to add the post processing hook to all added cells.
|
|
|
|
Signed-off-by: Michael Walle <michael@walle.cc>
|
|
Tested-by: Michael Walle <michael@walle.cc> # on kontron-pitx-imx8m
|
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
|
Link: https://lore.kernel.org/r/20230404172148.82422-19-srinivas.kandagatla@linaro.org
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/nvmem/imx-ocotp.c | 30 +++++++++++++++++++-----------
|
|
1 file changed, 19 insertions(+), 11 deletions(-)
|
|
|
|
--- a/drivers/nvmem/imx-ocotp.c
|
|
+++ b/drivers/nvmem/imx-ocotp.c
|
|
@@ -225,18 +225,13 @@ read_end:
|
|
static int imx_ocotp_cell_pp(void *context, const char *id, int index,
|
|
unsigned int offset, void *data, size_t bytes)
|
|
{
|
|
- struct ocotp_priv *priv = context;
|
|
+ u8 *buf = data;
|
|
+ int i;
|
|
|
|
/* Deal with some post processing of nvmem cell data */
|
|
- if (id && !strcmp(id, "mac-address")) {
|
|
- if (priv->params->reverse_mac_address) {
|
|
- u8 *buf = data;
|
|
- int i;
|
|
-
|
|
- for (i = 0; i < bytes/2; i++)
|
|
- swap(buf[i], buf[bytes - i - 1]);
|
|
- }
|
|
- }
|
|
+ if (id && !strcmp(id, "mac-address"))
|
|
+ for (i = 0; i < bytes / 2; i++)
|
|
+ swap(buf[i], buf[bytes - i - 1]);
|
|
|
|
return 0;
|
|
}
|
|
@@ -488,7 +483,6 @@ static struct nvmem_config imx_ocotp_nvm
|
|
.stride = 1,
|
|
.reg_read = imx_ocotp_read,
|
|
.reg_write = imx_ocotp_write,
|
|
- .cell_post_process = imx_ocotp_cell_pp,
|
|
};
|
|
|
|
static const struct ocotp_params imx6q_params = {
|
|
@@ -595,6 +589,17 @@ static const struct of_device_id imx_oco
|
|
};
|
|
MODULE_DEVICE_TABLE(of, imx_ocotp_dt_ids);
|
|
|
|
+static void imx_ocotp_fixup_cell_info(struct nvmem_device *nvmem,
|
|
+ struct nvmem_layout *layout,
|
|
+ struct nvmem_cell_info *cell)
|
|
+{
|
|
+ cell->read_post_process = imx_ocotp_cell_pp;
|
|
+}
|
|
+
|
|
+struct nvmem_layout imx_ocotp_layout = {
|
|
+ .fixup_cell_info = imx_ocotp_fixup_cell_info,
|
|
+};
|
|
+
|
|
static int imx_ocotp_probe(struct platform_device *pdev)
|
|
{
|
|
struct device *dev = &pdev->dev;
|
|
@@ -619,6 +624,9 @@ static int imx_ocotp_probe(struct platfo
|
|
imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
|
|
imx_ocotp_nvmem_config.dev = dev;
|
|
imx_ocotp_nvmem_config.priv = priv;
|
|
+ if (priv->params->reverse_mac_address)
|
|
+ imx_ocotp_nvmem_config.layout = &imx_ocotp_layout;
|
|
+
|
|
priv->config = &imx_ocotp_nvmem_config;
|
|
|
|
clk_prepare_enable(priv->clk);
|