diff mbox series

[RFC,3/4] dt-bindings: mtd: add OTP bindings

Message ID 20210322181949.2805-4-michael@walle.cc
State Changes Requested
Headers show
Series mtd: core: OTP nvmem provider support | expand

Checks

Context Check Description
robh/checkpatch success
robh/dt-meta-schema success
robh/dtbs-check success

Commit Message

Michael Walle March 22, 2021, 6:19 p.m. UTC
Flash devices can have one-time-programmable regions. Add a nvmem
binding so they can be used as a nvmem provider.

Signed-off-by: Michael Walle <michael@walle.cc>
---
 .../devicetree/bindings/mtd/mtd.yaml          | 71 +++++++++++++++++++
 1 file changed, 71 insertions(+)

Comments

Rob Herring March 27, 2021, 5:09 p.m. UTC | #1
On Mon, Mar 22, 2021 at 07:19:48PM +0100, Michael Walle wrote:
> Flash devices can have one-time-programmable regions. Add a nvmem
> binding so they can be used as a nvmem provider.
> 
> Signed-off-by: Michael Walle <michael@walle.cc>
> ---
>  .../devicetree/bindings/mtd/mtd.yaml          | 71 +++++++++++++++++++
>  1 file changed, 71 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/mtd/mtd.yaml b/Documentation/devicetree/bindings/mtd/mtd.yaml
> index 321259aab0f6..2b852f91a6a9 100644
> --- a/Documentation/devicetree/bindings/mtd/mtd.yaml
> +++ b/Documentation/devicetree/bindings/mtd/mtd.yaml
> @@ -21,6 +21,25 @@ properties:
>        based name) in order to ease flash device identification and/or
>        describe what they are used for.
>  
> +patternProperties:
> +  "^otp(-[0-9]+)?":

Needs '$' on the end.

> +    type: object
> +    $ref: ../nvmem/nvmem.yaml#
> +
> +    description: |
> +      An OTP memory region. Some flashes provide a one-time-programmable
> +      memory whose content can either be programmed by a user or is already
> +      pre-programmed by the factory. Some flashes might provide both.
> +
> +    properties:
> +      compatible:
> +        enum:
> +          - mtd-user-otp
> +          - mtd-factory-otp
> +
> +    required:
> +      - compatible
> +
>  additionalProperties: true
>  
>  examples:
> @@ -36,4 +55,56 @@ examples:
>          };
>      };
>  
> +  - |
> +    spi {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        flash@0 {
> +            reg = <0>;
> +            compatible = "some,flash";

Soon (in linux-next, but off by default) this will be a warning for 
undocumented compatible string. Use a real device.

> +
> +            otp {
> +                compatible = "mtd-user-otp";
> +                #address-cells = <1>;
> +                #size-cells = <1>;
> +
> +                serial-number@0 {
> +                    reg = <0 16>;
> +                };
> +            };
> +        };
> +    };
> +
> +  - |
> +    spi {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        flash@0 {
> +            reg = <0>;
> +            compatible = "some,flash";
> +
> +            otp-1 {
> +                compatible = "mtd-factory-otp";
> +                #address-cells = <1>;
> +                #size-cells = <1>;
> +
> +                electronic-serial-number@0 {
> +                    reg = <0 8>;
> +                };
> +            };
> +
> +            otp-2 {
> +                compatible = "mtd-user-otp";
> +                #address-cells = <1>;
> +                #size-cells = <1>;
> +
> +                mac-address@0 {
> +                    reg = <0 6>;
> +                };
> +            };
> +        };
> +    };

The 2nd example is a superset of the 1st, so drop the first one.

Rob
Michael Walle March 30, 2021, 10:07 a.m. UTC | #2
Hi Rob,

Am 2021-03-27 18:09, schrieb Rob Herring:
>> +    spi {
>> +        #address-cells = <1>;
>> +        #size-cells = <0>;
>> +
>> +        flash@0 {
>> +            reg = <0>;
>> +            compatible = "some,flash";
> 
> Soon (in linux-next, but off by default) this will be a warning for
> undocumented compatible string. Use a real device.

Two questions:
(1) I guess this is also true for "PATCH 2/4", where you already added
     your Reviewed-by?
(2) I'd add the "jedec,spi-nor" because, that is the one I target. But
     before doing so, I'd need to add the otp subnode to the spi-nor
     schema, correct? Otherwise, the schema validation will fail. Eg.

--- a/Documentation/devicetree/bindings/mtd/jedec,spi-nor.yaml
+++ b/Documentation/devicetree/bindings/mtd/jedec,spi-nor.yaml
@@ -9,6 +9,9 @@ title: SPI NOR flash ST M25Pxx (and similar) serial 
flash chips
  maintainers:
    - Rob Herring <robh@kernel.org>

+allOf:
+  - $ref: "mtd.yaml#"
+
  properties:
    compatible:
      oneOf:
@@ -82,6 +85,9 @@ patternProperties:
    '^partition@':
      type: object

+  "^otp(-[0-9]+)?$":
+    type: object
+
  additionalProperties: false

  examples:

-michael
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/mtd/mtd.yaml b/Documentation/devicetree/bindings/mtd/mtd.yaml
index 321259aab0f6..2b852f91a6a9 100644
--- a/Documentation/devicetree/bindings/mtd/mtd.yaml
+++ b/Documentation/devicetree/bindings/mtd/mtd.yaml
@@ -21,6 +21,25 @@  properties:
       based name) in order to ease flash device identification and/or
       describe what they are used for.
 
+patternProperties:
+  "^otp(-[0-9]+)?":
+    type: object
+    $ref: ../nvmem/nvmem.yaml#
+
+    description: |
+      An OTP memory region. Some flashes provide a one-time-programmable
+      memory whose content can either be programmed by a user or is already
+      pre-programmed by the factory. Some flashes might provide both.
+
+    properties:
+      compatible:
+        enum:
+          - mtd-user-otp
+          - mtd-factory-otp
+
+    required:
+      - compatible
+
 additionalProperties: true
 
 examples:
@@ -36,4 +55,56 @@  examples:
         };
     };
 
+  - |
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        flash@0 {
+            reg = <0>;
+            compatible = "some,flash";
+
+            otp {
+                compatible = "mtd-user-otp";
+                #address-cells = <1>;
+                #size-cells = <1>;
+
+                serial-number@0 {
+                    reg = <0 16>;
+                };
+            };
+        };
+    };
+
+  - |
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        flash@0 {
+            reg = <0>;
+            compatible = "some,flash";
+
+            otp-1 {
+                compatible = "mtd-factory-otp";
+                #address-cells = <1>;
+                #size-cells = <1>;
+
+                electronic-serial-number@0 {
+                    reg = <0 8>;
+                };
+            };
+
+            otp-2 {
+                compatible = "mtd-user-otp";
+                #address-cells = <1>;
+                #size-cells = <1>;
+
+                mac-address@0 {
+                    reg = <0 6>;
+                };
+            };
+        };
+    };
+
 ...