2022-01-24 19:32:03

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 0/3] nvmem: allow specifying cells by just names in DT

From: Rafał Miłecki <[email protected]>

This is a simplified & cleaned up version of my:
[PATCH 0/5] nvmem: support more NVMEM cells variants

These changes will allow me to improve BCM5301X support with:

diff --git a/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts b/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
index 24ae3c8a3..9efcb2424 100644
--- a/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
+++ b/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
@@ -25,6 +25,9 @@ memory@0 {
nvram@1eff0000 {
compatible = "brcm,nvram";
reg = <0x1eff0000 0x10000>;
+
+ et0macaddr: et0macaddr {
+ };
};

leds {
@@ -72,6 +75,11 @@ restart {
};
};

+&gmac0 {
+ nvmem-cells = <&et0macaddr>;
+ nvmem-cell-names = "mac-address";
+};
+
&usb3 {
vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
};

Rafał Miłecki (3):
dt-bindings: nvmem: make "reg" property optional
dt-bindings: nvmem: brcm,nvram: add NVMEM cell to example
nvmem: core: add cell name based matching of DT cell nodes

.../devicetree/bindings/nvmem/brcm,nvram.yaml | 7 +++--
.../devicetree/bindings/nvmem/nvmem.yaml | 3 ---
drivers/nvmem/core.c | 27 +++++++++++++++++++
3 files changed, 32 insertions(+), 5 deletions(-)

--
2.31.1


2022-01-24 19:32:05

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 3/3] nvmem: core: add cell name based matching of DT cell nodes

From: Rafał Miłecki <[email protected]>

When adding NVMEM cells defined by driver it's important to match them
with DT nodes that specify matching names. That way other bindings &
drivers can reference such "dynamic" NVMEM cells.

Signed-off-by: Rafał Miłecki <[email protected]>
---
drivers/nvmem/core.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 23a38dcf0fc4..9a1299a7f46a 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -499,6 +499,31 @@ static int nvmem_cell_info_to_nvmem_cell_entry(struct nvmem_device *nvmem,
return 0;
}

