All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/13] nvmem: patches (set 1) for 5.18
@ 2022-02-20 15:15 Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 01/13] nvmem: core: Remove unused devm_nvmem_unregister() Srinivas Kandagatla
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Srinivas Kandagatla

Hi Greg,

Here are some nvmem patches for 5.18 which includes

- removing unused devm_nvmem_unregister
- add NULL check in nvmem_unregister and remove redunancy checks.
- add new Layerscape SFP nvmem provider and bindings.
- add support for D1 variant of sunxi nvmem provider.
- fix and update documentation with new examples
- and few minor kerneldoc warning fixes.

Can you please queue them up for 5.18.

thanks for you help,
srini


Andy Shevchenko (5):
  nvmem: core: Remove unused devm_nvmem_unregister()
  nvmem: core: Use devm_add_action_or_reset()
  nvmem: core: Check input parameter for NULL in nvmem_unregister()
  mtd: core: Drop duplicate NULL checks around nvmem_unregister()
  thunderbolt: Drop duplicate NULL checks around nvmem_unregister()

Michael Walle (2):
  dt-bindings: nvmem: add fsl,layerscape-sfp binding
  nvmem: add driver for Layerscape SFP (Security Fuse Processor)

Samuel Holland (2):
  dt-bindings: nvmem: SID: Add compatible for D1
  nvmem: sunxi_sid: Add support for D1 variant

Sean Anderson (2):
  doc: nvmem: Remove references to regmap
  doc: nvmem: Update example

Srinivas Kandagatla (1):
  nvmem: qfprom: fix kerneldoc warning

Xiaoke Wang (1):
  nvmem: meson-mx-efuse: replace unnecessary devm_kstrdup()

 .../nvmem/allwinner,sun4i-a10-sid.yaml        |  1 +
 .../bindings/nvmem/fsl,layerscape-sfp.yaml    | 38 ++++++++
 Documentation/driver-api/nvmem.rst            | 28 +++---
 drivers/mtd/mtdcore.c                         | 13 +--
 drivers/nvmem/Kconfig                         | 12 +++
 drivers/nvmem/Makefile                        |  2 +
 drivers/nvmem/core.c                          | 47 +++-------
 drivers/nvmem/layerscape-sfp.c                | 89 +++++++++++++++++++
 drivers/nvmem/meson-mx-efuse.c                |  3 +-
 drivers/nvmem/qfprom.c                        |  2 +-
 drivers/nvmem/sunxi_sid.c                     |  6 ++
 drivers/thunderbolt/nvm.c                     |  6 +-
 include/linux/nvmem-provider.h                |  8 --
 13 files changed, 179 insertions(+), 76 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/nvmem/fsl,layerscape-sfp.yaml
 create mode 100644 drivers/nvmem/layerscape-sfp.c

-- 
2.21.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 01/13] nvmem: core: Remove unused devm_nvmem_unregister()
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 02/13] nvmem: core: Use devm_add_action_or_reset() Srinivas Kandagatla
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Andy Shevchenko, Srinivas Kandagatla

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

There are no users and seems no will come of the devm_nvmem_unregister().
Remove the function and remove the unused devm_nvmem_match() along with it.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/core.c           | 22 ----------------------
 include/linux/nvmem-provider.h |  8 --------
 2 files changed, 30 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 9fd1602b539d..39cb659ea580 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -945,28 +945,6 @@ struct nvmem_device *devm_nvmem_register(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(devm_nvmem_register);
 
-static int devm_nvmem_match(struct device *dev, void *res, void *data)
-{
-	struct nvmem_device **r = res;
-
-	return *r == data;
-}
-
-/**
- * devm_nvmem_unregister() - Unregister previously registered managed nvmem
- * device.
- *
- * @dev: Device that uses the nvmem device.
- * @nvmem: Pointer to previously registered nvmem device.
- *
- * Return: Will be negative on error or zero on success.
- */
-int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
-{
-	return devres_release(dev, devm_nvmem_release, devm_nvmem_match, nvmem);
-}
-EXPORT_SYMBOL(devm_nvmem_unregister);
-
 static struct nvmem_device *__nvmem_device_get(void *data,
 			int (*match)(struct device *dev, const void *data))
 {
diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
index c9a3ac9efeaa..50caa117cb62 100644
--- a/include/linux/nvmem-provider.h
+++ b/include/linux/nvmem-provider.h
@@ -135,8 +135,6 @@ void nvmem_unregister(struct nvmem_device *nvmem);
 struct nvmem_device *devm_nvmem_register(struct device *dev,
 					 const struct nvmem_config *cfg);
 
-int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem);
-
 void nvmem_add_cell_table(struct nvmem_cell_table *table);
 void nvmem_del_cell_table(struct nvmem_cell_table *table);
 
@@ -155,12 +153,6 @@ devm_nvmem_register(struct device *dev, const struct nvmem_config *c)
 	return nvmem_register(c);
 }
 
