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>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20221118063932.6418-10-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
108 lines
2.7 KiB
YAML
108 lines
2.7 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/nvmem/nvmem.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: NVMEM (Non Volatile Memory)
|
|
|
|
maintainers:
|
|
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
|
|
|
description: |
|
|
This binding is intended to represent the location of hardware
|
|
configuration data stored in NVMEMs like eeprom, efuses and so on.
|
|
|
|
On a significant proportion of boards, the manufacturer has stored
|
|
some data on NVMEM, for the OS to be able to retrieve these
|
|
information and act upon it. Obviously, the OS has to know about
|
|
where to retrieve these data from, and where they are stored on the
|
|
storage device.
|
|
|
|
properties:
|
|
"#address-cells":
|
|
const: 1
|
|
|
|
"#size-cells":
|
|
const: 1
|
|
|
|
read-only:
|
|
$ref: /schemas/types.yaml#/definitions/flag
|
|
description:
|
|
Mark the provider as read only.
|
|
|
|
wp-gpios:
|
|
description:
|
|
GPIO to which the write-protect pin of the chip is connected.
|
|
The write-protect GPIO is asserted, when it's driven high
|
|
(logical '1') to block the write operation. It's deasserted,
|
|
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
|
|
|
|
properties:
|
|
reg:
|
|
maxItems: 1
|
|
description:
|
|
Offset and size in bytes within the storage device.
|
|
|
|
bits:
|
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
|
items:
|
|
- minimum: 0
|
|
maximum: 7
|
|
description:
|
|
Offset in bit within the address range specified by reg.
|
|
- minimum: 1
|
|
description:
|
|
Size in bit within the address range specified by reg.
|
|
|
|
additionalProperties: true
|
|
|
|
examples:
|
|
- |
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
qfprom: eeprom@700000 {
|
|
compatible = "qcom,msm8974-qfprom", "qcom,qfprom";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x00700000 0x100000>;
|
|
|
|
wp-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
|
|
|
|
/* ... */
|
|
|
|
/* Data cells */
|
|
tsens_calibration: calib@404 {
|
|
reg = <0x404 0x10>;
|
|
};
|
|
|
|
tsens_calibration_bckp: calib_bckp@504 {
|
|
reg = <0x504 0x11>;
|
|
bits = <6 128>;
|
|
};
|
|
|
|
pvs_version: pvs-version@6 {
|
|
reg = <0x6 0x2>;
|
|
bits = <7 2>;
|
|
};
|
|
|
|
speed_bin: speed-bin@c{
|
|
reg = <0xc 0x1>;
|
|
bits = <2 3>;
|
|
};
|
|
};
|
|
|
|
...
|