linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/3] add UniPhier efuse support
@ 2017-08-31 23:20 Keiji Hayashibara
  2017-08-31 23:20 ` [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse Keiji Hayashibara
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Keiji Hayashibara @ 2017-08-31 23:20 UTC (permalink / raw)
  To: srinivas.kandagatla
  Cc: robh+dt, devicetree, linux-arm-kernel, linux-kernel,
	masami.hiramatsu, jaswinder.singh, yamada.masahiro,
	hayashi.kunihiko, owada.kiyoshi, Keiji Hayashibara

This series adds support for eFuse implemented on UniPhier LD20 SoCs.
The eFuse device is under soc-glue and this register implements as read only.

Keiji Hayashibara (3):
  dt-bindings: nvmem: add description for UniPhier eFuse
  nvmem: uniphier: add UniPhier eFuse driver
  arm64: dts: uniphier: add efuse node for LD20

 .../devicetree/bindings/nvmem/uniphier-efuse.txt   | 45 ++++++++++
 arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi   | 14 ++++
 arch/arm64/configs/defconfig                       |  1 +
 drivers/nvmem/Kconfig                              | 11 +++
 drivers/nvmem/Makefile                             |  2 +
 drivers/nvmem/uniphier-efuse.c                     | 98 ++++++++++++++++++++++
 6 files changed, 171 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
 create mode 100644 drivers/nvmem/uniphier-efuse.c

-- 
2.7.4

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

* [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse
  2017-08-31 23:20 [PATCH v1 0/3] add UniPhier efuse support Keiji Hayashibara
@ 2017-08-31 23:20 ` Keiji Hayashibara
  2017-09-04 12:55   ` Masahiro Yamada
  2017-08-31 23:20 ` [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver Keiji Hayashibara
  2017-08-31 23:20 ` [PATCH v1 3/3] arm64: dts: uniphier: add efuse node for LD20 Keiji Hayashibara
  2 siblings, 1 reply; 10+ messages in thread
From: Keiji Hayashibara @ 2017-08-31 23:20 UTC (permalink / raw)
  To: srinivas.kandagatla
  Cc: robh+dt, devicetree, linux-arm-kernel, linux-kernel,
	masami.hiramatsu, jaswinder.singh, yamada.masahiro,
	hayashi.kunihiko, owada.kiyoshi, Keiji Hayashibara

Add uniphier-efuse dt-bindings documentation.

Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
---
 .../devicetree/bindings/nvmem/uniphier-efuse.txt   | 45 ++++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt

diff --git a/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt b/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
new file mode 100644
index 0000000..09024a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
@@ -0,0 +1,45 @@
+= UniPhier eFuse device tree bindings =
+
+This UniPhier eFuse must be under soc-glue.
+
+Required properties:
+- compatible: should be "socionext,uniphier-efuse"
+- reg: should contain the register base and length
+
+= Data cells =
+Are child nodes of efuse, bindings of which as described in
+bindings/nvmem/nvmem.txt
+
+Example:
+
+	soc-glue@5f900000 {
+		compatible = "socionext,uniphier-ld20-soc-glue-debug",
+			     "simple-mfd";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges = <0x0 0x5f900000 0x2000>;
+
+		efuse {
+			compatible = "socionext,uniphier-efuse",
+				     "syscon";
+			reg = <0x100 0xf00>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			/* Data cells */
+			usb_mon: usb_mon {
+				reg = <0x154 0xc>;
+			};
+		};
+	};
+
+= Data consumers =
+Are device nodes which consume nvmem data cells.
+
+Example:
+
+	usb {
+		...
+		nvmem-cells = <&usb_mon>;
+		nvmem-cell-names = "usb_mon";
+	}
-- 
2.7.4

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

* [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver
  2017-08-31 23:20 [PATCH v1 0/3] add UniPhier efuse support Keiji Hayashibara
  2017-08-31 23:20 ` [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse Keiji Hayashibara
@ 2017-08-31 23:20 ` Keiji Hayashibara
  2017-09-04 12:58   ` Masahiro Yamada
  2017-08-31 23:20 ` [PATCH v1 3/3] arm64: dts: uniphier: add efuse node for LD20 Keiji Hayashibara
  2 siblings, 1 reply; 10+ messages in thread
From: Keiji Hayashibara @ 2017-08-31 23:20 UTC (permalink / raw)
  To: srinivas.kandagatla
  Cc: robh+dt, devicetree, linux-arm-kernel, linux-kernel,
	masami.hiramatsu, jaswinder.singh, yamada.masahiro,
	hayashi.kunihiko, owada.kiyoshi, Keiji Hayashibara

Add eFuse driver for Socionext UniPhier series SoC.
Note that eFuse device is under soc-glue and this register
implements as read only.

Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
---
 arch/arm64/configs/defconfig   |  1 +
 drivers/nvmem/Kconfig          | 11 +++++
 drivers/nvmem/Makefile         |  2 +
 drivers/nvmem/uniphier-efuse.c | 98 ++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 112 insertions(+)
 create mode 100644 drivers/nvmem/uniphier-efuse.c

diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 6c7d147..5c38b4a 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -514,6 +514,7 @@ CONFIG_PHY_XGENE=y
 CONFIG_PHY_TEGRA_XUSB=y
 CONFIG_QCOM_L2_PMU=y
 CONFIG_QCOM_L3_PMU=y
+CONFIG_UNIPHIER_EFUSE=y
 CONFIG_ARM_SCPI_PROTOCOL=y
 CONFIG_RASPBERRYPI_FIRMWARE=y
 CONFIG_EFI_CAPSULE_LOADER=y
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index 101ced4..aaeaebe 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -123,6 +123,17 @@ config NVMEM_SUNXI_SID
 	  This driver can also be built as a module. If so, the module
 	  will be called nvmem_sunxi_sid.
 
+config UNIPHIER_EFUSE
+	tristate "UniPhier SoCs eFuse support"
+	depends on ARCH_UNIPHIER || COMPILE_TEST
+	depends on OF && MFD_SYSCON
+	help
+	  This is a simple drive to dump specified values of UniPhier SoC
+	  from eFuse.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called nvmem_uniphier-efuse.
+
 config NVMEM_VF610_OCOTP
 	tristate "VF610 SoC OCOTP support"
 	depends on SOC_VF610 || COMPILE_TEST
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index 1731406..f5277c3 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -26,6 +26,8 @@ obj-$(CONFIG_ROCKCHIP_EFUSE)	+= nvmem_rockchip_efuse.o
 nvmem_rockchip_efuse-y		:= rockchip-efuse.o
 obj-$(CONFIG_NVMEM_SUNXI_SID)	+= nvmem_sunxi_sid.o
 nvmem_sunxi_sid-y		:= sunxi_sid.o
+obj-$(CONFIG_UNIPHIER_EFUSE)	+= nvmem_uniphier-efuse.o
+nvmem_uniphier-efuse-y		:= uniphier-efuse.o
 obj-$(CONFIG_NVMEM_VF610_OCOTP)	+= nvmem-vf610-ocotp.o
 nvmem-vf610-ocotp-y		:= vf610-ocotp.o
 obj-$(CONFIG_MESON_EFUSE)	+= nvmem_meson_efuse.o
diff --git a/drivers/nvmem/uniphier-efuse.c b/drivers/nvmem/uniphier-efuse.c
new file mode 100644
index 0000000..d553fa3
--- /dev/null
+++ b/drivers/nvmem/uniphier-efuse.c
@@ -0,0 +1,98 @@
+/*
+ * UniPhier eFuse driver
+ *
+ * Copyright (C) 2017 Socionext Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+#define UNIPHIER_EFUSE_WORD_SIZE	4
+#define UNIPHIER_EFUSE_STRIDE		4
+
+static int uniphier_reg_read(void *context,
+			     unsigned int offset, void *val, size_t bytes)
+{
+	int words = bytes / UNIPHIER_EFUSE_WORD_SIZE;
+
+	return regmap_bulk_read(context, offset, val, words);
+}
+
+static struct nvmem_config econfig = {
+	.name = "uniphier-efuse",
+	.owner = THIS_MODULE,
+	.read_only = true,
+	.reg_read = uniphier_reg_read,
+	.word_size = UNIPHIER_EFUSE_WORD_SIZE,
+	.stride = UNIPHIER_EFUSE_STRIDE,
+};
+
+static int uniphier_efuse_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct nvmem_device *nvmem;
+	struct regmap *regmap;
+	struct resource res;
+	int ret;
+
+	ret = of_address_to_resource(dev->of_node, 0, &res);
+	if (ret)
+		return ret;
+
+	regmap = syscon_node_to_regmap(dev->of_node);
+	if (IS_ERR(regmap))
+		return PTR_ERR(regmap);
+
+	econfig.size = resource_size(&res);
+	econfig.priv = regmap;
+	econfig.dev = dev;
+
+	nvmem = nvmem_register(&econfig);
+	if (IS_ERR(nvmem))
+		return PTR_ERR(nvmem);
+
+	platform_set_drvdata(pdev, nvmem);
+
+	return 0;
+}
+
+static int uniphier_efuse_remove(struct platform_device *pdev)
+{
+	struct nvmem_device *nvmem = platform_get_drvdata(pdev);
+
+	return nvmem_unregister(nvmem);
+}
+
+static const struct of_device_id uniphier_efuse_of_match[] = {
+	{ .compatible = "socionext,uniphier-efuse",},
+	{/* sentinel */},
+};
+MODULE_DEVICE_TABLE(of, uniphier_efuse_of_match);
+
+static struct platform_driver uniphier_efuse_driver = {
+	.probe = uniphier_efuse_probe,
+	.remove = uniphier_efuse_remove,
+	.driver = {
+		.name = "uniphier-efuse",
+		.of_match_table = uniphier_efuse_of_match,
+	},
+};
+module_platform_driver(uniphier_efuse_driver);
+
+MODULE_AUTHOR("Keiji Hayashibara <hayashibara.keiji@socionext.com>");
+MODULE_DESCRIPTION("UniPhier eFuse driver");
+MODULE_LICENSE("GPL v2");
-- 
2.7.4

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

* [PATCH v1 3/3] arm64: dts: uniphier: add efuse node for LD20
  2017-08-31 23:20 [PATCH v1 0/3] add UniPhier efuse support Keiji Hayashibara
  2017-08-31 23:20 ` [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse Keiji Hayashibara
  2017-08-31 23:20 ` [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver Keiji Hayashibara
@ 2017-08-31 23:20 ` Keiji Hayashibara
  2 siblings, 0 replies; 10+ messages in thread
From: Keiji Hayashibara @ 2017-08-31 23:20 UTC (permalink / raw)
  To: srinivas.kandagatla
  Cc: robh+dt, devicetree, linux-arm-kernel, linux-kernel,
	masami.hiramatsu, jaswinder.singh, yamada.masahiro,
	hayashi.kunihiko, owada.kiyoshi, Keiji Hayashibara

Add efuse node for UniPhier LD20 SoC.
This efuse node is included in soc-glue.

Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
---
 arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi b/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
index de1e753..8a1f5af 100644
--- a/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
+++ b/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
@@ -365,6 +365,20 @@
 			};
 		};
 
+		soc-glue@5f900000 {
+			compatible = "socionext,uniphier-ld20-soc-glue-debug",
+				     "simple-mfd";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0x5f900000 0x2000>;
+
+			efuse {
+				compatible = "socionext,uniphier-efuse",
+					     "syscon";
+				reg = <0x100 0xf00>;
+			};
+		};
+
 		gic: interrupt-controller@5fe00000 {
 			compatible = "arm,gic-v3";
 			reg = <0x5fe00000 0x10000>,	/* GICD */
-- 
2.7.4

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

* Re: [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse
  2017-08-31 23:20 ` [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse Keiji Hayashibara
@ 2017-09-04 12:55   ` Masahiro Yamada
  2017-09-05  7:04     ` Keiji Hayashibara
  0 siblings, 1 reply; 10+ messages in thread
From: Masahiro Yamada @ 2017-09-04 12:55 UTC (permalink / raw)
  To: Keiji Hayashibara
  Cc: Srinivas Kandagatla, Rob Herring, devicetree, linux-arm-kernel,
	Linux Kernel Mailing List, Masami Hiramatsu, Jassi Brar,
	Kunihiko Hayashi, Kiyoshi Owada

2017-09-01 8:20 GMT+09:00 Keiji Hayashibara <hayashibara.keiji@socionext.com>:
> Add uniphier-efuse dt-bindings documentation.
>
> Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
> ---
>  .../devicetree/bindings/nvmem/uniphier-efuse.txt   | 45 ++++++++++++++++++++++
>  1 file changed, 45 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
>
> diff --git a/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt b/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> new file mode 100644
> index 0000000..09024a2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> @@ -0,0 +1,45 @@
> += UniPhier eFuse device tree bindings =
> +
> +This UniPhier eFuse must be under soc-glue.
> +
> +Required properties:
> +- compatible: should be "socionext,uniphier-efuse"
> +- reg: should contain the register base and length
> +
> += Data cells =
> +Are child nodes of efuse, bindings of which as described in
> +bindings/nvmem/nvmem.txt
> +
> +Example:
> +
> +       soc-glue@5f900000 {
> +               compatible = "socionext,uniphier-ld20-soc-glue-debug",
> +                            "simple-mfd";
> +               #address-cells = <1>;
> +               #size-cells = <1>;
> +               ranges = <0x0 0x5f900000 0x2000>;


IMHO, I think an empty "ranges;" will clarify the code,
but it is up to your taste.


> +
> +               efuse {
> +                       compatible = "socionext,uniphier-efuse",
> +                                    "syscon";


You are adding a dedicated driver for "socionext,uniphier-efuse".

Then, "syscon" as well?




> +                       reg = <0x100 0xf00>;


Not so many efuse registers exist on the SoC.

reg = <0x100 0x200>; will be enough.


Or if you want to be strict to the hw spec, you can write as follows:

        soc-glue@5f900000 {
               compatible = "socionext,uniphier-ld20-soc-glue-debug";
                            "simple-mfd";
               #address-cells = <1>;
               #size-cells = <1>;
               ranges = <0x0 0x5f900000 0x2000>;

               efuse@100 {
                           compatible = "socionext,uniphier-efuse";
                           reg = <0x100 0x28>;
               };

               efuse@200 {
                           compatible = "socionext,uniphier-efuse";
                           reg = <0x200 0x68>;
               };
       };




> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +
> +                       /* Data cells */
> +                       usb_mon: usb_mon {
> +                               reg = <0x154 0xc>;
> +                       };


This <0x154 0xc> represents 0x5f900254 in CPU address view.
(0x5f900000 + 0x100 + 0x154)

So many ranges conversion, and how error-prone..





> +       };
> +
> += Data consumers =
> +Are device nodes which consume nvmem data cells.
> +
> +Example:
> +
> +       usb {
> +               ...
> +               nvmem-cells = <&usb_mon>;
> +               nvmem-cell-names = "usb_mon";
> +       }
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Best Regards
Masahiro Yamada

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

* Re: [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver
  2017-08-31 23:20 ` [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver Keiji Hayashibara
@ 2017-09-04 12:58   ` Masahiro Yamada
  2017-09-07  0:36     ` Keiji Hayashibara
  0 siblings, 1 reply; 10+ messages in thread
From: Masahiro Yamada @ 2017-09-04 12:58 UTC (permalink / raw)
  To: Keiji Hayashibara
  Cc: Srinivas Kandagatla, Rob Herring, devicetree, linux-arm-kernel,
	Linux Kernel Mailing List, Masami Hiramatsu, Jassi Brar,
	Kunihiko Hayashi, Kiyoshi Owada

2017-09-01 8:20 GMT+09:00 Keiji Hayashibara <hayashibara.keiji@socionext.com>:
> Add eFuse driver for Socionext UniPhier series SoC.
> Note that eFuse device is under soc-glue and this register
> implements as read only.
>
> Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
> ---
>  arch/arm64/configs/defconfig   |  1 +
>  drivers/nvmem/Kconfig          | 11 +++++
>  drivers/nvmem/Makefile         |  2 +
>  drivers/nvmem/uniphier-efuse.c | 98 ++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 112 insertions(+)
>  create mode 100644 drivers/nvmem/uniphier-efuse.c
>
> diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> index 6c7d147..5c38b4a 100644
> --- a/arch/arm64/configs/defconfig
> +++ b/arch/arm64/configs/defconfig
> @@ -514,6 +514,7 @@ CONFIG_PHY_XGENE=y
>  CONFIG_PHY_TEGRA_XUSB=y
>  CONFIG_QCOM_L2_PMU=y
>  CONFIG_QCOM_L3_PMU=y
> +CONFIG_UNIPHIER_EFUSE=y
>  CONFIG_ARM_SCPI_PROTOCOL=y
>  CONFIG_RASPBERRYPI_FIRMWARE=y
>  CONFIG_EFI_CAPSULE_LOADER=y


You need to send this separately
(after this driver is accepted)



> diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> index 101ced4..aaeaebe 100644
> --- a/drivers/nvmem/Kconfig
> +++ b/drivers/nvmem/Kconfig
> @@ -123,6 +123,17 @@ config NVMEM_SUNXI_SID
>           This driver can also be built as a module. If so, the module
>           will be called nvmem_sunxi_sid.
>
> +config UNIPHIER_EFUSE
> +       tristate "UniPhier SoCs eFuse support"
> +       depends on ARCH_UNIPHIER || COMPILE_TEST
> +       depends on OF && MFD_SYSCON
> +       help
> +         This is a simple drive to dump specified values of UniPhier SoC
> +         from eFuse.


s/drive/driver/


I see the same typo in ROCKCHIP_EFUSE.

You copied it verbatim.




> +         This driver can also be built as a module. If so, the module
> +         will be called nvmem_uniphier-efuse.


I do not like a mixture of '_' and '-' though...





>  config NVMEM_VF610_OCOTP
>         tristate "VF610 SoC OCOTP support"
>         depends on SOC_VF610 || COMPILE_TEST
> diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
> index 1731406..f5277c3 100644
> --- a/drivers/nvmem/Makefile
> +++ b/drivers/nvmem/Makefile
> @@ -26,6 +26,8 @@ obj-$(CONFIG_ROCKCHIP_EFUSE)  += nvmem_rockchip_efuse.o
>  nvmem_rockchip_efuse-y         := rockchip-efuse.o
>  obj-$(CONFIG_NVMEM_SUNXI_SID)  += nvmem_sunxi_sid.o
>  nvmem_sunxi_sid-y              := sunxi_sid.o
> +obj-$(CONFIG_UNIPHIER_EFUSE)   += nvmem_uniphier-efuse.o
> +nvmem_uniphier-efuse-y         := uniphier-efuse.o
>  obj-$(CONFIG_NVMEM_VF610_OCOTP)        += nvmem-vf610-ocotp.o
>  nvmem-vf610-ocotp-y            := vf610-ocotp.o
>  obj-$(CONFIG_MESON_EFUSE)      += nvmem_meson_efuse.o
> diff --git a/drivers/nvmem/uniphier-efuse.c b/drivers/nvmem/uniphier-efuse.c
> new file mode 100644
> index 0000000..d553fa3
> --- /dev/null
> +++ b/drivers/nvmem/uniphier-efuse.c
> @@ -0,0 +1,98 @@
> +/*
> + * UniPhier eFuse driver
> + *
> + * Copyright (C) 2017 Socionext Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/mfd/syscon.h>
> +#include <linux/module.h>
> +#include <linux/nvmem-provider.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
> +
> +#define UNIPHIER_EFUSE_WORD_SIZE       4
> +#define UNIPHIER_EFUSE_STRIDE          4
> +
> +static int uniphier_reg_read(void *context,
> +                            unsigned int offset, void *val, size_t bytes)
> +{
> +       int words = bytes / UNIPHIER_EFUSE_WORD_SIZE;
> +
> +       return regmap_bulk_read(context, offset, val, words);
> +}
> +
> +static struct nvmem_config econfig = {
> +       .name = "uniphier-efuse",
> +       .owner = THIS_MODULE,
> +       .read_only = true,
> +       .reg_read = uniphier_reg_read,
> +       .word_size = UNIPHIER_EFUSE_WORD_SIZE,
> +       .stride = UNIPHIER_EFUSE_STRIDE,
> +};



"struct nvmem_config" exists for the purpose of containing
driver-specific parameters.
Do you still want to use
UNIPHIER_EFUSE_WORD_SIZE / UNIPHIER_EFUSE_STRIDE macros here?




static struct nvmem_config econfig = {
       .name = "uniphier-efuse",
       .owner = THIS_MODULE,
       .read_only = true,
       .reg_read = uniphier_reg_read,
       .word_size = 4,
       .stride = 4,
};

looks nicer in my taste.



BTW, is there really no possibility
where the unphier_efuse_probe() is run concurrently?

Many other drivers pass statically allocated memory
to nvmem_register() like this...




> +static int uniphier_efuse_probe(struct platform_device *pdev)
> +{
> +       struct device *dev = &pdev->dev;
> +       struct nvmem_device *nvmem;
> +       struct regmap *regmap;
> +       struct resource res;
> +       int ret;
> +
> +       ret = of_address_to_resource(dev->of_node, 0, &res);
> +       if (ret)
> +               return ret;
> +
> +       regmap = syscon_node_to_regmap(dev->of_node);
> +       if (IS_ERR(regmap))
> +               return PTR_ERR(regmap);


In my understanding,
syscon_node_to_regmap() is generally useful
to get regmap of another node,
i.e. it is often used together with of_get_parent / of_parse_phandle etc.

You can use devm_regmap_init_mmio()
to init regmap for itself.


BTW, what is your motivation of using regmap?


I think what you want to do is
the same as mtk-efuse.c, right?
(and qfprom.c is similar, the difference is just register width)






> +       econfig.size = resource_size(&res);
> +       econfig.priv = regmap;
> +       econfig.dev = dev;
> +
> +       nvmem = nvmem_register(&econfig);
> +       if (IS_ERR(nvmem))
> +               return PTR_ERR(nvmem);
> +
> +       platform_set_drvdata(pdev, nvmem);
> +
> +       return 0;
> +}
> +
> +static int uniphier_efuse_remove(struct platform_device *pdev)
> +{
> +       struct nvmem_device *nvmem = platform_get_drvdata(pdev);
> +
> +       return nvmem_unregister(nvmem);
> +}
> +
> +static const struct of_device_id uniphier_efuse_of_match[] = {
> +       { .compatible = "socionext,uniphier-efuse",},
> +       {/* sentinel */},
> +};
> +MODULE_DEVICE_TABLE(of, uniphier_efuse_of_match);
> +
> +static struct platform_driver uniphier_efuse_driver = {
> +       .probe = uniphier_efuse_probe,
> +       .remove = uniphier_efuse_remove,
> +       .driver = {
> +               .name = "uniphier-efuse",
> +               .of_match_table = uniphier_efuse_of_match,
> +       },
> +};
> +module_platform_driver(uniphier_efuse_driver);
> +
> +MODULE_AUTHOR("Keiji Hayashibara <hayashibara.keiji@socionext.com>");
> +MODULE_DESCRIPTION("UniPhier eFuse driver");
> +MODULE_LICENSE("GPL v2");
> --
> 2.7.4
>



-- 
Best Regards
Masahiro Yamada

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

* RE: [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse
  2017-09-04 12:55   ` Masahiro Yamada
@ 2017-09-05  7:04     ` Keiji Hayashibara
  2017-09-12 16:15       ` Rob Herring
  0 siblings, 1 reply; 10+ messages in thread
From: Keiji Hayashibara @ 2017-09-05  7:04 UTC (permalink / raw)
  To: 'Masahiro Yamada'
  Cc: Srinivas Kandagatla, Rob Herring, devicetree, linux-arm-kernel,
	Linux Kernel Mailing List, Masami Hiramatsu, Jassi Brar, Hayashi,
	Kunihiko/林 邦彦,
	Owada, Kiyoshi/大和田 清志

Hello Yamada-san,

Thank you for your comment.

> From: Masahiro Yamada [mailto:yamada.masahiro@socionext.com]
> Sent: Monday, September 4, 2017 9:56 PM
> 
> 2017-09-01 8:20 GMT+09:00 Keiji Hayashibara
> <hayashibara.keiji@socionext.com>:
> > Add uniphier-efuse dt-bindings documentation.
> >
> > Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
> > ---
> >  .../devicetree/bindings/nvmem/uniphier-efuse.txt   | 45
> ++++++++++++++++++++++
> >  1 file changed, 45 insertions(+)
> >  create mode 100644
> > Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> >
> > diff --git
> > a/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> > b/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> > new file mode 100644
> > index 0000000..09024a2
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> > @@ -0,0 +1,45 @@
> > += UniPhier eFuse device tree bindings =
> > +
> > +This UniPhier eFuse must be under soc-glue.
> > +
> > +Required properties:
> > +- compatible: should be "socionext,uniphier-efuse"
> > +- reg: should contain the register base and length
> > +
> > += Data cells =
> > +Are child nodes of efuse, bindings of which as described in
> > +bindings/nvmem/nvmem.txt
> > +
> > +Example:
> > +
> > +       soc-glue@5f900000 {
> > +               compatible = "socionext,uniphier-ld20-soc-glue-debug",
> > +                            "simple-mfd";
> > +               #address-cells = <1>;
> > +               #size-cells = <1>;
> > +               ranges = <0x0 0x5f900000 0x2000>;
> 
> 
> IMHO, I think an empty "ranges;" will clarify the code, but it is up to
> your taste.
> 
> 
> > +
> > +               efuse {
> > +                       compatible = "socionext,uniphier-efuse",
> > +                                    "syscon";
> 
> 
> You are adding a dedicated driver for "socionext,uniphier-efuse".
> 
> Then, "syscon" as well?
> 

Since I was using the syscon interface to implement the driver,
I specified "syscon". It's interface is syscon_node_to_regmap().

I will rethink this in v2.

> 
> 
> > +                       reg = <0x100 0xf00>;
> 
> 
> Not so many efuse registers exist on the SoC.
> 
> reg = <0x100 0x200>; will be enough.
> 
> 
> Or if you want to be strict to the hw spec, you can write as follows:
> 
>         soc-glue@5f900000 {
>                compatible = "socionext,uniphier-ld20-soc-glue-debug";
>                             "simple-mfd";
>                #address-cells = <1>;
>                #size-cells = <1>;
>                ranges = <0x0 0x5f900000 0x2000>;
> 
>                efuse@100 {
>                            compatible = "socionext,uniphier-efuse";
>                            reg = <0x100 0x28>;
>                };
> 
>                efuse@200 {
>                            compatible = "socionext,uniphier-efuse";
>                            reg = <0x200 0x68>;
>                };
>        };
> 
> 
> 
> 
> > +                       #address-cells = <1>;
> > +                       #size-cells = <1>;
> > +
> > +                       /* Data cells */
> > +                       usb_mon: usb_mon {
> > +                               reg = <0x154 0xc>;
> > +                       };
> 
> 
> This <0x154 0xc> represents 0x5f900254 in CPU address view.
> (0x5f900000 + 0x100 + 0x154)
> 
> So many ranges conversion, and how error-prone..
> 

Yes, indeed...
I will modify as below.

        soc-glue@5f900000 {
                compatible = "socionext,uniphier-ld20-soc-glue-debug",
                             "simple-mfd";
                #address-cells = <1>;
                #size-cells = <1>;
                ranges;

                efuse@5f900100 {
                        compatible = "socionext,uniphier-efuse";
                        reg = <0x5f900100 0x28>;
                };

                efuse@5f900200 {
                        compatible = "socionext,uniphier-efuse";
                        reg = <0x5f900200 0x68>;
                };
        };


> 
> 
> 
> > +       };
> > +
> > += Data consumers =
> > +Are device nodes which consume nvmem data cells.
> > +
> > +Example:
> > +
> > +       usb {
> > +               ...
> > +               nvmem-cells = <&usb_mon>;
> > +               nvmem-cell-names = "usb_mon";
> > +       }
> > --
> > 2.7.4
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe devicetree"
> > in the body of a message to majordomo@vger.kernel.org More majordomo
> > info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> 
> --
> Best Regards
> Masahiro Yamada

Best Regards,
Keiji Hayashibara

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

* RE: [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver
  2017-09-04 12:58   ` Masahiro Yamada
@ 2017-09-07  0:36     ` Keiji Hayashibara
  0 siblings, 0 replies; 10+ messages in thread
From: Keiji Hayashibara @ 2017-09-07  0:36 UTC (permalink / raw)
  To: 'Masahiro Yamada'
  Cc: Srinivas Kandagatla, Rob Herring, devicetree, linux-arm-kernel,
	Linux Kernel Mailing List, Masami Hiramatsu, Jassi Brar, Hayashi,
	Kunihiko/林 邦彦,
	Owada, Kiyoshi/大和田 清志

Hello Yamada-san,

Thank you for your comment.

> From: Masahiro Yamada [mailto:yamada.masahiro@socionext.com]
> Sent: Monday, September 4, 2017 9:58 PM
> 
> 2017-09-01 8:20 GMT+09:00 Keiji Hayashibara
> <hayashibara.keiji@socionext.com>:
> > Add eFuse driver for Socionext UniPhier series SoC.
> > Note that eFuse device is under soc-glue and this register implements
> > as read only.
> >
> > Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
> > ---
> >  arch/arm64/configs/defconfig   |  1 +
> >  drivers/nvmem/Kconfig          | 11 +++++
> >  drivers/nvmem/Makefile         |  2 +
> >  drivers/nvmem/uniphier-efuse.c | 98
> > ++++++++++++++++++++++++++++++++++++++++++
> >  4 files changed, 112 insertions(+)
> >  create mode 100644 drivers/nvmem/uniphier-efuse.c
> >
> > diff --git a/arch/arm64/configs/defconfig
> > b/arch/arm64/configs/defconfig index 6c7d147..5c38b4a 100644
> > --- a/arch/arm64/configs/defconfig
> > +++ b/arch/arm64/configs/defconfig
> > @@ -514,6 +514,7 @@ CONFIG_PHY_XGENE=y  CONFIG_PHY_TEGRA_XUSB=y
> > CONFIG_QCOM_L2_PMU=y  CONFIG_QCOM_L3_PMU=y
> > +CONFIG_UNIPHIER_EFUSE=y
> >  CONFIG_ARM_SCPI_PROTOCOL=y
> >  CONFIG_RASPBERRYPI_FIRMWARE=y
> >  CONFIG_EFI_CAPSULE_LOADER=y
> 
> 
> You need to send this separately
> (after this driver is accepted)

I see.
Next I will post this separately.

> 
> > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index
> > 101ced4..aaeaebe 100644
> > --- a/drivers/nvmem/Kconfig
> > +++ b/drivers/nvmem/Kconfig
> > @@ -123,6 +123,17 @@ config NVMEM_SUNXI_SID
> >           This driver can also be built as a module. If so, the module
> >           will be called nvmem_sunxi_sid.
> >
> > +config UNIPHIER_EFUSE
> > +       tristate "UniPhier SoCs eFuse support"
> > +       depends on ARCH_UNIPHIER || COMPILE_TEST
> > +       depends on OF && MFD_SYSCON
> > +       help
> > +         This is a simple drive to dump specified values of UniPhier
> SoC
> > +         from eFuse.
> 
> 
> s/drive/driver/
> 
> 
> I see the same typo in ROCKCHIP_EFUSE.
> 
> You copied it verbatim.
> 

I will fix it...

> 
> 
> > +         This driver can also be built as a module. If so, the module
> > +         will be called nvmem_uniphier-efuse.
> 
> 
> I do not like a mixture of '_' and '-' though...
> 

I will fix it.
> 
> 
> >  config NVMEM_VF610_OCOTP
> >         tristate "VF610 SoC OCOTP support"
> >         depends on SOC_VF610 || COMPILE_TEST diff --git
> > a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile index
> > 1731406..f5277c3 100644
> > --- a/drivers/nvmem/Makefile
> > +++ b/drivers/nvmem/Makefile
> > @@ -26,6 +26,8 @@ obj-$(CONFIG_ROCKCHIP_EFUSE)  +=
> nvmem_rockchip_efuse.o
> >  nvmem_rockchip_efuse-y         := rockchip-efuse.o
> >  obj-$(CONFIG_NVMEM_SUNXI_SID)  += nvmem_sunxi_sid.o
> >  nvmem_sunxi_sid-y              := sunxi_sid.o
> > +obj-$(CONFIG_UNIPHIER_EFUSE)   += nvmem_uniphier-efuse.o
> > +nvmem_uniphier-efuse-y         := uniphier-efuse.o
> >  obj-$(CONFIG_NVMEM_VF610_OCOTP)        += nvmem-vf610-ocotp.o
> >  nvmem-vf610-ocotp-y            := vf610-ocotp.o
> >  obj-$(CONFIG_MESON_EFUSE)      += nvmem_meson_efuse.o
> > diff --git a/drivers/nvmem/uniphier-efuse.c
> > b/drivers/nvmem/uniphier-efuse.c new file mode 100644 index
> > 0000000..d553fa3
> > --- /dev/null
> > +++ b/drivers/nvmem/uniphier-efuse.c
> > @@ -0,0 +1,98 @@
> > +/*
> > + * UniPhier eFuse driver
> > + *
> > + * Copyright (C) 2017 Socionext Inc.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > +modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > + * GNU General Public License for more details.
> > + */
> > +
> > +#include <linux/mfd/syscon.h>
> > +#include <linux/module.h>
> > +#include <linux/nvmem-provider.h>
> > +#include <linux/of.h>
> > +#include <linux/of_address.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/regmap.h>
> > +
> > +#define UNIPHIER_EFUSE_WORD_SIZE       4
> > +#define UNIPHIER_EFUSE_STRIDE          4
> > +
> > +static int uniphier_reg_read(void *context,
> > +                            unsigned int offset, void *val, size_t
> > +bytes) {
> > +       int words = bytes / UNIPHIER_EFUSE_WORD_SIZE;
> > +
> > +       return regmap_bulk_read(context, offset, val, words); }
> > +
> > +static struct nvmem_config econfig = {
> > +       .name = "uniphier-efuse",
> > +       .owner = THIS_MODULE,
> > +       .read_only = true,
> > +       .reg_read = uniphier_reg_read,
> > +       .word_size = UNIPHIER_EFUSE_WORD_SIZE,
> > +       .stride = UNIPHIER_EFUSE_STRIDE, };
> 
> 
> 
> "struct nvmem_config" exists for the purpose of containing driver-specific
> parameters.
> Do you still want to use
> UNIPHIER_EFUSE_WORD_SIZE / UNIPHIER_EFUSE_STRIDE macros here?
> 
> 
> 
> 
> static struct nvmem_config econfig = {
>        .name = "uniphier-efuse",
>        .owner = THIS_MODULE,
>        .read_only = true,
>        .reg_read = uniphier_reg_read,
>        .word_size = 4,
>        .stride = 4,
> };
> 
> looks nicer in my taste.
> 

I will fix it.

> 
> BTW, is there really no possibility
> where the unphier_efuse_probe() is run concurrently?
> 
> Many other drivers pass statically allocated memory to nvmem_register()
> like this...
> 
In the case of the uniphier system, since there is only one efuse device,
it will not run concurrently. 
I would like to fix it when I need it in the future.

> 
> > +static int uniphier_efuse_probe(struct platform_device *pdev) {
> > +       struct device *dev = &pdev->dev;
> > +       struct nvmem_device *nvmem;
> > +       struct regmap *regmap;
> > +       struct resource res;
> > +       int ret;
> > +
> > +       ret = of_address_to_resource(dev->of_node, 0, &res);
> > +       if (ret)
> > +               return ret;
> > +
> > +       regmap = syscon_node_to_regmap(dev->of_node);
> > +       if (IS_ERR(regmap))
> > +               return PTR_ERR(regmap);
> 
> 
> In my understanding,
> syscon_node_to_regmap() is generally useful to get regmap of another node,
> i.e. it is often used together with of_get_parent / of_parse_phandle etc.
> 
> You can use devm_regmap_init_mmio()
> to init regmap for itself.
> 
> 
> BTW, what is your motivation of using regmap?
>
> 
> I think what you want to do is
> the same as mtk-efuse.c, right?
> (and qfprom.c is similar, the difference is just register width)

Since redundancy can be omitted, implementation is easier, I think so.
However, since I can't find the merit of using regmap,
I will implement it in a method that does not use it.

> 
> 
> > +       econfig.size = resource_size(&res);
> > +       econfig.priv = regmap;
> > +       econfig.dev = dev;
> > +
> > +       nvmem = nvmem_register(&econfig);
> > +       if (IS_ERR(nvmem))
> > +               return PTR_ERR(nvmem);
> > +
> > +       platform_set_drvdata(pdev, nvmem);
> > +
> > +       return 0;
> > +}
> > +
> > +static int uniphier_efuse_remove(struct platform_device *pdev) {
> > +       struct nvmem_device *nvmem = platform_get_drvdata(pdev);
> > +
> > +       return nvmem_unregister(nvmem); }
> > +
> > +static const struct of_device_id uniphier_efuse_of_match[] = {
> > +       { .compatible = "socionext,uniphier-efuse",},
> > +       {/* sentinel */},
> > +};
> > +MODULE_DEVICE_TABLE(of, uniphier_efuse_of_match);
> > +
> > +static struct platform_driver uniphier_efuse_driver = {
> > +       .probe = uniphier_efuse_probe,
> > +       .remove = uniphier_efuse_remove,
> > +       .driver = {
> > +               .name = "uniphier-efuse",
> > +               .of_match_table = uniphier_efuse_of_match,
> > +       },
> > +};
> > +module_platform_driver(uniphier_efuse_driver);
> > +
> > +MODULE_AUTHOR("Keiji Hayashibara <hayashibara.keiji@socionext.com>");
> > +MODULE_DESCRIPTION("UniPhier eFuse driver"); MODULE_LICENSE("GPL
> > +v2");
> > --
> > 2.7.4
> >
> 
> 
> 
> --
> Best Regards
> Masahiro Yamada

Best Regards,
Keiji Hayashibara

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

* Re: [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse
  2017-09-05  7:04     ` Keiji Hayashibara
@ 2017-09-12 16:15       ` Rob Herring
  2017-09-13  2:31         ` Keiji Hayashibara
  0 siblings, 1 reply; 10+ messages in thread
From: Rob Herring @ 2017-09-12 16:15 UTC (permalink / raw)
  To: Keiji Hayashibara
  Cc: 'Masahiro Yamada',
	Srinivas Kandagatla, devicetree, linux-arm-kernel,
	Linux Kernel Mailing List, Masami Hiramatsu, Jassi Brar, Hayashi,
	Kunihiko/林 邦彦,
	Owada, Kiyoshi/大和田 清志

On Tue, Sep 05, 2017 at 04:04:31PM +0900, Keiji Hayashibara wrote:
> Hello Yamada-san,
> 
> Thank you for your comment.
> 
> > From: Masahiro Yamada [mailto:yamada.masahiro@socionext.com]
> > Sent: Monday, September 4, 2017 9:56 PM
> > 
> > 2017-09-01 8:20 GMT+09:00 Keiji Hayashibara
> > <hayashibara.keiji@socionext.com>:
> > > Add uniphier-efuse dt-bindings documentation.
> > >
> > > Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
> > > ---
> > >  .../devicetree/bindings/nvmem/uniphier-efuse.txt   | 45
> > ++++++++++++++++++++++
> > >  1 file changed, 45 insertions(+)
> > >  create mode 100644
> > > Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt

> > > +Example:
> > > +
> > > +       soc-glue@5f900000 {
> > > +               compatible = "socionext,uniphier-ld20-soc-glue-debug",
> > > +                            "simple-mfd";
> > > +               #address-cells = <1>;
> > > +               #size-cells = <1>;
> > > +               ranges = <0x0 0x5f900000 0x2000>;
> > 
> > 
> > IMHO, I think an empty "ranges;" will clarify the code, but it is up to
> > your taste.
> > 
> > 
> > > +
> > > +               efuse {
> > > +                       compatible = "socionext,uniphier-efuse",
> > > +                                    "syscon";
> > 
> > 
> > You are adding a dedicated driver for "socionext,uniphier-efuse".
> > 
> > Then, "syscon" as well?
> > 
> 
> Since I was using the syscon interface to implement the driver,
> I specified "syscon". It's interface is syscon_node_to_regmap().
> 
> I will rethink this in v2.
> 
> > 
> > 
> > > +                       reg = <0x100 0xf00>;
> > 
> > 
> > Not so many efuse registers exist on the SoC.
> > 
> > reg = <0x100 0x200>; will be enough.
> > 
> > 
> > Or if you want to be strict to the hw spec, you can write as follows:
> > 
> >         soc-glue@5f900000 {
> >                compatible = "socionext,uniphier-ld20-soc-glue-debug";
> >                             "simple-mfd";
> >                #address-cells = <1>;
> >                #size-cells = <1>;
> >                ranges = <0x0 0x5f900000 0x2000>;
> > 
> >                efuse@100 {
> >                            compatible = "socionext,uniphier-efuse";
> >                            reg = <0x100 0x28>;
> >                };
> > 
> >                efuse@200 {
> >                            compatible = "socionext,uniphier-efuse";
> >                            reg = <0x200 0x68>;
> >                };
> >        };
> > 
> > 
> > 
> > 
> > > +                       #address-cells = <1>;
> > > +                       #size-cells = <1>;
> > > +
> > > +                       /* Data cells */
> > > +                       usb_mon: usb_mon {
> > > +                               reg = <0x154 0xc>;
> > > +                       };
> > 
> > 
> > This <0x154 0xc> represents 0x5f900254 in CPU address view.
> > (0x5f900000 + 0x100 + 0x154)
> > 
> > So many ranges conversion, and how error-prone..
> > 
> 
> Yes, indeed...
> I will modify as below.

Please don't. A non-empty ranges is preferred. It limits the scope and 
chance for errors (smaller range allows fewer possible values and 
limits the chances of having address ranges duplicated in multiple 
nodes). But yes, it does add the requirement of doing addition and/or 
OR operations. I can't review whether the address ends up being correct 
either way, but having non-empty ranges helps enforce the other things.

Rob

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

* RE: [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse
  2017-09-12 16:15       ` Rob Herring
@ 2017-09-13  2:31         ` Keiji Hayashibara
  0 siblings, 0 replies; 10+ messages in thread
From: Keiji Hayashibara @ 2017-09-13  2:31 UTC (permalink / raw)
  To: 'Rob Herring'
  Cc: Yamada, Masahiro/山田 真弘,
	Srinivas Kandagatla, devicetree, linux-arm-kernel,
	Linux Kernel Mailing List, Masami Hiramatsu, Jassi Brar, Hayashi,
	Kunihiko/林 邦彦,
	Owada, Kiyoshi/大和田 清志

Hello Rob,

Thank you for your comment.

> From: Rob Herring [mailto:robh@kernel.org]
> Sent: Wednesday, September 13, 2017 1:16 AM
> 
> On Tue, Sep 05, 2017 at 04:04:31PM +0900, Keiji Hayashibara wrote:
> > Hello Yamada-san,
> >
> > Thank you for your comment.
> >
> > > From: Masahiro Yamada [mailto:yamada.masahiro@socionext.com]
> > > Sent: Monday, September 4, 2017 9:56 PM
> > >
> > > 2017-09-01 8:20 GMT+09:00 Keiji Hayashibara
> > > <hayashibara.keiji@socionext.com>:
> > > > Add uniphier-efuse dt-bindings documentation.
> > > >
> > > > Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com>
> > > > ---
> > > >  .../devicetree/bindings/nvmem/uniphier-efuse.txt   | 45
> > > ++++++++++++++++++++++
> > > >  1 file changed, 45 insertions(+)
> > > >  create mode 100644
> > > > Documentation/devicetree/bindings/nvmem/uniphier-efuse.txt
> 
> > > > +Example:
> > > > +
> > > > +       soc-glue@5f900000 {
> > > > +               compatible =
> "socionext,uniphier-ld20-soc-glue-debug",
> > > > +                            "simple-mfd";
> > > > +               #address-cells = <1>;
> > > > +               #size-cells = <1>;
> > > > +               ranges = <0x0 0x5f900000 0x2000>;
> > >
> > >
> > > IMHO, I think an empty "ranges;" will clarify the code, but it is up
> > > to your taste.
> > >
> > >
> > > > +
> > > > +               efuse {
> > > > +                       compatible = "socionext,uniphier-efuse",
> > > > +                                    "syscon";
> > >
> > >
> > > You are adding a dedicated driver for "socionext,uniphier-efuse".
> > >
> > > Then, "syscon" as well?
> > >
> >
> > Since I was using the syscon interface to implement the driver, I
> > specified "syscon". It's interface is syscon_node_to_regmap().
> >
> > I will rethink this in v2.
> >
> > >
> > >
> > > > +                       reg = <0x100 0xf00>;
> > >
> > >
> > > Not so many efuse registers exist on the SoC.
> > >
> > > reg = <0x100 0x200>; will be enough.
> > >
> > >
> > > Or if you want to be strict to the hw spec, you can write as follows:
> > >
> > >         soc-glue@5f900000 {
> > >                compatible =
> "socionext,uniphier-ld20-soc-glue-debug";
> > >                             "simple-mfd";
> > >                #address-cells = <1>;
> > >                #size-cells = <1>;
> > >                ranges = <0x0 0x5f900000 0x2000>;
> > >
> > >                efuse@100 {
> > >                            compatible = "socionext,uniphier-efuse";
> > >                            reg = <0x100 0x28>;
> > >                };
> > >
> > >                efuse@200 {
> > >                            compatible = "socionext,uniphier-efuse";
> > >                            reg = <0x200 0x68>;
> > >                };
> > >        };
> > >
> > >
> > >
> > >
> > > > +                       #address-cells = <1>;
> > > > +                       #size-cells = <1>;
> > > > +
> > > > +                       /* Data cells */
> > > > +                       usb_mon: usb_mon {
> > > > +                               reg = <0x154 0xc>;
> > > > +                       };
> > >
> > >
> > > This <0x154 0xc> represents 0x5f900254 in CPU address view.
> > > (0x5f900000 + 0x100 + 0x154)
> > >
> > > So many ranges conversion, and how error-prone..
> > >
> >
> > Yes, indeed...
> > I will modify as below.
> 
> Please don't. A non-empty ranges is preferred. It limits the scope and
chance
> for errors (smaller range allows fewer possible values and limits the
> chances of having address ranges duplicated in multiple nodes). But yes,
> it does add the requirement of doing addition and/or OR operations. I
can't
> review whether the address ends up being correct either way, but having
> non-empty ranges helps enforce the other things.

I see. 
I will proceed with implementation by non-empty ranges.

Best Regards,
Keiji Hayashibara

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

end of thread, other threads:[~2017-09-13  2:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-31 23:20 [PATCH v1 0/3] add UniPhier efuse support Keiji Hayashibara
2017-08-31 23:20 ` [PATCH v1 1/3] dt-bindings: nvmem: add description for UniPhier eFuse Keiji Hayashibara
2017-09-04 12:55   ` Masahiro Yamada
2017-09-05  7:04     ` Keiji Hayashibara
2017-09-12 16:15       ` Rob Herring
2017-09-13  2:31         ` Keiji Hayashibara
2017-08-31 23:20 ` [PATCH v1 2/3] nvmem: uniphier: add UniPhier eFuse driver Keiji Hayashibara
2017-09-04 12:58   ` Masahiro Yamada
2017-09-07  0:36     ` Keiji Hayashibara
2017-08-31 23:20 ` [PATCH v1 3/3] arm64: dts: uniphier: add efuse node for LD20 Keiji Hayashibara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).