[v4,1/5] dt-bindings: nvmem: Introduce the nvmem-layout container
Commit Message
The nvmem devices description works like this:
* Most cases (EEPROM & co):
eeprom@x {
compatible = "<eeprom-compatible>";
...
};
* MTD case:
flash@y {
compatible = "<flash-compatible>";
...
otp {
compatible = "user-otp"; /* or "factory-otp" */
...
};
};
In the former case, the nvmem device is "eeprom@x", while in the latter
case the nvmem device is "otp".
Nvmem devices can produce nvmem cells. The current way to describe nvmem
cells is to locate them by providing their static byte and bit offset
and length. These information are stored in subnodes of the nvmem
device.
It is now a fact that such description does not fit more advanced use
cases where the location or the size of the cells may vary. There are
currently three known situations which require being described
differently: Kontron's SL28 VPD, ONIE's TLV table and U-Boot's
environment variables.
Hence, we need a way to describe the parsers that must be used in order
to make the dynamic discovery of the nvmem cells. This new description
must fit both use cases (the generic situation and the MTD case).
Let's create in both cases a container node named nvmem-layout whose
content will depend on the parser. Right now nvmem-layout.yaml is
"empty", but references to additional layout parser bindings will be
inserted in the near future. The final goal being something that looks
like:
* Most cases (EEPROM & co):
eeprom@x {
compatible = "<eeprom-compatible>";
...
nvmem-layout {
compatible = "<parser-compatible>";
...
};
};
* MTD case:
flash@y {
compatible = "<flash-compatible>";
...
otp {
compatible = "user-otp"; /* or "factory-otp" */
...
nvmem-layout {
compatible = "<parser-compatible>";
...
};
};
};
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
.../bindings/nvmem/layouts/nvmem-layout.yaml | 30 +++++++++++++++++++
.../devicetree/bindings/nvmem/nvmem.yaml | 7 +++++
2 files changed, 37 insertions(+)
create mode 100644 Documentation/devicetree/bindings/nvmem/layouts/nvmem-layout.yaml
Comments
On Mon, 14 Nov 2022 09:56:55 +0100, Miquel Raynal wrote:
> The nvmem devices description works like this:
>
> * Most cases (EEPROM & co):
>
> eeprom@x {
> compatible = "<eeprom-compatible>";
> ...
> };
>
> * MTD case:
>
> flash@y {
> compatible = "<flash-compatible>";
> ...
> otp {
> compatible = "user-otp"; /* or "factory-otp" */
> ...
> };
> };
>
> In the former case, the nvmem device is "eeprom@x", while in the latter
> case the nvmem device is "otp".
>
> Nvmem devices can produce nvmem cells. The current way to describe nvmem
> cells is to locate them by providing their static byte and bit offset
> and length. These information are stored in subnodes of the nvmem
> device.
>
> It is now a fact that such description does not fit more advanced use
> cases where the location or the size of the cells may vary. There are
> currently three known situations which require being described
> differently: Kontron's SL28 VPD, ONIE's TLV table and U-Boot's
> environment variables.
>
> Hence, we need a way to describe the parsers that must be used in order
> to make the dynamic discovery of the nvmem cells. This new description
> must fit both use cases (the generic situation and the MTD case).
>
> Let's create in both cases a container node named nvmem-layout whose
> content will depend on the parser. Right now nvmem-layout.yaml is
> "empty", but references to additional layout parser bindings will be
> inserted in the near future. The final goal being something that looks
> like:
>
> * Most cases (EEPROM & co):
>
> eeprom@x {
> compatible = "<eeprom-compatible>";
> ...
> nvmem-layout {
> compatible = "<parser-compatible>";
> ...
> };
> };
>
> * MTD case:
>
> flash@y {
> compatible = "<flash-compatible>";
> ...
> otp {
> compatible = "user-otp"; /* or "factory-otp" */
> ...
> nvmem-layout {
> compatible = "<parser-compatible>";
> ...
> };
> };
> };
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> .../bindings/nvmem/layouts/nvmem-layout.yaml | 30 +++++++++++++++++++
> .../devicetree/bindings/nvmem/nvmem.yaml | 7 +++++
> 2 files changed, 37 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/nvmem/layouts/nvmem-layout.yaml
>
Reviewed-by: Rob Herring <robh@kernel.org>
new file mode 100644
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/nvmem/layouts/nvmem-layout.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NVMEM (Non Volatile Memory) layouts
+
+maintainers:
+ - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+ - Michael Walle <michael@walle.cc>
+ - Miquel Raynal <miquel.raynal@bootlin.com>
+
+description: |
+ Most NVMEM layouts are static and thus do not require additional description
+ besides the bytes/bits offset and length. Other layouts can be less statically
+ define and might require dynamic reading of the NVMEM device in order to
+ perform their parsing. The nvmem-layout container is here to describe these.
+
+properties:
+ compatible: true
+
+ '#address-cells': false
+
+ '#size-cells': false
+
+required:
+ - compatible
+
+unevaluatedProperties: false
@@ -39,6 +39,13 @@ properties:
when it's driven low (logical '0') to allow writing.
maxItems: 1
+ nvmem-layout:
+ $ref: /schemas/nvmem/layouts/nvmem-layout.yaml
+ description:
+ Alternative to the statically defined nvmem cells, this
+ container may reference more advanced (dynamic) layout
+ parsers.
+
patternProperties:
"@[0-9a-f]+(,[0-7])?$":
type: object