-static inline int
-devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
-{
-	return -EOPNOTSUPP;
-}
-
 static inline void nvmem_add_cell_table(struct nvmem_cell_table *table) {}
 static inline void nvmem_del_cell_table(struct nvmem_cell_table *table) {}
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 02/13] nvmem: core: Use devm_add_action_or_reset()
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 01/13] nvmem: core: Remove unused devm_nvmem_unregister() Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 03/13] nvmem: core: Check input parameter for NULL in nvmem_unregister() Srinivas Kandagatla
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Andy Shevchenko, Srinivas Kandagatla

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Slightly simplify the devm_nvmem_register() by using the
devm_add_action_or_reset().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/core.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 39cb659ea580..327c88c432f0 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -907,9 +907,9 @@ void nvmem_unregister(struct nvmem_device *nvmem)
 }
 EXPORT_SYMBOL_GPL(nvmem_unregister);
 
-static void devm_nvmem_release(struct device *dev, void *res)
+static void devm_nvmem_unregister(void *nvmem)
 {
-	nvmem_unregister(*(struct nvmem_device **)res);
+	nvmem_unregister(nvmem);
 }
 
 /**
@@ -926,20 +926,16 @@ static void devm_nvmem_release(struct device *dev, void *res)
 struct nvmem_device *devm_nvmem_register(struct device *dev,
 					 const struct nvmem_config *config)
 {
-	struct nvmem_device **ptr, *nvmem;
-
-	ptr = devres_alloc(devm_nvmem_release, sizeof(*ptr), GFP_KERNEL);
-	if (!ptr)
-		return ERR_PTR(-ENOMEM);
+	struct nvmem_device *nvmem;
+	int ret;
 
 	nvmem = nvmem_register(config);
+	if (IS_ERR(nvmem))
+		return nvmem;
 
-	if (!IS_ERR(nvmem)) {
-		*ptr = nvmem;
-		devres_add(dev, ptr);
-	} else {
-		devres_free(ptr);
-	}
+	ret = devm_add_action_or_reset(dev, devm_nvmem_unregister, nvmem);
+	if (ret)
+		return ERR_PTR(ret);
 
 	return nvmem;
 }
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 03/13] nvmem: core: Check input parameter for NULL in nvmem_unregister()
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 01/13] nvmem: core: Remove unused devm_nvmem_unregister() Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 02/13] nvmem: core: Use devm_add_action_or_reset() Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 04/13] nvmem: qfprom: fix kerneldoc warning Srinivas Kandagatla
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Andy Shevchenko, Srinivas Kandagatla

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

nvmem_unregister() frees resources and standard pattern is to allow
caller to not care if it's NULL or not. This will reduce burden on
the callers to perform this check.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 327c88c432f0..f58d9bc7aa08 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -903,7 +903,8 @@ static void nvmem_device_release(struct kref *kref)
  */
 void nvmem_unregister(struct nvmem_device *nvmem)
 {
-	kref_put(&nvmem->refcnt, nvmem_device_release);
+	if (nvmem)
+		kref_put(&nvmem->refcnt, nvmem_device_release);
 }
 EXPORT_SYMBOL_GPL(nvmem_unregister);
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 04/13] nvmem: qfprom: fix kerneldoc warning
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (2 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 03/13] nvmem: core: Check input parameter for NULL in nvmem_unregister() Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 05/13] dt-bindings: nvmem: SID: Add compatible for D1 Srinivas Kandagatla
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Srinivas Kandagatla

