mirror of
https://github.com/openwrt/openwrt.git
synced 2025-03-14 00:06:46 +00:00
kernel: backport v6.6 nvmem changes
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
99a98b3024
commit
52c365f055
@ -0,0 +1,36 @@
|
|||||||
|
From 9ccfcbeb8f32ff89e99b36cb9cdebaa0d1b44ed1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:24 +0100
|
||||||
|
Subject: [PATCH] nvmem: sunxi_sid: Convert to devm_platform_ioremap_resource()
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() to simplify code.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-3-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/sunxi_sid.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/sunxi_sid.c
|
||||||
|
+++ b/drivers/nvmem/sunxi_sid.c
|
||||||
|
@@ -125,7 +125,6 @@ static int sun8i_sid_read_by_reg(void *c
|
||||||
|
static int sunxi_sid_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
- struct resource *res;
|
||||||
|
struct nvmem_config *nvmem_cfg;
|
||||||
|
struct nvmem_device *nvmem;
|
||||||
|
struct sunxi_sid *sid;
|
||||||
|
@@ -142,8 +141,7 @@ static int sunxi_sid_probe(struct platfo
|
||||||
|
return -EINVAL;
|
||||||
|
sid->value_offset = cfg->value_offset;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- sid->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ sid->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
|
if (IS_ERR(sid->base))
|
||||||
|
return PTR_ERR(sid->base);
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From cfadd0e7d9225566f320bc4dc716682be910be6c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:25 +0100
|
||||||
|
Subject: [PATCH] nvmem: brcm_nvram: Use
|
||||||
|
devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-4-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/brcm_nvram.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/brcm_nvram.c
|
||||||
|
+++ b/drivers/nvmem/brcm_nvram.c
|
||||||
|
@@ -159,8 +159,7 @@ static int brcm_nvram_probe(struct platf
|
||||||
|
return -ENOMEM;
|
||||||
|
priv->dev = dev;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->base))
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 0b49178e2b6b4aac3c7fa3ce8d8c02208a13b988 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:26 +0100
|
||||||
|
Subject: [PATCH] nvmem: lpc18xx_otp: Convert to
|
||||||
|
devm_platform_ioremap_resource()
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() to simplify code.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-5-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/lpc18xx_otp.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/lpc18xx_otp.c
|
||||||
|
+++ b/drivers/nvmem/lpc18xx_otp.c
|
||||||
|
@@ -68,14 +68,12 @@ static int lpc18xx_otp_probe(struct plat
|
||||||
|
{
|
||||||
|
struct nvmem_device *nvmem;
|
||||||
|
struct lpc18xx_otp *otp;
|
||||||
|
- struct resource *res;
|
||||||
|
|
||||||
|
otp = devm_kzalloc(&pdev->dev, sizeof(*otp), GFP_KERNEL);
|
||||||
|
if (!otp)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- otp->base = devm_ioremap_resource(&pdev->dev, res);
|
||||||
|
+ otp->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
|
if (IS_ERR(otp->base))
|
||||||
|
return PTR_ERR(otp->base);
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 0a223a097709b99a0ba738d6be5b4f52c04ffb64 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:27 +0100
|
||||||
|
Subject: [PATCH] nvmem: meson-mx-efuse: Convert to
|
||||||
|
devm_platform_ioremap_resource()
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() to simplify code.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-6-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/meson-mx-efuse.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
+++ b/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
@@ -194,7 +194,6 @@ static int meson_mx_efuse_probe(struct p
|
||||||
|
{
|
||||||
|
const struct meson_mx_efuse_platform_data *drvdata;
|
||||||
|
struct meson_mx_efuse *efuse;
|
||||||
|
- struct resource *res;
|
||||||
|
|
||||||
|
drvdata = of_device_get_match_data(&pdev->dev);
|
||||||
|
if (!drvdata)
|
||||||
|
@@ -204,8 +203,7 @@ static int meson_mx_efuse_probe(struct p
|
||||||
|
if (!efuse)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- efuse->base = devm_ioremap_resource(&pdev->dev, res);
|
||||||
|
+ efuse->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
|
if (IS_ERR(efuse->base))
|
||||||
|
return PTR_ERR(efuse->base);
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 94904db28db49ac8fbb2a273d25156db26a3a985 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:28 +0100
|
||||||
|
Subject: [PATCH] nvmem: rockchip-efuse: Use
|
||||||
|
devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-7-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/rockchip-efuse.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/rockchip-efuse.c
|
||||||
|
+++ b/drivers/nvmem/rockchip-efuse.c
|
||||||
|
@@ -267,8 +267,7 @@ static int rockchip_efuse_probe(struct p
|
||||||
|
if (!efuse)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- efuse->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ efuse->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(efuse->base))
|
||||||
|
return PTR_ERR(efuse->base);
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 0a4a8c0d238fec1fa4b85591524ef42ad261cb97 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:29 +0100
|
||||||
|
Subject: [PATCH] nvmem: stm32-romem: Use
|
||||||
|
devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-8-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/stm32-romem.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/stm32-romem.c
|
||||||
|
+++ b/drivers/nvmem/stm32-romem.c
|
||||||
|
@@ -196,8 +196,7 @@ static int stm32_romem_probe(struct plat
|
||||||
|
if (!priv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->base))
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
From 0bc0d6dc2a9a05ae6729b4622f09782d9f230815 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:30 +0100
|
||||||
|
Subject: [PATCH] nvmem: qfprom: do some cleanup
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() and
|
||||||
|
devm_platform_get_and_ioremap_resource() to simplify code.
|
||||||
|
BTW convert to use dev_err_probe() instead of open it.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-9-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/qfprom.c | 17 +++++------------
|
||||||
|
1 file changed, 5 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/qfprom.c
|
||||||
|
+++ b/drivers/nvmem/qfprom.c
|
||||||
|
@@ -374,8 +374,7 @@ static int qfprom_probe(struct platform_
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* The corrected section is always provided */
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->qfpcorrected = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->qfpcorrected = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->qfpcorrected))
|
||||||
|
return PTR_ERR(priv->qfpcorrected);
|
||||||
|
|
||||||
|
@@ -402,12 +401,10 @@ static int qfprom_probe(struct platform_
|
||||||
|
priv->qfpraw = devm_ioremap_resource(dev, res);
|
||||||
|
if (IS_ERR(priv->qfpraw))
|
||||||
|
return PTR_ERR(priv->qfpraw);
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
|
||||||
|
- priv->qfpconf = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->qfpconf = devm_platform_ioremap_resource(pdev, 2);
|
||||||
|
if (IS_ERR(priv->qfpconf))
|
||||||
|
return PTR_ERR(priv->qfpconf);
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
|
||||||
|
- priv->qfpsecurity = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->qfpsecurity = devm_platform_ioremap_resource(pdev, 3);
|
||||||
|
if (IS_ERR(priv->qfpsecurity))
|
||||||
|
return PTR_ERR(priv->qfpsecurity);
|
||||||
|
|
||||||
|
@@ -427,12 +424,8 @@ static int qfprom_probe(struct platform_
|
||||||
|
return PTR_ERR(priv->vcc);
|
||||||
|
|
||||||
|
priv->secclk = devm_clk_get(dev, "core");
|
||||||
|
- if (IS_ERR(priv->secclk)) {
|
||||||
|
- ret = PTR_ERR(priv->secclk);
|
||||||
|
- if (ret != -EPROBE_DEFER)
|
||||||
|
- dev_err(dev, "Error getting clock: %d\n", ret);
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
+ if (IS_ERR(priv->secclk))
|
||||||
|
+ return dev_err_probe(dev, PTR_ERR(priv->secclk), "Error getting clock\n");
|
||||||
|
|
||||||
|
/* Only enable writing if we have SoC data. */
|
||||||
|
if (priv->soc_data)
|
@ -0,0 +1,29 @@
|
|||||||
|
From 6ac41c556e22a0d7d267c9b9d48681d73af4b368 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:31 +0100
|
||||||
|
Subject: [PATCH] nvmem: uniphier: Use devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-10-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/uniphier-efuse.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/uniphier-efuse.c
|
||||||
|
+++ b/drivers/nvmem/uniphier-efuse.c
|
||||||
|
@@ -41,8 +41,7 @@ static int uniphier_efuse_probe(struct p
|
||||||
|
if (!priv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->base))
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
@ -0,0 +1,133 @@
|
|||||||
|
From c8efcf7a86ebf2ff48584d270b3070a7075bc345 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Richard Alpe <richard@bit42.se>
|
||||||
|
Date: Mon, 10 Apr 2023 10:20:51 +0200
|
||||||
|
Subject: [PATCH] nvmem: add new NXP QorIQ eFuse driver
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Add SFP (Security Fuse Processor) read support for NXP (Freescale)
|
||||||
|
QorIQ series SOC's.
|
||||||
|
|
||||||
|
This patch adds support for the T1023 SOC using the SFP offset from
|
||||||
|
the existing T1023 device tree. In theory this should also work for
|
||||||
|
T1024, T1014 and T1013 which uses the same SFP base offset.
|
||||||
|
|
||||||
|
Signed-off-by: Richard Alpe <richard@bit42.se>
|
||||||
|
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/Kconfig | 12 ++++++
|
||||||
|
drivers/nvmem/Makefile | 2 +
|
||||||
|
drivers/nvmem/qoriq-efuse.c | 78 +++++++++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 92 insertions(+)
|
||||||
|
create mode 100644 drivers/nvmem/qoriq-efuse.c
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/Kconfig
|
||||||
|
+++ b/drivers/nvmem/Kconfig
|
||||||
|
@@ -392,4 +392,16 @@ config NVMEM_ZYNQMP
|
||||||
|
|
||||||
|
If sure, say yes. If unsure, say no.
|
||||||
|
|
||||||
|
+config NVMEM_QORIQ_EFUSE
|
||||||
|
+ tristate "NXP QorIQ eFuse support"
|
||||||
|
+ depends on PPC_85xx || COMPILE_TEST
|
||||||
|
+ depends on HAS_IOMEM
|
||||||
|
+ help
|
||||||
|
+ This driver provides read support for the eFuses (SFP) on NXP QorIQ
|
||||||
|
+ series SoC's. This includes secure boot settings, the globally unique
|
||||||
|
+ NXP ID 'FUIDR' and the OEM unique ID 'OUIDR'.
|
||||||
|
+
|
||||||
|
+ This driver can also be built as a module. If so, the module
|
||||||
|
+ will be called nvmem_qoriq_efuse.
|
||||||
|
+
|
||||||
|
endif
|
||||||
|
--- a/drivers/nvmem/Makefile
|
||||||
|
+++ b/drivers/nvmem/Makefile
|
||||||
|
@@ -77,3 +77,5 @@ obj-$(CONFIG_NVMEM_VF610_OCOTP) += nvme
|
||||||
|
nvmem-vf610-ocotp-y := vf610-ocotp.o
|
||||||
|
obj-$(CONFIG_NVMEM_ZYNQMP) += nvmem_zynqmp_nvmem.o
|
||||||
|
nvmem_zynqmp_nvmem-y := zynqmp_nvmem.o
|
||||||
|
+obj-$(CONFIG_NVMEM_QORIQ_EFUSE) += nvmem-qoriq-efuse.o
|
||||||
|
+nvmem-qoriq-efuse-y := qoriq-efuse.o
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/nvmem/qoriq-efuse.c
|
||||||
|
@@ -0,0 +1,78 @@
|
||||||
|
+// SPDX-License-Identifier: GPL-2.0
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2023 Westermo Network Technologies AB
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <linux/device.h>
|
||||||
|
+#include <linux/io.h>
|
||||||
|
+#include <linux/module.h>
|
||||||
|
+#include <linux/mod_devicetable.h>
|
||||||
|
+#include <linux/nvmem-provider.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+
|
||||||
|
+struct qoriq_efuse_priv {
|
||||||
|
+ void __iomem *base;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int qoriq_efuse_read(void *context, unsigned int offset, void *val,
|
||||||
|
+ size_t bytes)
|
||||||
|
+{
|
||||||
|
+ struct qoriq_efuse_priv *priv = context;
|
||||||
|
+
|
||||||
|
+ /* .stride = 4 so offset is guaranteed to be aligned */
|
||||||
|
+ __ioread32_copy(val, priv->base + offset, bytes / 4);
|
||||||
|
+
|
||||||
|
+ /* Ignore trailing bytes (there shouldn't be any) */
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int qoriq_efuse_probe(struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ struct nvmem_config config = {
|
||||||
|
+ .dev = &pdev->dev,
|
||||||
|
+ .read_only = true,
|
||||||
|
+ .reg_read = qoriq_efuse_read,
|
||||||
|
+ .stride = sizeof(u32),
|
||||||
|
+ .word_size = sizeof(u32),
|
||||||
|
+ .name = "qoriq_efuse_read",
|
||||||
|
+ .id = NVMEM_DEVID_AUTO,
|
||||||
|
+ .root_only = true,
|
||||||
|
+ };
|
||||||
|
+ struct qoriq_efuse_priv *priv;
|
||||||
|
+ struct nvmem_device *nvmem;
|
||||||
|
+ struct resource *res;
|
||||||
|
+
|
||||||
|
+ priv = devm_kzalloc(config.dev, sizeof(*priv), GFP_KERNEL);
|
||||||
|
+ if (!priv)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
+ if (IS_ERR(priv->base))
|
||||||
|
+ return PTR_ERR(priv->base);
|
||||||
|
+
|
||||||
|
+ config.size = resource_size(res);
|
||||||
|
+ config.priv = priv;
|
||||||
|
+ nvmem = devm_nvmem_register(config.dev, &config);
|
||||||
|
+
|
||||||
|
+ return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct of_device_id qoriq_efuse_of_match[] = {
|
||||||
|
+ { .compatible = "fsl,t1023-sfp", },
|
||||||
|
+ {/* sentinel */},
|
||||||
|
+};
|
||||||
|
+MODULE_DEVICE_TABLE(of, qoriq_efuse_of_match);
|
||||||
|
+
|
||||||
|
+static struct platform_driver qoriq_efuse_driver = {
|
||||||
|
+ .probe = qoriq_efuse_probe,
|
||||||
|
+ .driver = {
|
||||||
|
+ .name = "qoriq-efuse",
|
||||||
|
+ .of_match_table = qoriq_efuse_of_match,
|
||||||
|
+ },
|
||||||
|
+};
|
||||||
|
+module_platform_driver(qoriq_efuse_driver);
|
||||||
|
+
|
||||||
|
+MODULE_AUTHOR("Richard Alpe <richard.alpe@bit42.se>");
|
||||||
|
+MODULE_DESCRIPTION("NXP QorIQ Security Fuse Processor (SFP) Reader");
|
||||||
|
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,37 @@
|
|||||||
|
From 9d53d595f688c9837e88a919229cc61a165c7b9e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Diederik de Haas <didi.debian@cknow.org>
|
||||||
|
Date: Mon, 24 Jul 2023 13:36:22 +0200
|
||||||
|
Subject: [PATCH] nvmem: Kconfig: Fix typo "drive" -> "driver"
|
||||||
|
|
||||||
|
Fix typo where "driver" was meant instead of "drive".
|
||||||
|
While at it, also capitalize "OTP".
|
||||||
|
|
||||||
|
Signed-off-by: Diederik de Haas <didi.debian@cknow.org>
|
||||||
|
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/Kconfig | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/Kconfig
|
||||||
|
+++ b/drivers/nvmem/Kconfig
|
||||||
|
@@ -247,7 +247,7 @@ config NVMEM_ROCKCHIP_EFUSE
|
||||||
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
||||||
|
depends on HAS_IOMEM
|
||||||
|
help
|
||||||
|
- This is a simple drive to dump specified values of Rockchip SoC
|
||||||
|
+ This is a simple driver to dump specified values of Rockchip SoC
|
||||||
|
from eFuse, such as cpu-leakage.
|
||||||
|
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
@@ -258,8 +258,8 @@ config NVMEM_ROCKCHIP_OTP
|
||||||
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
||||||
|
depends on HAS_IOMEM
|
||||||
|
help
|
||||||
|
- This is a simple drive to dump specified values of Rockchip SoC
|
||||||
|
- from otp, such as cpu-leakage.
|
||||||
|
+ This is a simple driver to dump specified values of Rockchip SoC
|
||||||
|
+ from OTP, such as cpu-leakage.
|
||||||
|
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
will be called nvmem_rockchip_otp.
|
@ -0,0 +1,152 @@
|
|||||||
|
From 0a9ec38c47c1ca4528aa058e2b9ea61901a7e632 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Komal Bajaj <quic_kbajaj@quicinc.com>
|
||||||
|
Date: Tue, 1 Aug 2023 12:10:25 +0530
|
||||||
|
Subject: [PATCH] nvmem: sec-qfprom: Add Qualcomm secure QFPROM support
|
||||||
|
|
||||||
|
For some of the Qualcomm SoC's, it is possible that
|
||||||
|
some of the fuse regions or entire qfprom region is
|
||||||
|
protected from non-secure access. In such situations,
|
||||||
|
the OS will have to use secure calls to read the region.
|
||||||
|
With that motivation, add secure qfprom driver.
|
||||||
|
|
||||||
|
Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/Kconfig | 13 ++++++
|
||||||
|
drivers/nvmem/Makefile | 2 +
|
||||||
|
drivers/nvmem/sec-qfprom.c | 96 ++++++++++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 111 insertions(+)
|
||||||
|
create mode 100644 drivers/nvmem/sec-qfprom.c
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/Kconfig
|
||||||
|
+++ b/drivers/nvmem/Kconfig
|
||||||
|
@@ -226,6 +226,19 @@ config NVMEM_QCOM_QFPROM
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
will be called nvmem_qfprom.
|
||||||
|
|
||||||
|
+config NVMEM_QCOM_SEC_QFPROM
|
||||||
|
+ tristate "QCOM SECURE QFPROM Support"
|
||||||
|
+ depends on ARCH_QCOM || COMPILE_TEST
|
||||||
|
+ depends on HAS_IOMEM
|
||||||
|
+ depends on OF
|
||||||
|
+ select QCOM_SCM
|
||||||
|
+ help
|
||||||
|
+ Say y here to enable secure QFPROM support. The secure QFPROM provides access
|
||||||
|
+ functions for QFPROM data to rest of the drivers via nvmem interface.
|
||||||
|
+
|
||||||
|
+ This driver can also be built as a module. If so, the module will be called
|
||||||
|
+ nvmem_sec_qfprom.
|
||||||
|
+
|
||||||
|
config NVMEM_RAVE_SP_EEPROM
|
||||||
|
tristate "Rave SP EEPROM Support"
|
||||||
|
depends on RAVE_SP_CORE
|
||||||
|
--- a/drivers/nvmem/Makefile
|
||||||
|
+++ b/drivers/nvmem/Makefile
|
||||||
|
@@ -46,6 +46,8 @@ obj-$(CONFIG_NVMEM_NINTENDO_OTP) += nvme
|
||||||
|
nvmem-nintendo-otp-y := nintendo-otp.o
|
||||||
|
obj-$(CONFIG_NVMEM_QCOM_QFPROM) += nvmem_qfprom.o
|
||||||
|
nvmem_qfprom-y := qfprom.o
|
||||||
|
+obj-$(CONFIG_NVMEM_QCOM_SEC_QFPROM) += nvmem_sec_qfprom.o
|
||||||
|
+nvmem_sec_qfprom-y := sec-qfprom.o
|
||||||
|
obj-$(CONFIG_NVMEM_RAVE_SP_EEPROM) += nvmem-rave-sp-eeprom.o
|
||||||
|
nvmem-rave-sp-eeprom-y := rave-sp-eeprom.o
|
||||||
|
obj-$(CONFIG_NVMEM_RMEM) += nvmem-rmem.o
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/nvmem/sec-qfprom.c
|
||||||
|
@@ -0,0 +1,96 @@
|
||||||
|
+// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
+/*
|
||||||
|
+ * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <linux/firmware/qcom/qcom_scm.h>
|
||||||
|
+#include <linux/mod_devicetable.h>
|
||||||
|
+#include <linux/nvmem-provider.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+#include <linux/pm_runtime.h>
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct sec_qfprom - structure holding secure qfprom attributes
|
||||||
|
+ *
|
||||||
|
+ * @base: starting physical address for secure qfprom corrected address space.
|
||||||
|
+ * @dev: qfprom device structure.
|
||||||
|
+ */
|
||||||
|
+struct sec_qfprom {
|
||||||
|
+ phys_addr_t base;
|
||||||
|
+ struct device *dev;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int sec_qfprom_reg_read(void *context, unsigned int reg, void *_val, size_t bytes)
|
||||||
|
+{
|
||||||
|
+ struct sec_qfprom *priv = context;
|
||||||
|
+ unsigned int i;
|
||||||
|
+ u8 *val = _val;
|
||||||
|
+ u32 read_val;
|
||||||
|
+ u8 *tmp;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < bytes; i++, reg++) {
|
||||||
|
+ if (i == 0 || reg % 4 == 0) {
|
||||||
|
+ if (qcom_scm_io_readl(priv->base + (reg & ~3), &read_val)) {
|
||||||
|
+ dev_err(priv->dev, "Couldn't access fuse register\n");
|
||||||
|
+ return -EINVAL;
|
||||||
|
+ }
|
||||||
|
+ tmp = (u8 *)&read_val;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ val[i] = tmp[reg & 3];
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int sec_qfprom_probe(struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ struct nvmem_config econfig = {
|
||||||
|
+ .name = "sec-qfprom",
|
||||||
|
+ .stride = 1,
|
||||||
|
+ .word_size = 1,
|
||||||
|
+ .id = NVMEM_DEVID_AUTO,
|
||||||
|
+ .reg_read = sec_qfprom_reg_read,
|
||||||
|
+ };
|
||||||
|
+ struct device *dev = &pdev->dev;
|
||||||
|
+ struct nvmem_device *nvmem;
|
||||||
|
+ struct sec_qfprom *priv;
|
||||||
|
+ struct resource *res;
|
||||||
|
+
|
||||||
|
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||||
|
+ if (!priv)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
+ if (!res)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ priv->base = res->start;
|
||||||
|
+
|
||||||
|
+ econfig.size = resource_size(res);
|
||||||
|
+ econfig.dev = dev;
|
||||||
|
+ econfig.priv = priv;
|
||||||
|
+
|
||||||
|
+ priv->dev = dev;
|
||||||
|
+
|
||||||
|
+ nvmem = devm_nvmem_register(dev, &econfig);
|
||||||
|
+
|
||||||
|
+ return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct of_device_id sec_qfprom_of_match[] = {
|
||||||
|
+ { .compatible = "qcom,sec-qfprom" },
|
||||||
|
+ {/* sentinel */},
|
||||||
|
+};
|
||||||
|
+MODULE_DEVICE_TABLE(of, sec_qfprom_of_match);
|
||||||
|
+
|
||||||
|
+static struct platform_driver qfprom_driver = {
|
||||||
|
+ .probe = sec_qfprom_probe,
|
||||||
|
+ .driver = {
|
||||||
|
+ .name = "qcom_sec_qfprom",
|
||||||
|
+ .of_match_table = sec_qfprom_of_match,
|
||||||
|
+ },
|
||||||
|
+};
|
||||||
|
+module_platform_driver(qfprom_driver);
|
||||||
|
+MODULE_DESCRIPTION("Qualcomm Secure QFPROM driver");
|
||||||
|
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,30 @@
|
|||||||
|
From c32f2186acc9abb4d766361255d7ddf07d15eeb2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Atul Raut <rauji.raut@gmail.com>
|
||||||
|
Date: Sun, 30 Jul 2023 15:39:15 -0700
|
||||||
|
Subject: [PATCH] nvmem: u-boot-env:: Replace zero-length array with
|
||||||
|
DECLARE_FLEX_ARRAY() helper
|
||||||
|
|
||||||
|
We are moving toward replacing zero-length arrays with C99 flexible-array
|
||||||
|
members since they are deprecated. Therefore, the new DECLARE_FLEX_ARRAY()
|
||||||
|
helper macro should be used to replace the zero-length array declaration.
|
||||||
|
|
||||||
|
This fixes warnings such as:
|
||||||
|
./drivers/nvmem/u-boot-env.c:50:9-13: WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)
|
||||||
|
|
||||||
|
Signed-off-by: Atul Raut <rauji.raut@gmail.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/u-boot-env.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/u-boot-env.c
|
||||||
|
+++ b/drivers/nvmem/u-boot-env.c
|
||||||
|
@@ -47,7 +47,7 @@ struct u_boot_env_image_broadcom {
|
||||||
|
__le32 magic;
|
||||||
|
__le32 len;
|
||||||
|
__le32 crc32;
|
||||||
|
- uint8_t data[0];
|
||||||
|
+ DECLARE_FLEX_ARRAY(uint8_t, data);
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
static int u_boot_env_read(void *context, unsigned int offset, void *val,
|
@ -0,0 +1,40 @@
|
|||||||
|
From 104af6a5b199eb4dc7970d1304aef38ac5a6ed54 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:26 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Create all cells before adding the nvmem device
|
||||||
|
|
||||||
|
Let's pack all the cells creation in one place, so they are all created
|
||||||
|
before we add the nvmem device.
|
||||||
|
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/core.c | 10 +++++-----
|
||||||
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -998,17 +998,17 @@ struct nvmem_device *nvmem_register(cons
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
|
||||||
|
-
|
||||||
|
- rval = device_add(&nvmem->dev);
|
||||||
|
+ rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
|
+ rval = nvmem_add_cells_from_layout(nvmem);
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- rval = nvmem_add_cells_from_layout(nvmem);
|
||||||
|
+ dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
|
||||||
|
+
|
||||||
|
+ rval = device_add(&nvmem->dev);
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
@ -0,0 +1,35 @@
|
|||||||
|
From 6c7f48ea2e663b679aa8e60d8d8e1e6306a644f9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:27 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Return NULL when no nvmem layout is found
|
||||||
|
|
||||||
|
Currently, of_nvmem_layout_get_container() returns NULL on error, or an
|
||||||
|
error pointer if either CONFIG_NVMEM or CONFIG_OF is turned off. We
|
||||||
|
should likely avoid this kind of mix for two reasons: to clarify the
|
||||||
|
intend and anyway fix the !CONFIG_OF which will likely always if we use
|
||||||
|
this helper somewhere else. Let's just return NULL when no layout is
|
||||||
|
found, we don't need an error value here.
|
||||||
|
|
||||||
|
Link: https://staticthinking.wordpress.com/2022/08/01/mixing-error-pointers-and-null/
|
||||||
|
Fixes: 266570f496b9 ("nvmem: core: introduce NVMEM layouts")
|
||||||
|
Reported-by: kernel test robot <lkp@intel.com>
|
||||||
|
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
|
||||||
|
Closes: https://lore.kernel.org/r/202308030002.DnSFOrMB-lkp@intel.com/
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
include/linux/nvmem-consumer.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/include/linux/nvmem-consumer.h
|
||||||
|
+++ b/include/linux/nvmem-consumer.h
|
||||||
|
@@ -256,7 +256,7 @@ static inline struct nvmem_device *of_nv
|
||||||
|
static inline struct device_node *
|
||||||
|
of_nvmem_layout_get_container(struct nvmem_device *nvmem)
|
||||||
|
{
|
||||||
|
- return ERR_PTR(-EOPNOTSUPP);
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_NVMEM && CONFIG_OF */
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From b8257f61b4ddac6d7d0e19a5a4e8b07afb3b4ed3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:28 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Do not open-code existing functions
|
||||||
|
|
||||||
|
Use of_nvmem_layout_get_container() instead of hardcoding it.
|
||||||
|
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/core.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -786,10 +786,10 @@ EXPORT_SYMBOL_GPL(nvmem_layout_unregiste
|
||||||
|
|
||||||
|
static struct nvmem_layout *nvmem_layout_get(struct nvmem_device *nvmem)
|
||||||
|
{
|
||||||
|
- struct device_node *layout_np, *np = nvmem->dev.of_node;
|
||||||
|
+ struct device_node *layout_np;
|
||||||
|
struct nvmem_layout *l, *layout = ERR_PTR(-EPROBE_DEFER);
|
||||||
|
|
||||||
|
- layout_np = of_get_child_by_name(np, "nvmem-layout");
|
||||||
|
+ layout_np = of_nvmem_layout_get_container(nvmem);
|
||||||
|
if (!layout_np)
|
||||||
|
return NULL;
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 0991afbe4b1805e7f0113ef10d7c5f0698a739e4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:29 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Notify when a new layout is registered
|
||||||
|
|
||||||
|
Tell listeners a new layout was introduced and is now available.
|
||||||
|
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/core.c | 4 ++++
|
||||||
|
include/linux/nvmem-consumer.h | 2 ++
|
||||||
|
2 files changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -772,12 +772,16 @@ int __nvmem_layout_register(struct nvmem
|
||||||
|
list_add(&layout->node, &nvmem_layouts);
|
||||||
|
spin_unlock(&nvmem_layout_lock);
|
||||||
|
|
||||||
|
+ blocking_notifier_call_chain(&nvmem_notifier, NVMEM_LAYOUT_ADD, layout);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__nvmem_layout_register);
|
||||||
|
|
||||||
|
void nvmem_layout_unregister(struct nvmem_layout *layout)
|
||||||
|
{
|
||||||
|
+ blocking_notifier_call_chain(&nvmem_notifier, NVMEM_LAYOUT_REMOVE, layout);
|
||||||
|
+
|
||||||
|
spin_lock(&nvmem_layout_lock);
|
||||||
|
list_del(&layout->node);
|
||||||
|
spin_unlock(&nvmem_layout_lock);
|
||||||
|
--- a/include/linux/nvmem-consumer.h
|
||||||
|
+++ b/include/linux/nvmem-consumer.h
|
||||||
|
@@ -43,6 +43,8 @@ enum {
|
||||||
|
NVMEM_REMOVE,
|
||||||
|
NVMEM_CELL_ADD,
|
||||||
|
NVMEM_CELL_REMOVE,
|
||||||
|
+ NVMEM_LAYOUT_ADD,
|
||||||
|
+ NVMEM_LAYOUT_REMOVE,
|
||||||
|
};
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_NVMEM)
|
@ -0,0 +1,36 @@
|
|||||||
|
From 9ccfcbeb8f32ff89e99b36cb9cdebaa0d1b44ed1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:24 +0100
|
||||||
|
Subject: [PATCH] nvmem: sunxi_sid: Convert to devm_platform_ioremap_resource()
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() to simplify code.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-3-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/sunxi_sid.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/sunxi_sid.c
|
||||||
|
+++ b/drivers/nvmem/sunxi_sid.c
|
||||||
|
@@ -125,7 +125,6 @@ static int sun8i_sid_read_by_reg(void *c
|
||||||
|
static int sunxi_sid_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
- struct resource *res;
|
||||||
|
struct nvmem_config *nvmem_cfg;
|
||||||
|
struct nvmem_device *nvmem;
|
||||||
|
struct sunxi_sid *sid;
|
||||||
|
@@ -142,8 +141,7 @@ static int sunxi_sid_probe(struct platfo
|
||||||
|
return -EINVAL;
|
||||||
|
sid->value_offset = cfg->value_offset;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- sid->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ sid->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
|
if (IS_ERR(sid->base))
|
||||||
|
return PTR_ERR(sid->base);
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From cfadd0e7d9225566f320bc4dc716682be910be6c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:25 +0100
|
||||||
|
Subject: [PATCH] nvmem: brcm_nvram: Use
|
||||||
|
devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-4-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/brcm_nvram.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/brcm_nvram.c
|
||||||
|
+++ b/drivers/nvmem/brcm_nvram.c
|
||||||
|
@@ -159,8 +159,7 @@ static int brcm_nvram_probe(struct platf
|
||||||
|
return -ENOMEM;
|
||||||
|
priv->dev = dev;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->base))
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 0b49178e2b6b4aac3c7fa3ce8d8c02208a13b988 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:26 +0100
|
||||||
|
Subject: [PATCH] nvmem: lpc18xx_otp: Convert to
|
||||||
|
devm_platform_ioremap_resource()
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() to simplify code.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-5-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/lpc18xx_otp.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/lpc18xx_otp.c
|
||||||
|
+++ b/drivers/nvmem/lpc18xx_otp.c
|
||||||
|
@@ -68,14 +68,12 @@ static int lpc18xx_otp_probe(struct plat
|
||||||
|
{
|
||||||
|
struct nvmem_device *nvmem;
|
||||||
|
struct lpc18xx_otp *otp;
|
||||||
|
- struct resource *res;
|
||||||
|
|
||||||
|
otp = devm_kzalloc(&pdev->dev, sizeof(*otp), GFP_KERNEL);
|
||||||
|
if (!otp)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- otp->base = devm_ioremap_resource(&pdev->dev, res);
|
||||||
|
+ otp->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
|
if (IS_ERR(otp->base))
|
||||||
|
return PTR_ERR(otp->base);
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 0a223a097709b99a0ba738d6be5b4f52c04ffb64 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:27 +0100
|
||||||
|
Subject: [PATCH] nvmem: meson-mx-efuse: Convert to
|
||||||
|
devm_platform_ioremap_resource()
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() to simplify code.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-6-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/meson-mx-efuse.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
+++ b/drivers/nvmem/meson-mx-efuse.c
|
||||||
|
@@ -194,7 +194,6 @@ static int meson_mx_efuse_probe(struct p
|
||||||
|
{
|
||||||
|
const struct meson_mx_efuse_platform_data *drvdata;
|
||||||
|
struct meson_mx_efuse *efuse;
|
||||||
|
- struct resource *res;
|
||||||
|
|
||||||
|
drvdata = of_device_get_match_data(&pdev->dev);
|
||||||
|
if (!drvdata)
|
||||||
|
@@ -204,8 +203,7 @@ static int meson_mx_efuse_probe(struct p
|
||||||
|
if (!efuse)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- efuse->base = devm_ioremap_resource(&pdev->dev, res);
|
||||||
|
+ efuse->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
|
if (IS_ERR(efuse->base))
|
||||||
|
return PTR_ERR(efuse->base);
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 94904db28db49ac8fbb2a273d25156db26a3a985 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:28 +0100
|
||||||
|
Subject: [PATCH] nvmem: rockchip-efuse: Use
|
||||||
|
devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-7-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/rockchip-efuse.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/rockchip-efuse.c
|
||||||
|
+++ b/drivers/nvmem/rockchip-efuse.c
|
||||||
|
@@ -267,8 +267,7 @@ static int rockchip_efuse_probe(struct p
|
||||||
|
if (!efuse)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- efuse->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ efuse->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(efuse->base))
|
||||||
|
return PTR_ERR(efuse->base);
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 0a4a8c0d238fec1fa4b85591524ef42ad261cb97 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:29 +0100
|
||||||
|
Subject: [PATCH] nvmem: stm32-romem: Use
|
||||||
|
devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-8-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/stm32-romem.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/stm32-romem.c
|
||||||
|
+++ b/drivers/nvmem/stm32-romem.c
|
||||||
|
@@ -196,8 +196,7 @@ static int stm32_romem_probe(struct plat
|
||||||
|
if (!priv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->base))
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
From 0bc0d6dc2a9a05ae6729b4622f09782d9f230815 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:30 +0100
|
||||||
|
Subject: [PATCH] nvmem: qfprom: do some cleanup
|
||||||
|
|
||||||
|
Use devm_platform_ioremap_resource() and
|
||||||
|
devm_platform_get_and_ioremap_resource() to simplify code.
|
||||||
|
BTW convert to use dev_err_probe() instead of open it.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-9-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/qfprom.c | 17 +++++------------
|
||||||
|
1 file changed, 5 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/qfprom.c
|
||||||
|
+++ b/drivers/nvmem/qfprom.c
|
||||||
|
@@ -374,8 +374,7 @@ static int qfprom_probe(struct platform_
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* The corrected section is always provided */
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->qfpcorrected = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->qfpcorrected = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->qfpcorrected))
|
||||||
|
return PTR_ERR(priv->qfpcorrected);
|
||||||
|
|
||||||
|
@@ -402,12 +401,10 @@ static int qfprom_probe(struct platform_
|
||||||
|
priv->qfpraw = devm_ioremap_resource(dev, res);
|
||||||
|
if (IS_ERR(priv->qfpraw))
|
||||||
|
return PTR_ERR(priv->qfpraw);
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
|
||||||
|
- priv->qfpconf = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->qfpconf = devm_platform_ioremap_resource(pdev, 2);
|
||||||
|
if (IS_ERR(priv->qfpconf))
|
||||||
|
return PTR_ERR(priv->qfpconf);
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
|
||||||
|
- priv->qfpsecurity = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->qfpsecurity = devm_platform_ioremap_resource(pdev, 3);
|
||||||
|
if (IS_ERR(priv->qfpsecurity))
|
||||||
|
return PTR_ERR(priv->qfpsecurity);
|
||||||
|
|
||||||
|
@@ -427,12 +424,8 @@ static int qfprom_probe(struct platform_
|
||||||
|
return PTR_ERR(priv->vcc);
|
||||||
|
|
||||||
|
priv->secclk = devm_clk_get(dev, "core");
|
||||||
|
- if (IS_ERR(priv->secclk)) {
|
||||||
|
- ret = PTR_ERR(priv->secclk);
|
||||||
|
- if (ret != -EPROBE_DEFER)
|
||||||
|
- dev_err(dev, "Error getting clock: %d\n", ret);
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
+ if (IS_ERR(priv->secclk))
|
||||||
|
+ return dev_err_probe(dev, PTR_ERR(priv->secclk), "Error getting clock\n");
|
||||||
|
|
||||||
|
/* Only enable writing if we have SoC data. */
|
||||||
|
if (priv->soc_data)
|
@ -0,0 +1,29 @@
|
|||||||
|
From 6ac41c556e22a0d7d267c9b9d48681d73af4b368 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Date: Wed, 23 Aug 2023 14:27:31 +0100
|
||||||
|
Subject: [PATCH] nvmem: uniphier: Use devm_platform_get_and_ioremap_resource()
|
||||||
|
|
||||||
|
Convert platform_get_resource(), devm_ioremap_resource() to a single
|
||||||
|
call to devm_platform_get_and_ioremap_resource(), as this is exactly
|
||||||
|
what this function does.
|
||||||
|
|
||||||
|
Signed-off-by: Yangtao Li <frank.li@vivo.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230823132744.350618-10-srinivas.kandagatla@linaro.org
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/uniphier-efuse.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/uniphier-efuse.c
|
||||||
|
+++ b/drivers/nvmem/uniphier-efuse.c
|
||||||
|
@@ -41,8 +41,7 @@ static int uniphier_efuse_probe(struct p
|
||||||
|
if (!priv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
- priv->base = devm_ioremap_resource(dev, res);
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
if (IS_ERR(priv->base))
|
||||||
|
return PTR_ERR(priv->base);
|
||||||
|
|
@ -0,0 +1,133 @@
|
|||||||
|
From c8efcf7a86ebf2ff48584d270b3070a7075bc345 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Richard Alpe <richard@bit42.se>
|
||||||
|
Date: Mon, 10 Apr 2023 10:20:51 +0200
|
||||||
|
Subject: [PATCH] nvmem: add new NXP QorIQ eFuse driver
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Add SFP (Security Fuse Processor) read support for NXP (Freescale)
|
||||||
|
QorIQ series SOC's.
|
||||||
|
|
||||||
|
This patch adds support for the T1023 SOC using the SFP offset from
|
||||||
|
the existing T1023 device tree. In theory this should also work for
|
||||||
|
T1024, T1014 and T1013 which uses the same SFP base offset.
|
||||||
|
|
||||||
|
Signed-off-by: Richard Alpe <richard@bit42.se>
|
||||||
|
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/Kconfig | 12 ++++++
|
||||||
|
drivers/nvmem/Makefile | 2 +
|
||||||
|
drivers/nvmem/qoriq-efuse.c | 78 +++++++++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 92 insertions(+)
|
||||||
|
create mode 100644 drivers/nvmem/qoriq-efuse.c
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/Kconfig
|
||||||
|
+++ b/drivers/nvmem/Kconfig
|
||||||
|
@@ -392,4 +392,16 @@ config NVMEM_ZYNQMP
|
||||||
|
|
||||||
|
If sure, say yes. If unsure, say no.
|
||||||
|
|
||||||
|
+config NVMEM_QORIQ_EFUSE
|
||||||
|
+ tristate "NXP QorIQ eFuse support"
|
||||||
|
+ depends on PPC_85xx || COMPILE_TEST
|
||||||
|
+ depends on HAS_IOMEM
|
||||||
|
+ help
|
||||||
|
+ This driver provides read support for the eFuses (SFP) on NXP QorIQ
|
||||||
|
+ series SoC's. This includes secure boot settings, the globally unique
|
||||||
|
+ NXP ID 'FUIDR' and the OEM unique ID 'OUIDR'.
|
||||||
|
+
|
||||||
|
+ This driver can also be built as a module. If so, the module
|
||||||
|
+ will be called nvmem_qoriq_efuse.
|
||||||
|
+
|
||||||
|
endif
|
||||||
|
--- a/drivers/nvmem/Makefile
|
||||||
|
+++ b/drivers/nvmem/Makefile
|
||||||
|
@@ -77,3 +77,5 @@ obj-$(CONFIG_NVMEM_VF610_OCOTP) += nvme
|
||||||
|
nvmem-vf610-ocotp-y := vf610-ocotp.o
|
||||||
|
obj-$(CONFIG_NVMEM_ZYNQMP) += nvmem_zynqmp_nvmem.o
|
||||||
|
nvmem_zynqmp_nvmem-y := zynqmp_nvmem.o
|
||||||
|
+obj-$(CONFIG_NVMEM_QORIQ_EFUSE) += nvmem-qoriq-efuse.o
|
||||||
|
+nvmem-qoriq-efuse-y := qoriq-efuse.o
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/nvmem/qoriq-efuse.c
|
||||||
|
@@ -0,0 +1,78 @@
|
||||||
|
+// SPDX-License-Identifier: GPL-2.0
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2023 Westermo Network Technologies AB
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <linux/device.h>
|
||||||
|
+#include <linux/io.h>
|
||||||
|
+#include <linux/module.h>
|
||||||
|
+#include <linux/mod_devicetable.h>
|
||||||
|
+#include <linux/nvmem-provider.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+
|
||||||
|
+struct qoriq_efuse_priv {
|
||||||
|
+ void __iomem *base;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int qoriq_efuse_read(void *context, unsigned int offset, void *val,
|
||||||
|
+ size_t bytes)
|
||||||
|
+{
|
||||||
|
+ struct qoriq_efuse_priv *priv = context;
|
||||||
|
+
|
||||||
|
+ /* .stride = 4 so offset is guaranteed to be aligned */
|
||||||
|
+ __ioread32_copy(val, priv->base + offset, bytes / 4);
|
||||||
|
+
|
||||||
|
+ /* Ignore trailing bytes (there shouldn't be any) */
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int qoriq_efuse_probe(struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ struct nvmem_config config = {
|
||||||
|
+ .dev = &pdev->dev,
|
||||||
|
+ .read_only = true,
|
||||||
|
+ .reg_read = qoriq_efuse_read,
|
||||||
|
+ .stride = sizeof(u32),
|
||||||
|
+ .word_size = sizeof(u32),
|
||||||
|
+ .name = "qoriq_efuse_read",
|
||||||
|
+ .id = NVMEM_DEVID_AUTO,
|
||||||
|
+ .root_only = true,
|
||||||
|
+ };
|
||||||
|
+ struct qoriq_efuse_priv *priv;
|
||||||
|
+ struct nvmem_device *nvmem;
|
||||||
|
+ struct resource *res;
|
||||||
|
+
|
||||||
|
+ priv = devm_kzalloc(config.dev, sizeof(*priv), GFP_KERNEL);
|
||||||
|
+ if (!priv)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
|
+ if (IS_ERR(priv->base))
|
||||||
|
+ return PTR_ERR(priv->base);
|
||||||
|
+
|
||||||
|
+ config.size = resource_size(res);
|
||||||
|
+ config.priv = priv;
|
||||||
|
+ nvmem = devm_nvmem_register(config.dev, &config);
|
||||||
|
+
|
||||||
|
+ return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct of_device_id qoriq_efuse_of_match[] = {
|
||||||
|
+ { .compatible = "fsl,t1023-sfp", },
|
||||||
|
+ {/* sentinel */},
|
||||||
|
+};
|
||||||
|
+MODULE_DEVICE_TABLE(of, qoriq_efuse_of_match);
|
||||||
|
+
|
||||||
|
+static struct platform_driver qoriq_efuse_driver = {
|
||||||
|
+ .probe = qoriq_efuse_probe,
|
||||||
|
+ .driver = {
|
||||||
|
+ .name = "qoriq-efuse",
|
||||||
|
+ .of_match_table = qoriq_efuse_of_match,
|
||||||
|
+ },
|
||||||
|
+};
|
||||||
|
+module_platform_driver(qoriq_efuse_driver);
|
||||||
|
+
|
||||||
|
+MODULE_AUTHOR("Richard Alpe <richard.alpe@bit42.se>");
|
||||||
|
+MODULE_DESCRIPTION("NXP QorIQ Security Fuse Processor (SFP) Reader");
|
||||||
|
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,37 @@
|
|||||||
|
From 9d53d595f688c9837e88a919229cc61a165c7b9e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Diederik de Haas <didi.debian@cknow.org>
|
||||||
|
Date: Mon, 24 Jul 2023 13:36:22 +0200
|
||||||
|
Subject: [PATCH] nvmem: Kconfig: Fix typo "drive" -> "driver"
|
||||||
|
|
||||||
|
Fix typo where "driver" was meant instead of "drive".
|
||||||
|
While at it, also capitalize "OTP".
|
||||||
|
|
||||||
|
Signed-off-by: Diederik de Haas <didi.debian@cknow.org>
|
||||||
|
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/Kconfig | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/Kconfig
|
||||||
|
+++ b/drivers/nvmem/Kconfig
|
||||||
|
@@ -247,7 +247,7 @@ config NVMEM_ROCKCHIP_EFUSE
|
||||||
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
||||||
|
depends on HAS_IOMEM
|
||||||
|
help
|
||||||
|
- This is a simple drive to dump specified values of Rockchip SoC
|
||||||
|
+ This is a simple driver to dump specified values of Rockchip SoC
|
||||||
|
from eFuse, such as cpu-leakage.
|
||||||
|
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
@@ -258,8 +258,8 @@ config NVMEM_ROCKCHIP_OTP
|
||||||
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
||||||
|
depends on HAS_IOMEM
|
||||||
|
help
|
||||||
|
- This is a simple drive to dump specified values of Rockchip SoC
|
||||||
|
- from otp, such as cpu-leakage.
|
||||||
|
+ This is a simple driver to dump specified values of Rockchip SoC
|
||||||
|
+ from OTP, such as cpu-leakage.
|
||||||
|
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
will be called nvmem_rockchip_otp.
|
@ -0,0 +1,152 @@
|
|||||||
|
From 0a9ec38c47c1ca4528aa058e2b9ea61901a7e632 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Komal Bajaj <quic_kbajaj@quicinc.com>
|
||||||
|
Date: Tue, 1 Aug 2023 12:10:25 +0530
|
||||||
|
Subject: [PATCH] nvmem: sec-qfprom: Add Qualcomm secure QFPROM support
|
||||||
|
|
||||||
|
For some of the Qualcomm SoC's, it is possible that
|
||||||
|
some of the fuse regions or entire qfprom region is
|
||||||
|
protected from non-secure access. In such situations,
|
||||||
|
the OS will have to use secure calls to read the region.
|
||||||
|
With that motivation, add secure qfprom driver.
|
||||||
|
|
||||||
|
Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/Kconfig | 13 ++++++
|
||||||
|
drivers/nvmem/Makefile | 2 +
|
||||||
|
drivers/nvmem/sec-qfprom.c | 96 ++++++++++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 111 insertions(+)
|
||||||
|
create mode 100644 drivers/nvmem/sec-qfprom.c
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/Kconfig
|
||||||
|
+++ b/drivers/nvmem/Kconfig
|
||||||
|
@@ -226,6 +226,19 @@ config NVMEM_QCOM_QFPROM
|
||||||
|
This driver can also be built as a module. If so, the module
|
||||||
|
will be called nvmem_qfprom.
|
||||||
|
|
||||||
|
+config NVMEM_QCOM_SEC_QFPROM
|
||||||
|
+ tristate "QCOM SECURE QFPROM Support"
|
||||||
|
+ depends on ARCH_QCOM || COMPILE_TEST
|
||||||
|
+ depends on HAS_IOMEM
|
||||||
|
+ depends on OF
|
||||||
|
+ select QCOM_SCM
|
||||||
|
+ help
|
||||||
|
+ Say y here to enable secure QFPROM support. The secure QFPROM provides access
|
||||||
|
+ functions for QFPROM data to rest of the drivers via nvmem interface.
|
||||||
|
+
|
||||||
|
+ This driver can also be built as a module. If so, the module will be called
|
||||||
|
+ nvmem_sec_qfprom.
|
||||||
|
+
|
||||||
|
config NVMEM_RAVE_SP_EEPROM
|
||||||
|
tristate "Rave SP EEPROM Support"
|
||||||
|
depends on RAVE_SP_CORE
|
||||||
|
--- a/drivers/nvmem/Makefile
|
||||||
|
+++ b/drivers/nvmem/Makefile
|
||||||
|
@@ -46,6 +46,8 @@ obj-$(CONFIG_NVMEM_NINTENDO_OTP) += nvme
|
||||||
|
nvmem-nintendo-otp-y := nintendo-otp.o
|
||||||
|
obj-$(CONFIG_NVMEM_QCOM_QFPROM) += nvmem_qfprom.o
|
||||||
|
nvmem_qfprom-y := qfprom.o
|
||||||
|
+obj-$(CONFIG_NVMEM_QCOM_SEC_QFPROM) += nvmem_sec_qfprom.o
|
||||||
|
+nvmem_sec_qfprom-y := sec-qfprom.o
|
||||||
|
obj-$(CONFIG_NVMEM_RAVE_SP_EEPROM) += nvmem-rave-sp-eeprom.o
|
||||||
|
nvmem-rave-sp-eeprom-y := rave-sp-eeprom.o
|
||||||
|
obj-$(CONFIG_NVMEM_RMEM) += nvmem-rmem.o
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/nvmem/sec-qfprom.c
|
||||||
|
@@ -0,0 +1,96 @@
|
||||||
|
+// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
+/*
|
||||||
|
+ * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <linux/firmware/qcom/qcom_scm.h>
|
||||||
|
+#include <linux/mod_devicetable.h>
|
||||||
|
+#include <linux/nvmem-provider.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+#include <linux/pm_runtime.h>
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct sec_qfprom - structure holding secure qfprom attributes
|
||||||
|
+ *
|
||||||
|
+ * @base: starting physical address for secure qfprom corrected address space.
|
||||||
|
+ * @dev: qfprom device structure.
|
||||||
|
+ */
|
||||||
|
+struct sec_qfprom {
|
||||||
|
+ phys_addr_t base;
|
||||||
|
+ struct device *dev;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int sec_qfprom_reg_read(void *context, unsigned int reg, void *_val, size_t bytes)
|
||||||
|
+{
|
||||||
|
+ struct sec_qfprom *priv = context;
|
||||||
|
+ unsigned int i;
|
||||||
|
+ u8 *val = _val;
|
||||||
|
+ u32 read_val;
|
||||||
|
+ u8 *tmp;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < bytes; i++, reg++) {
|
||||||
|
+ if (i == 0 || reg % 4 == 0) {
|
||||||
|
+ if (qcom_scm_io_readl(priv->base + (reg & ~3), &read_val)) {
|
||||||
|
+ dev_err(priv->dev, "Couldn't access fuse register\n");
|
||||||
|
+ return -EINVAL;
|
||||||
|
+ }
|
||||||
|
+ tmp = (u8 *)&read_val;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ val[i] = tmp[reg & 3];
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int sec_qfprom_probe(struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ struct nvmem_config econfig = {
|
||||||
|
+ .name = "sec-qfprom",
|
||||||
|
+ .stride = 1,
|
||||||
|
+ .word_size = 1,
|
||||||
|
+ .id = NVMEM_DEVID_AUTO,
|
||||||
|
+ .reg_read = sec_qfprom_reg_read,
|
||||||
|
+ };
|
||||||
|
+ struct device *dev = &pdev->dev;
|
||||||
|
+ struct nvmem_device *nvmem;
|
||||||
|
+ struct sec_qfprom *priv;
|
||||||
|
+ struct resource *res;
|
||||||
|
+
|
||||||
|
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||||
|
+ if (!priv)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
+ if (!res)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ priv->base = res->start;
|
||||||
|
+
|
||||||
|
+ econfig.size = resource_size(res);
|
||||||
|
+ econfig.dev = dev;
|
||||||
|
+ econfig.priv = priv;
|
||||||
|
+
|
||||||
|
+ priv->dev = dev;
|
||||||
|
+
|
||||||
|
+ nvmem = devm_nvmem_register(dev, &econfig);
|
||||||
|
+
|
||||||
|
+ return PTR_ERR_OR_ZERO(nvmem);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct of_device_id sec_qfprom_of_match[] = {
|
||||||
|
+ { .compatible = "qcom,sec-qfprom" },
|
||||||
|
+ {/* sentinel */},
|
||||||
|
+};
|
||||||
|
+MODULE_DEVICE_TABLE(of, sec_qfprom_of_match);
|
||||||
|
+
|
||||||
|
+static struct platform_driver qfprom_driver = {
|
||||||
|
+ .probe = sec_qfprom_probe,
|
||||||
|
+ .driver = {
|
||||||
|
+ .name = "qcom_sec_qfprom",
|
||||||
|
+ .of_match_table = sec_qfprom_of_match,
|
||||||
|
+ },
|
||||||
|
+};
|
||||||
|
+module_platform_driver(qfprom_driver);
|
||||||
|
+MODULE_DESCRIPTION("Qualcomm Secure QFPROM driver");
|
||||||
|
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,30 @@
|
|||||||
|
From c32f2186acc9abb4d766361255d7ddf07d15eeb2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Atul Raut <rauji.raut@gmail.com>
|
||||||
|
Date: Sun, 30 Jul 2023 15:39:15 -0700
|
||||||
|
Subject: [PATCH] nvmem: u-boot-env:: Replace zero-length array with
|
||||||
|
DECLARE_FLEX_ARRAY() helper
|
||||||
|
|
||||||
|
We are moving toward replacing zero-length arrays with C99 flexible-array
|
||||||
|
members since they are deprecated. Therefore, the new DECLARE_FLEX_ARRAY()
|
||||||
|
helper macro should be used to replace the zero-length array declaration.
|
||||||
|
|
||||||
|
This fixes warnings such as:
|
||||||
|
./drivers/nvmem/u-boot-env.c:50:9-13: WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)
|
||||||
|
|
||||||
|
Signed-off-by: Atul Raut <rauji.raut@gmail.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/u-boot-env.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/u-boot-env.c
|
||||||
|
+++ b/drivers/nvmem/u-boot-env.c
|
||||||
|
@@ -47,7 +47,7 @@ struct u_boot_env_image_broadcom {
|
||||||
|
__le32 magic;
|
||||||
|
__le32 len;
|
||||||
|
__le32 crc32;
|
||||||
|
- uint8_t data[0];
|
||||||
|
+ DECLARE_FLEX_ARRAY(uint8_t, data);
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
static int u_boot_env_read(void *context, unsigned int offset, void *val,
|
@ -0,0 +1,40 @@
|
|||||||
|
From 104af6a5b199eb4dc7970d1304aef38ac5a6ed54 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:26 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Create all cells before adding the nvmem device
|
||||||
|
|
||||||
|
Let's pack all the cells creation in one place, so they are all created
|
||||||
|
before we add the nvmem device.
|
||||||
|
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/core.c | 10 +++++-----
|
||||||
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -998,17 +998,17 @@ struct nvmem_device *nvmem_register(cons
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
|
||||||
|
-
|
||||||
|
- rval = device_add(&nvmem->dev);
|
||||||
|
+ rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||||
|
+ rval = nvmem_add_cells_from_layout(nvmem);
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
||||||
|
- rval = nvmem_add_cells_from_layout(nvmem);
|
||||||
|
+ dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
|
||||||
|
+
|
||||||
|
+ rval = device_add(&nvmem->dev);
|
||||||
|
if (rval)
|
||||||
|
goto err_remove_cells;
|
||||||
|
|
@ -0,0 +1,35 @@
|
|||||||
|
From 6c7f48ea2e663b679aa8e60d8d8e1e6306a644f9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:27 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Return NULL when no nvmem layout is found
|
||||||
|
|
||||||
|
Currently, of_nvmem_layout_get_container() returns NULL on error, or an
|
||||||
|
error pointer if either CONFIG_NVMEM or CONFIG_OF is turned off. We
|
||||||
|
should likely avoid this kind of mix for two reasons: to clarify the
|
||||||
|
intend and anyway fix the !CONFIG_OF which will likely always if we use
|
||||||
|
this helper somewhere else. Let's just return NULL when no layout is
|
||||||
|
found, we don't need an error value here.
|
||||||
|
|
||||||
|
Link: https://staticthinking.wordpress.com/2022/08/01/mixing-error-pointers-and-null/
|
||||||
|
Fixes: 266570f496b9 ("nvmem: core: introduce NVMEM layouts")
|
||||||
|
Reported-by: kernel test robot <lkp@intel.com>
|
||||||
|
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
|
||||||
|
Closes: https://lore.kernel.org/r/202308030002.DnSFOrMB-lkp@intel.com/
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
include/linux/nvmem-consumer.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/include/linux/nvmem-consumer.h
|
||||||
|
+++ b/include/linux/nvmem-consumer.h
|
||||||
|
@@ -256,7 +256,7 @@ static inline struct nvmem_device *of_nv
|
||||||
|
static inline struct device_node *
|
||||||
|
of_nvmem_layout_get_container(struct nvmem_device *nvmem)
|
||||||
|
{
|
||||||
|
- return ERR_PTR(-EOPNOTSUPP);
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_NVMEM && CONFIG_OF */
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From b8257f61b4ddac6d7d0e19a5a4e8b07afb3b4ed3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:28 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Do not open-code existing functions
|
||||||
|
|
||||||
|
Use of_nvmem_layout_get_container() instead of hardcoding it.
|
||||||
|
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/core.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -786,10 +786,10 @@ EXPORT_SYMBOL_GPL(nvmem_layout_unregiste
|
||||||
|
|
||||||
|
static struct nvmem_layout *nvmem_layout_get(struct nvmem_device *nvmem)
|
||||||
|
{
|
||||||
|
- struct device_node *layout_np, *np = nvmem->dev.of_node;
|
||||||
|
+ struct device_node *layout_np;
|
||||||
|
struct nvmem_layout *l, *layout = ERR_PTR(-EPROBE_DEFER);
|
||||||
|
|
||||||
|
- layout_np = of_get_child_by_name(np, "nvmem-layout");
|
||||||
|
+ layout_np = of_nvmem_layout_get_container(nvmem);
|
||||||
|
if (!layout_np)
|
||||||
|
return NULL;
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 0991afbe4b1805e7f0113ef10d7c5f0698a739e4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Date: Tue, 8 Aug 2023 08:29:29 +0200
|
||||||
|
Subject: [PATCH] nvmem: core: Notify when a new layout is registered
|
||||||
|
|
||||||
|
Tell listeners a new layout was introduced and is now available.
|
||||||
|
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
---
|
||||||
|
drivers/nvmem/core.c | 4 ++++
|
||||||
|
include/linux/nvmem-consumer.h | 2 ++
|
||||||
|
2 files changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/nvmem/core.c
|
||||||
|
+++ b/drivers/nvmem/core.c
|
||||||
|
@@ -772,12 +772,16 @@ int __nvmem_layout_register(struct nvmem
|
||||||
|
list_add(&layout->node, &nvmem_layouts);
|
||||||
|
spin_unlock(&nvmem_layout_lock);
|
||||||
|
|
||||||
|
+ blocking_notifier_call_chain(&nvmem_notifier, NVMEM_LAYOUT_ADD, layout);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__nvmem_layout_register);
|
||||||
|
|
||||||
|
void nvmem_layout_unregister(struct nvmem_layout *layout)
|
||||||
|
{
|
||||||
|
+ blocking_notifier_call_chain(&nvmem_notifier, NVMEM_LAYOUT_REMOVE, layout);
|
||||||
|
+
|
||||||
|
spin_lock(&nvmem_layout_lock);
|
||||||
|
list_del(&layout->node);
|
||||||
|
spin_unlock(&nvmem_layout_lock);
|
||||||
|
--- a/include/linux/nvmem-consumer.h
|
||||||
|
+++ b/include/linux/nvmem-consumer.h
|
||||||
|
@@ -43,6 +43,8 @@ enum {
|
||||||
|
NVMEM_REMOVE,
|
||||||
|
NVMEM_CELL_ADD,
|
||||||
|
NVMEM_CELL_REMOVE,
|
||||||
|
+ NVMEM_LAYOUT_ADD,
|
||||||
|
+ NVMEM_LAYOUT_REMOVE,
|
||||||
|
};
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_NVMEM)
|
@ -18,7 +18,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|||||||
|
|
||||||
--- a/drivers/nvmem/core.c
|
--- a/drivers/nvmem/core.c
|
||||||
+++ b/drivers/nvmem/core.c
|
+++ b/drivers/nvmem/core.c
|
||||||
@@ -794,6 +794,19 @@ static struct nvmem_layout *nvmem_layout
|
@@ -798,6 +798,19 @@ static struct nvmem_layout *nvmem_layout
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|||||||
|
|
||||||
--- a/drivers/nvmem/core.c
|
--- a/drivers/nvmem/core.c
|
||||||
+++ b/drivers/nvmem/core.c
|
+++ b/drivers/nvmem/core.c
|
||||||
@@ -794,6 +794,19 @@ static struct nvmem_layout *nvmem_layout
|
@@ -798,6 +798,19 @@ static struct nvmem_layout *nvmem_layout
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -308,6 +308,7 @@ CONFIG_NO_HZ_IDLE=y
|
|||||||
CONFIG_NR_CPUS=4
|
CONFIG_NR_CPUS=4
|
||||||
CONFIG_NVMEM=y
|
CONFIG_NVMEM=y
|
||||||
CONFIG_NVMEM_QCOM_QFPROM=y
|
CONFIG_NVMEM_QCOM_QFPROM=y
|
||||||
|
# CONFIG_NVMEM_QCOM_SEC_QFPROM is not set
|
||||||
# CONFIG_NVMEM_SPMI_SDAM is not set
|
# CONFIG_NVMEM_SPMI_SDAM is not set
|
||||||
CONFIG_NVMEM_SYSFS=y
|
CONFIG_NVMEM_SYSFS=y
|
||||||
CONFIG_OF=y
|
CONFIG_OF=y
|
||||||
|
@ -306,6 +306,7 @@ CONFIG_NO_HZ_IDLE=y
|
|||||||
CONFIG_NR_CPUS=2
|
CONFIG_NR_CPUS=2
|
||||||
CONFIG_NVMEM=y
|
CONFIG_NVMEM=y
|
||||||
CONFIG_NVMEM_QCOM_QFPROM=y
|
CONFIG_NVMEM_QCOM_QFPROM=y
|
||||||
|
# CONFIG_NVMEM_QCOM_SEC_QFPROM is not set
|
||||||
# CONFIG_NVMEM_SPMI_SDAM is not set
|
# CONFIG_NVMEM_SPMI_SDAM is not set
|
||||||
CONFIG_NVMEM_SYSFS=y
|
CONFIG_NVMEM_SYSFS=y
|
||||||
CONFIG_OF=y
|
CONFIG_OF=y
|
||||||
|
@ -152,6 +152,7 @@ CONFIG_NLS=y
|
|||||||
CONFIG_NR_CPUS=1
|
CONFIG_NR_CPUS=1
|
||||||
CONFIG_NR_IRQS=512
|
CONFIG_NR_IRQS=512
|
||||||
CONFIG_NVMEM=y
|
CONFIG_NVMEM=y
|
||||||
|
# CONFIG_NVMEM_QORIQ_EFUSE is not set
|
||||||
CONFIG_OF=y
|
CONFIG_OF=y
|
||||||
CONFIG_OF_ADDRESS=y
|
CONFIG_OF_ADDRESS=y
|
||||||
CONFIG_OF_DMA_DEFAULT_COHERENT=y
|
CONFIG_OF_DMA_DEFAULT_COHERENT=y
|
||||||
|
@ -278,6 +278,7 @@ CONFIG_NR_CPUS=4
|
|||||||
CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y
|
CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y
|
||||||
CONFIG_NVMEM=y
|
CONFIG_NVMEM=y
|
||||||
CONFIG_NVMEM_QCOM_QFPROM=y
|
CONFIG_NVMEM_QCOM_QFPROM=y
|
||||||
|
# CONFIG_NVMEM_QCOM_SEC_QFPROM is not set
|
||||||
# CONFIG_NVMEM_SPMI_SDAM is not set
|
# CONFIG_NVMEM_SPMI_SDAM is not set
|
||||||
CONFIG_NVMEM_SYSFS=y
|
CONFIG_NVMEM_SYSFS=y
|
||||||
CONFIG_NVMEM_U_BOOT_ENV=y
|
CONFIG_NVMEM_U_BOOT_ENV=y
|
||||||
|
Loading…
x
Reference in New Issue
Block a user