mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	Copy backport, hack, pending patch and config from 5.15 to 6.1. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
		
			
				
	
	
		
			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);
 |