This patch fixes below kernel doc warning,
warning: expecting prototype for qfprom_efuse_reg_write().
Prototype was for qfprom_reg_write() instead

No code changes.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/qfprom.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c
index c500d6235bf6..061293f9136b 100644
--- a/drivers/nvmem/qfprom.c
+++ b/drivers/nvmem/qfprom.c
@@ -244,7 +244,7 @@ static int qfprom_enable_fuse_blowing(const struct qfprom_priv *priv,
 }
 
 /**
- * qfprom_efuse_reg_write() - Write to fuses.
+ * qfprom_reg_write() - Write to fuses.
  * @context: Our driver data.
  * @reg:     The offset to write at.
  * @_val:    Pointer to data to write.
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 05/13] dt-bindings: nvmem: SID: Add compatible for D1
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (3 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 04/13] nvmem: qfprom: fix kerneldoc warning Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 06/13] nvmem: sunxi_sid: Add support for D1 variant Srinivas Kandagatla
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Samuel Holland, Rob Herring, Srinivas Kandagatla

From: Samuel Holland <samuel@sholland.org>

D1 has a SID like other Allwinner SoCs, but with a unique eFuse layout.
Add a new compatible string for it.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 .../devicetree/bindings/nvmem/allwinner,sun4i-a10-sid.yaml       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/nvmem/allwinner,sun4i-a10-sid.yaml b/Documentation/devicetree/bindings/nvmem/allwinner,sun4i-a10-sid.yaml
index 6687ab720304..e558587ff885 100644
--- a/Documentation/devicetree/bindings/nvmem/allwinner,sun4i-a10-sid.yaml
+++ b/Documentation/devicetree/bindings/nvmem/allwinner,sun4i-a10-sid.yaml
@@ -20,6 +20,7 @@ properties:
       - const: allwinner,sun7i-a20-sid
       - const: allwinner,sun8i-a83t-sid
       - const: allwinner,sun8i-h3-sid
+      - const: allwinner,sun20i-d1-sid
       - const: allwinner,sun50i-a64-sid
       - items:
           - const: allwinner,sun50i-a100-sid
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 06/13] nvmem: sunxi_sid: Add support for D1 variant
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (4 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 05/13] dt-bindings: nvmem: SID: Add compatible for D1 Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 07/13] nvmem: meson-mx-efuse: replace unnecessary devm_kstrdup() Srinivas Kandagatla
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Samuel Holland, Srinivas Kandagatla

From: Samuel Holland <samuel@sholland.org>

D1 has a smaller eFuse block than some other recent SoCs, and it no
longer requires a workaround to read the eFuse data.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/sunxi_sid.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/nvmem/sunxi_sid.c b/drivers/nvmem/sunxi_sid.c
index 275b9155e473..5750e1f4bcdb 100644
--- a/drivers/nvmem/sunxi_sid.c
+++ b/drivers/nvmem/sunxi_sid.c
@@ -184,6 +184,11 @@ static const struct sunxi_sid_cfg sun8i_h3_cfg = {
 	.need_register_readout = true,
 };
 
+static const struct sunxi_sid_cfg sun20i_d1_cfg = {
+	.value_offset = 0x200,
+	.size = 0x100,
+};
+
 static const struct sunxi_sid_cfg sun50i_a64_cfg = {
 	.value_offset = 0x200,
 	.size = 0x100,
@@ -200,6 +205,7 @@ static const struct of_device_id sunxi_sid_of_match[] = {
 	{ .compatible = "allwinner,sun7i-a20-sid", .data = &sun7i_a20_cfg },
 	{ .compatible = "allwinner,sun8i-a83t-sid", .data = &sun50i_a64_cfg },
 	{ .compatible = "allwinner,sun8i-h3-sid", .data = &sun8i_h3_cfg },
+	{ .compatible = "allwinner,sun20i-d1-sid", .data = &sun20i_d1_cfg },
 	{ .compatible = "allwinner,sun50i-a64-sid", .data = &sun50i_a64_cfg },
 	{ .compatible = "allwinner,sun50i-h5-sid", .data = &sun50i_a64_cfg },
 	{ .compatible = "allwinner,sun50i-h6-sid", .data = &sun50i_h6_cfg },
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 07/13] nvmem: meson-mx-efuse: replace unnecessary devm_kstrdup()
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (5 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 06/13] nvmem: sunxi_sid: Add support for D1 variant Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 08/13] dt-bindings: nvmem: add fsl,layerscape-sfp binding Srinivas Kandagatla
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh
  Cc: linux-kernel, Xiaoke Wang, Martin Blumenstingl, Srinivas Kandagatla

From: Xiaoke Wang <xkernel.wang@foxmail.com>

Replace unnecessary devm_kstrdup() so to avoid redundant memory allocation.

Suggested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Xiaoke Wang <xkernel.wang@foxmail.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/meson-mx-efuse.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/nvmem/meson-mx-efuse.c b/drivers/nvmem/meson-mx-efuse.c
index 07c9f38c1c60..13eb14316f46 100644
--- a/drivers/nvmem/meson-mx-efuse.c
+++ b/drivers/nvmem/meson-mx-efuse.c
@@ -209,8 +209,7 @@ static int meson_mx_efuse_probe(struct platform_device *pdev)
 	if (IS_ERR(efuse->base))
 		return PTR_ERR(efuse->base);
 
-	efuse->config.name = devm_kstrdup(&pdev->dev, drvdata->name,
-					  GFP_KERNEL);
+	efuse->config.name = drvdata->name;
 	efuse->config.owner = THIS_MODULE;
 	efuse->config.dev = &pdev->dev;
 	efuse->config.priv = efuse;
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 08/13] dt-bindings: nvmem: add fsl,layerscape-sfp binding
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (6 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 07/13] nvmem: meson-mx-efuse: replace unnecessary devm_kstrdup() Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 09/13] nvmem: add driver for Layerscape SFP (Security Fuse Processor) Srinivas Kandagatla
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Michael Walle, Rob Herring, Srinivas Kandagatla

From: Michael Walle <michael@walle.cc>

The Security Fuse Processor provides efuses and is responsible for
reading it at SoC startup and configuring it accordingly.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 .../bindings/nvmem/fsl,layerscape-sfp.yaml    | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/nvmem/fsl,layerscape-sfp.yaml

diff --git a/Documentation/devicetree/bindings/nvmem/fsl,layerscape-sfp.yaml b/Documentation/devicetree/bindings/nvmem/fsl,layerscape-sfp.yaml
new file mode 100644
index 000000000000..80914b93638e
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/fsl,layerscape-sfp.yaml
@@ -0,0 +1,38 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/nvmem/fsl,layerscape-sfp.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Freescale Layerscape Security Fuse Processor
+
+maintainers:
+  - Michael Walle <michael@walle.cc>
+
+description: |
+  SFP is the security fuse processor which among other things provide a
+  unique identifier per part.
+
+allOf:
+  - $ref: "nvmem.yaml#"
+
+properties:
+  compatible:
+    enum:
+      - fsl,ls1028a-sfp
+
+  reg:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    efuse@1e80000 {
+        compatible = "fsl,ls1028a-sfp";
+        reg = <0x1e80000 0x8000>;
+    };
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 09/13] nvmem: add driver for Layerscape SFP (Security Fuse Processor)
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (7 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 08/13] dt-bindings: nvmem: add fsl,layerscape-sfp binding Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 10/13] doc: nvmem: Remove references to regmap Srinivas Kandagatla
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Michael Walle, Srinivas Kandagatla

From: Michael Walle <michael@walle.cc>

Add support for the Security Fuse Processor found on Layerscape SoCs.
This driver implements basic read access.

Signed-off-by: Michael Walle <michael@walle.cc>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/Kconfig          | 12 +++++
 drivers/nvmem/Makefile         |  2 +
 drivers/nvmem/layerscape-sfp.c | 89 ++++++++++++++++++++++++++++++++++
 3 files changed, 103 insertions(+)
 create mode 100644 drivers/nvmem/layerscape-sfp.c

diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index da414617a54d..4063ea15f7d2 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -300,4 +300,16 @@ config NVMEM_BRCM_NVRAM
 	  This driver provides support for Broadcom's NVRAM that can be accessed
 	  using I/O mapping.
 
+config NVMEM_LAYERSCAPE_SFP
+	tristate "Layerscape SFP (Security Fuse Processor) support"
+	depends on ARCH_LAYERSCAPE || COMPILE_TEST
+	depends on HAS_IOMEM
+	help
+	  This driver provides support to read the eFuses on Freescale
+	  Layerscape SoC's. For example, the vendor provides a per part
+	  unique ID there.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called layerscape-sfp.
+
 endif
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index dcbbde35b6a8..d4e1052d2b95 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -61,3 +61,5 @@ obj-$(CONFIG_NVMEM_RMEM) 	+= nvmem-rmem.o
 nvmem-rmem-y			:= rmem.o
 obj-$(CONFIG_NVMEM_BRCM_NVRAM)	+= nvmem_brcm_nvram.o
 nvmem_brcm_nvram-y		:= brcm_nvram.o
+obj-$(CONFIG_NVMEM_LAYERSCAPE_SFP)	+= nvmem-layerscape-sfp.o
+nvmem-layerscape-sfp-y		:= layerscape-sfp.o
diff --git a/drivers/nvmem/layerscape-sfp.c b/drivers/nvmem/layerscape-sfp.c
new file mode 100644
index 000000000000..e591c1511e33
--- /dev/null
+++ b/drivers/nvmem/layerscape-sfp.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Layerscape SFP driver
+ *
+ * Copyright (c) 2022 Michael Walle <michael@walle.cc>
+ *
+ */
+
+#include <linux/device.h>
+#include <linux/io.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+
+#define LAYERSCAPE_SFP_OTP_OFFSET	0x0200
+
+struct layerscape_sfp_priv {
+	void __iomem *base;
+};
+
+struct layerscape_sfp_data {
+	int size;
+};
+
+static int layerscape_sfp_read(void *context, unsigned int offset, void *val,
+			       size_t bytes)
+{
+	struct layerscape_sfp_priv *priv = context;
+
+	memcpy_fromio(val, priv->base + LAYERSCAPE_SFP_OTP_OFFSET + offset,
+		      bytes);
+
+	return 0;
+}
+
+static struct nvmem_config layerscape_sfp_nvmem_config = {
+	.name = "fsl-sfp",
+	.reg_read = layerscape_sfp_read,
+};
+
+static int layerscape_sfp_probe(struct platform_device *pdev)
+{
+	const struct layerscape_sfp_data *data;
+	struct layerscape_sfp_priv *priv;
+	struct nvmem_device *nvmem;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(priv->base))
+		return PTR_ERR(priv->base);
+
+	data = device_get_match_data(&pdev->dev);
+
+	layerscape_sfp_nvmem_config.size = data->size;
+	layerscape_sfp_nvmem_config.dev = &pdev->dev;
+	layerscape_sfp_nvmem_config.priv = priv;
+
+	nvmem = devm_nvmem_register(&pdev->dev, &layerscape_sfp_nvmem_config);
+
+	return PTR_ERR_OR_ZERO(nvmem);
+}
+
+static const struct layerscape_sfp_data ls1028a_data = {
+	.size = 0x88,
+};
+
+static const struct of_device_id layerscape_sfp_dt_ids[] = {
+	{ .compatible = "fsl,ls1028a-sfp", .data = &ls1028a_data },
+	{},
+};
+MODULE_DEVICE_TABLE(of, layerscape_sfp_dt_ids);
+
+static struct platform_driver layerscape_sfp_driver = {
+	.probe	= layerscape_sfp_probe,
+	.driver = {
+		.name	= "layerscape_sfp",
+		.of_match_table = layerscape_sfp_dt_ids,
+	},
+};
+module_platform_driver(layerscape_sfp_driver);
+
+MODULE_AUTHOR("Michael Walle <michael@walle.cc>");
+MODULE_DESCRIPTION("Layerscape Security Fuse Processor driver");
+MODULE_LICENSE("GPL");
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 10/13] doc: nvmem: Remove references to regmap
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (8 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 09/13] nvmem: add driver for Layerscape SFP (Security Fuse Processor) Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 11/13] doc: nvmem: Update example Srinivas Kandagatla
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Sean Anderson, Srinivas Kandagatla