+/**
+ * nvmem_find_cell_of_node() - Find DT node matching nvmem cell
+ *
+ * @nvmem: nvmem provider
+ * @name: nvmem cell name
+ *
+ * Runtime created nvmem cells (those not coming from DT) may still need to be
+ * referenced in DT. This function allows finding DT node referencing nvmem cell
+ * by its name. Such a DT node can be then used by nvmem consumers.
+ *
+ * Return: NULL or pointer to DT node
+ */
+static struct device_node *nvmem_find_cell_of_node(struct nvmem_device *nvmem,
+ const char *name)
+{
+ struct device_node *child;
+
+ for_each_child_of_node(nvmem->dev.of_node, child) {
+ if (!strcmp(child->name, name))
+ return child;
+ }
+
+ return NULL;
+}
+
/**
* nvmem_add_cells() - Add cell information to an nvmem device
*
@@ -532,6 +557,8 @@ static int nvmem_add_cells(struct nvmem_device *nvmem,
goto err;
}

+ cells[i]->np = nvmem_find_cell_of_node(nvmem, cells[i]->name);
+
nvmem_cell_entry_add(cells[i]);
}

--
2.31.1

2022-01-24 19:32:06

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 2/3] dt-bindings: nvmem: brcm,nvram: add NVMEM cell to example

From: Rafał Miłecki <[email protected]>

NVRAM doesn't have cells at hardcoded addresses. They are stored in
internal struct (custom & dynamic format) . It's still important to
define relevant cells in DT so NVMEM consumers can reference them.

One of cells set in almost every device is "et0macaddr" containing MAC
address. Add it to example to show how it can be referenced.

Signed-off-by: Rafał Miłecki <[email protected]>
---
Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml b/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml
index 8c3f0cd22821..ab14e3ae45c8 100644
--- a/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml
+++ b/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml
@@ -32,6 +32,9 @@ unevaluatedProperties: false
examples:
- |
nvram@1eff0000 {
- compatible = "brcm,nvram";
- reg = <0x1eff0000 0x10000>;
+ compatible = "brcm,nvram";
+ reg = <0x1eff0000 0x10000>;
+
+ mac: et0macaddr {
+ };
};
--
2.31.1

2022-01-24 19:32:29

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 1/3] dt-bindings: nvmem: make "reg" property optional

From: Rafał Miłecki <[email protected]>

Most NVMEM providers have cells at hardcoded addresses however there are
some exceptions. Some devices store cells layout in internal structs
using custom formats.

It's important to allow NVMEM consumers to still reference such NVMEM
cells. Making "reg" optional allows defining NVMEM cells by their names
only and using them with phandles.

Signed-off-by: Rafał Miłecki <[email protected]>
---
Documentation/devicetree/bindings/nvmem/nvmem.yaml | 3 ---
1 file changed, 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/nvmem/nvmem.yaml b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
index 43ed7e32e5ac..3bb349c634cb 100644
--- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml
+++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
@@ -60,9 +60,6 @@ patternProperties:
description:
Size in bit within the address range specified by reg.

- required:
- - reg
-
additionalProperties: true

examples:
--
2.31.1

2022-02-11 15:47:53

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V2 0/3] nvmem: allow specifying cells by just names in DT

From: Rafał Miłecki <[email protected]>

This is V2 of my:
[PATCH 0/3] nvmem: allow specifying cells by just names in DT

These changes will allow me to improve BCM5301X support with:

diff --git a/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts b/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
index 24ae3c8a3..9efcb2424 100644
--- a/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
+++ b/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
@@ -25,6 +25,9 @@ memory@0 {
nvram@1eff0000 {
compatible = "brcm,nvram";
reg = <0x1eff0000 0x10000>;
+
+ et0macaddr: et0macaddr {
+ };
};

leds {
@@ -72,6 +75,11 @@ restart {
};
};

+&gmac0 {
+ nvmem-cells = <&et0macaddr>;
+ nvmem-cell-names = "mac-address";
+};
+
&usb3 {
vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
};

Rafał Miłecki (3):
dt-bindings: nvmem: make "reg" property optional
dt-bindings: nvmem: brcm,nvram: add NVMEM cell to example
nvmem: core: add cell name based matching of DT cell nodes

.../devicetree/bindings/nvmem/brcm,nvram.yaml | 16 +++++++++--
.../devicetree/bindings/nvmem/nvmem.yaml | 3 ---
drivers/nvmem/core.c | 27 +++++++++++++++++++
3 files changed, 41 insertions(+), 5 deletions(-)

--
2.34.1

2022-02-11 16:31:48

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH 1/3] dt-bindings: nvmem: make "reg" property optional

On Mon, 24 Jan 2022 17:02:58 +0100, Rafał Miłecki wrote:
> From: Rafał Miłecki <[email protected]>
>
> Most NVMEM providers have cells at hardcoded addresses however there are
> some exceptions. Some devices store cells layout in internal structs
> using custom formats.
>
> It's important to allow NVMEM consumers to still reference such NVMEM
> cells. Making "reg" optional allows defining NVMEM cells by their names
> only and using them with phandles.
>
> Signed-off-by: Rafał Miłecki <[email protected]>
> ---
> Documentation/devicetree/bindings/nvmem/nvmem.yaml | 3 ---
> 1 file changed, 3 deletions(-)
>

Reviewed-by: Rob Herring <[email protected]>

2022-02-14 07:32:56

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: nvmem: brcm,nvram: add NVMEM cell to example

On Mon, Jan 24, 2022 at 05:02:59PM +0100, Rafał Miłecki wrote:
> From: Rafał Miłecki <[email protected]>
>
> NVRAM doesn't have cells at hardcoded addresses. They are stored in
> internal struct (custom & dynamic format) . It's still important to
> define relevant cells in DT so NVMEM consumers can reference them.
>
> One of cells set in almost every device is "et0macaddr" containing MAC
> address. Add it to example to show how it can be referenced.

"et0macaddr" is defined in the internal struct? Can you make this
explicit in the the schema that's where the child node names come from.
Perhaps go as far as documenting what some of the names are if they are
common and not documented elsewhere.

>
> Signed-off-by: Rafał Miłecki <[email protected]>
> ---
> Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml b/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml
> index 8c3f0cd22821..ab14e3ae45c8 100644
> --- a/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml
> +++ b/Documentation/devicetree/bindings/nvmem/brcm,nvram.yaml
> @@ -32,6 +32,9 @@ unevaluatedProperties: false
> examples:
> - |
> nvram@1eff0000 {
> - compatible = "brcm,nvram";
> - reg = <0x1eff0000 0x10000>;
> + compatible = "brcm,nvram";
> + reg = <0x1eff0000 0x10000>;
> +
> + mac: et0macaddr {
> + };
> };
> --
> 2.31.1
>
>

2022-02-18 08:02:51

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V3 0/3] nvmem: allow specifying cells by just names in DT

From: Rafał Miłecki <[email protected]>

These changes will allow me to improve BCM5301X support with:

diff --git a/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts b/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
index 24ae3c8a3..9efcb2424 100644
--- a/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
+++ b/arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
@@ -25,6 +25,9 @@ memory@0 {
nvram@1eff0000 {
compatible = "brcm,nvram";
reg = <0x1eff0000 0x10000>;
+
+ et0macaddr: et0macaddr {
+ };
};

leds {
@@ -72,6 +75,11 @@ restart {
};
};

+&gmac0 {
+ nvmem-cells = <&et0macaddr>;
+ nvmem-cell-names = "mac-address";
+};
+
&usb3 {
vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
};

Rafał Miłecki (3):
dt-bindings: nvmem: make "reg" property optional
dt-bindings: nvmem: brcm,nvram: add basic NVMEM cells
nvmem: core: add cell name based matching of DT cell nodes

.../devicetree/bindings/nvmem/brcm,nvram.yaml | 25 +++++++++++++++--
.../devicetree/bindings/nvmem/nvmem.yaml | 3 ---
drivers/nvmem/core.c | 27 +++++++++++++++++++
3 files changed, 50 insertions(+), 5 deletions(-)

--
2.34.1