From: Sean Anderson <sean.anderson@seco.com>

Since commit 795ddd18d38f ("nvmem: core: remove regmap dependency"),
nvmem devices do not use the regmap API. Remove references to it from
the documentation.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 Documentation/driver-api/nvmem.rst | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/Documentation/driver-api/nvmem.rst b/Documentation/driver-api/nvmem.rst
index 287e86819640..56352ad1b1b0 100644
--- a/Documentation/driver-api/nvmem.rst
+++ b/Documentation/driver-api/nvmem.rst
@@ -26,9 +26,7 @@ was a rather big abstraction leak.
 
 This framework aims at solve these problems. It also introduces DT
 representation for consumer devices to go get the data they require (MAC
-Addresses, SoC/Revision ID, part numbers, and so on) from the NVMEMs. This
-framework is based on regmap, so that most of the abstraction available in
-regmap can be reused, across multiple types of buses.
+Addresses, SoC/Revision ID, part numbers, and so on) from the NVMEMs.
 
 NVMEM Providers
 +++++++++++++++
@@ -60,9 +58,6 @@ For example, a simple qfprom case::
 	...
   }
 
-It is mandatory that the NVMEM provider has a regmap associated with its
-struct device. Failure to do would return error code from nvmem_register().
-
 Users of board files can define and register nvmem cells using the
 nvmem_cell_table struct::
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 11/13] doc: nvmem: Update example
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (9 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 10/13] doc: nvmem: Remove references to regmap Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 12/13] mtd: core: Drop duplicate NULL checks around nvmem_unregister() Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 13/13] thunderbolt: " Srinivas Kandagatla
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Sean Anderson, Srinivas Kandagatla

From: Sean Anderson <sean.anderson@seco.com>

Update the example to reflect the new API. I have chosen the brcm-nvram
driver since it seems to be simpler than the qfprom driver.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 Documentation/driver-api/nvmem.rst | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/Documentation/driver-api/nvmem.rst b/Documentation/driver-api/nvmem.rst
index 56352ad1b1b0..e3366322d46c 100644
--- a/Documentation/driver-api/nvmem.rst
+++ b/Documentation/driver-api/nvmem.rst
@@ -43,19 +43,20 @@ nvmem_device pointer.
 
 nvmem_unregister(nvmem) is used to unregister a previously registered provider.
 
-For example, a simple qfprom case::
+For example, a simple nvram case::
 
-  static struct nvmem_config econfig = {
-	.name = "qfprom",
-	.owner = THIS_MODULE,
-  };
-
-  static int qfprom_probe(struct platform_device *pdev)
+  static int brcm_nvram_probe(struct platform_device *pdev)
   {
+	struct nvmem_config config = {
+		.name = "brcm-nvram",
+		.reg_read = brcm_nvram_read,
+	};
 	...
-	econfig.dev = &pdev->dev;
-	nvmem = nvmem_register(&econfig);
-	...
+	config.dev = &pdev->dev;
+	config.priv = priv;
+	config.size = resource_size(res);
+
+	devm_nvmem_register(&config);
   }
 
 Users of board files can define and register nvmem cells using the
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 12/13] mtd: core: Drop duplicate NULL checks around nvmem_unregister()
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (10 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 11/13] doc: nvmem: Update example Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  2022-02-20 15:15 ` [PATCH 13/13] thunderbolt: " Srinivas Kandagatla
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Andy Shevchenko, Miquel Raynal, Srinivas Kandagatla

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Since nvmem_unregister() checks for NULL, no need to repeat in
the caller. Drop duplicate NULL checks.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/mtd/mtdcore.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index eef87b28d6c8..fc6090366684 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -743,8 +743,7 @@ int del_mtd_device(struct mtd_info *mtd)
 		debugfs_remove_recursive(mtd->dbg.dfs_dir);
 
 		/* Try to remove the NVMEM provider */
-		if (mtd->nvmem)
-			nvmem_unregister(mtd->nvmem);
+		nvmem_unregister(mtd->nvmem);
 
 		device_unregister(&mtd->dev);
 
@@ -923,8 +922,7 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)
 	return 0;
 
 err:
-	if (mtd->otp_user_nvmem)
-		nvmem_unregister(mtd->otp_user_nvmem);
+	nvmem_unregister(mtd->otp_user_nvmem);
 	return err;
 }
 
@@ -1028,11 +1026,8 @@ int mtd_device_unregister(struct mtd_info *master)
 		memset(&master->reboot_notifier, 0, sizeof(master->reboot_notifier));
 	}
 
-	if (master->otp_user_nvmem)
-		nvmem_unregister(master->otp_user_nvmem);
-
-	if (master->otp_factory_nvmem)
-		nvmem_unregister(master->otp_factory_nvmem);
+	nvmem_unregister(master->otp_user_nvmem);
+	nvmem_unregister(master->otp_factory_nvmem);
 
 	err = del_mtd_partitions(master);
 	if (err)
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 13/13] thunderbolt: Drop duplicate NULL checks around nvmem_unregister()
  2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
                   ` (11 preceding siblings ...)
  2022-02-20 15:15 ` [PATCH 12/13] mtd: core: Drop duplicate NULL checks around nvmem_unregister() Srinivas Kandagatla
@ 2022-02-20 15:15 ` Srinivas Kandagatla
  12 siblings, 0 replies; 14+ messages in thread
From: Srinivas Kandagatla @ 2022-02-20 15:15 UTC (permalink / raw)
  To: gregkh
  Cc: linux-kernel, Andy Shevchenko, Mika Westerberg, Srinivas Kandagatla

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Since nvmem_unregister() checks for NULL, no need to repeat in
the caller. Drop duplicate NULL checks.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/thunderbolt/nvm.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/thunderbolt/nvm.c b/drivers/thunderbolt/nvm.c
index 3a5336913cca..b3f310389378 100644
--- a/drivers/thunderbolt/nvm.c
+++ b/drivers/thunderbolt/nvm.c
@@ -154,10 +154,8 @@ int tb_nvm_add_non_active(struct tb_nvm *nvm, size_t size,
 void tb_nvm_free(struct tb_nvm *nvm)
 {
 	if (nvm) {
-		if (nvm->non_active)
-			nvmem_unregister(nvm->non_active);
-		if (nvm->active)
-			nvmem_unregister(nvm->active);
+		nvmem_unregister(nvm->non_active);
+		nvmem_unregister(nvm->active);
 		vfree(nvm->buf);
 		ida_simple_remove(&nvm_ida, nvm->id);
 	}
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-02-20 15:16 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-20 15:15 [PATCH 00/13] nvmem: patches (set 1) for 5.18 Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 01/13] nvmem: core: Remove unused devm_nvmem_unregister() Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 02/13] nvmem: core: Use devm_add_action_or_reset() Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 03/13] nvmem: core: Check input parameter for NULL in nvmem_unregister() Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 04/13] nvmem: qfprom: fix kerneldoc warning Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 05/13] dt-bindings: nvmem: SID: Add compatible for D1 Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 06/13] nvmem: sunxi_sid: Add support for D1 variant Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 07/13] nvmem: meson-mx-efuse: replace unnecessary devm_kstrdup() Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 08/13] dt-bindings: nvmem: add fsl,layerscape-sfp binding Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 09/13] nvmem: add driver for Layerscape SFP (Security Fuse Processor) Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 10/13] doc: nvmem: Remove references to regmap Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 11/13] doc: nvmem: Update example Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 12/13] mtd: core: Drop duplicate NULL checks around nvmem_unregister() Srinivas Kandagatla
2022-02-20 15:15 ` [PATCH 13/13] thunderbolt: " Srinivas Kandagatla

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.