Thread (21 messages) 21 messages, 4 authors, 2023-06-06

Re: [PATCH v8 3/3] dt-bindings: mtd: marvell-nand: Convert to YAML DT scheme

flat view

From: Chris Packham <Chris.Packham@alliedtelesis.co.nz>
Date: 2023-06-05 20:44:55
Also in: linux-devicetree, lkml

On 4/06/23 21:26, Krzysztof Kozlowski wrote:
On 02/06/2023 01:06, Chris Packham wrote:
quoted
Hi Krzystof,

On 1/06/23 19:05, Krzysztof Kozlowski wrote:
quoted
On 01/06/2023 01:49, Chris Packham wrote:
quoted
From: Vadym Kochan <redacted>

Switch the DT binding to a YAML schema to enable the DT validation.

The text binding didn't mention it as a requirement but existing usage
has

     compatible = "marvell,armada-8k-nand-controller",
                  "marvell,armada370-nand-controller";

so the YAML allows this in addition to the individual compatible values.

There was also an incorrect reference to dma-names being "rxtx" where
the driver and existing device trees actually use dma-names = "data" so
this is corrected in the conversion.

Signed-off-by: Vadym Kochan <redacted>
Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
---

Notes:
      Changes in v8:
      - Mark deprecated compatible values as such
      - Allow "marvell,armada-8k-nand-controller" without
        "marvell,armada370-nand-controller"
      - Make dma-names usage reflect reality
      - Update commit message
      
      Changes in v7:
      - Restore "label" and "partitions" properties (should be picked up via
        nand-controller.yaml but aren't)
What do you mean by "aren't"? They are not needed.
(sorry I keep responding to snippets rather than putting all the replies
in one place. For posterity here's the same response I provided in a
separate message).

I mean I simply cannot make it work and I'm out of ideas (I'm also in an
awkward timezone so it takes 24hrs for me to ask a question and get a
response which leads to me making guesses instead of waiting).

nand-controller.yaml references nand-chip.yaml which references mtd.yaml
which defines the "label" and "partitions" property.

I thought marvell,nand-controller.yaml could just say `$ref:
nand-controller.yaml` and it would mean I'd get all the definitions down
the chain but this doesn't seem to work the way I expect (or more likely
I'm not doing it right). I thought it might have something to do with
the different patternProperties pattern but even when I make that match
what is used in nand-controller.yaml it doesn't seem to pick up those
properties.
Then you are doing something different than all other bindings.
Not intentionally. I should probably check that the existing bindings 
actually work as expected.

One thing that this has that the others don't is including "label" and 
"partitions" in the examples.
quoted
quoted
quoted
      - Add/restore nand-on-flash-bbt and nand-ecc-mode which aren't covered
        by nand-controller.yaml.
      - Use "unevalautedProperties: false"
      - Corrections for clock-names, dma-names, nand-rb and nand-ecc-strength
      - Add pxa3xx-nand-controller example
      
      Changes in v6:
      - remove properties covered by nand-controller.yaml
      - add example using armada-8k compatible
      
      earlier changes:
      
      v5:
         1) Get back "label" and "partitions" properties but without
            ref to the "partition.yaml" which was wrongly used.
      
         2) Add "additionalProperties: false" for nand@ because all possible
            properties are described.
      
      v4:
         1) Remove "label" and "partitions" properties
      
         2) Use 2 clocks for A7K/8K platform which is a requirement
      
      v3:
        1) Remove txt version from the MAINTAINERS list
      
        2) Use enum for some of compatible strings
      
        3) Drop:
              #address-cells
              #size-cells:
      
           as they are inherited from the nand-controller.yaml
      
        4) Add restriction to use 2 clocks for A8K SoC
      
        5) Dropped description for clock-names and extend it with
           minItems: 1
      
        6) Drop description for "dmas"
      
        7) Use "unevalautedProperties: false"
      
        8) Drop quites from yaml refs.
      
        9) Use 4-space indentation for the example section
      
      v2:
        1) Fixed warning by yamllint with incorrect indentation for compatible list

   .../bindings/mtd/marvell,nand-controller.yaml | 223 ++++++++++++++++++
   .../devicetree/bindings/mtd/marvell-nand.txt  | 126 ----------
   MAINTAINERS                                   |   1 -
   3 files changed, 223 insertions(+), 127 deletions(-)
   create mode 100644 Documentation/devicetree/bindings/mtd/marvell,nand-controller.yaml
   delete mode 100644 Documentation/devicetree/bindings/mtd/marvell-nand.txt
diff --git a/Documentation/devicetree/bindings/mtd/marvell,nand-controller.yaml b/Documentation/devicetree/bindings/mtd/marvell,nand-controller.yaml
new file mode 100644
index 000000000000..433feb430555
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/marvell,nand-controller.yaml
@@ -0,0 +1,223 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://scanmail.trustwave.com/?c=20988&d=yNj85IkMld8k0XBdA9CH4pQjE5peaXAdz-exk_Hdww&u=http%3a%2f%2fdevicetree%2eorg%2fschemas%2fmtd%2fmarvell%2cnand-controller%2eyaml%23
+$schema: http://scanmail.trustwave.com/?c=20988&d=yNj85IkMld8k0XBdA9CH4pQjE5peaXAdz-PkkPSLlg&u=http%3a%2f%2fdevicetree%2eorg%2fmeta-schemas%2fcore%2eyaml%23
+
+title: Marvell NAND Flash Controller (NFC)
+
+maintainers:
+  - Miquel Raynal <miquel.raynal@bootlin.com>
+
+properties:
+  compatible:
+    oneOf:
+      - items:
+          - const: marvell,armada-8k-nand-controller
+          - const: marvell,armada370-nand-controller
+      - enum:
+          - marvell,armada-8k-nand-controller
+          - marvell,armada370-nand-controller
+          - marvell,pxa3xx-nand-controller
+      - description: legacy bindings
+        deprecated: true
+        enum:
+          - marvell,armada-8k-nand
+          - marvell,armada370-nand
+          - marvell,pxa3xx-nand
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    description:
+      Shall reference the NAND controller clocks, the second one is
+      is only needed for the Armada 7K/8K SoCs
+    minItems: 1
+    maxItems: 2
+
+  clock-names:
+    minItems: 1
+    items:
+      - const: core
+      - const: reg
+
+  dmas:
+    maxItems: 1
+
+  dma-names:
+    items:
+      - const: data
+
+  marvell,system-controller:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: Syscon node that handles NAND controller related registers
+
+patternProperties:
+  "^nand@[0-3]$":
+    type: object
+    unevaluatedProperties: false
+    properties:
+      reg:
+        minimum: 0
+        maximum: 3
+
+      nand-rb:
+        minItems: 1
Drop minItems.
quoted
+        maxItems: 1
Didn't you have here minimum and maximum? I think I did not ask to
remove them.
I did but I couldn't figure out how to do minimum and maximum with an
array would the following be correct (note removing both minItems and
maxItems as dtb_check complains if I have maxItems and items).
items:
   minimum: n
   maximum: n
   maxItems: n

or

items:
  - minimum: n
    maximum: n

See for example Documentation/devicetree/bindings/arm/l2c2x0.yaml
Thanks, so my suggestion below should be OK then.
quoted
         nand-rb:
          items:
            - minimum: 0
              maximum: 1
quoted
quoted
+
+      nand-ecc-step-size:
+        const: 512
+
+      nand-ecc-strength:
+        enum: [1, 4, 8, 12, 16]
+
+      nand-on-flash-bbt:
+        $ref: /schemas/types.yaml#/definitions/flag
+
+      nand-ecc-mode:
+        const: hw
+
+      label:
+        $ref: /schemas/types.yaml#/definitions/string
Drop label
quoted
+
+      partitions:
+        type: object
Drop partitions.
This is the part I can't get to work. It should pick it up via
nand-controller.yaml but nothing I do seems to work.
quoted
quoted
+
+      marvell,nand-keep-config:
+        description: |
+          Orders the driver not to take the timings from the core and
+          leaving them completely untouched. Bootloader timings will then
+          be used.
+        $ref: /schemas/types.yaml#/definitions/flag
+
+      marvell,nand-enable-arbiter:
+        description: |
+          To enable the arbiter, all boards blindly used it,
+          this bit was set by the bootloader for many boards and even if
+          it is marked reserved in several datasheets, it might be needed to set
+          it (otherwise it is harmless).
+        $ref: /schemas/types.yaml#/definitions/flag
+        deprecated: true
+
+    additionalProperties: false
unevaluatedProperties: false
It was hiding by '"^nand@[0-3]$":'. Should I move it here?
You cannot have both additionalProps and unevaluatedProps at the same
time, so we do not talk about same thing or this was never working?
Hmm, I'm a little confused then. At various times I've been told to put 
'additionalProperties: false' or 'unevaluatedProperties: false' 
(although never at the same time). I'm not sure when to use one or the 
other.

 From what I've been able to glean 'additionalProperties: true' 
indicates that the node is expected to have child nodes defined in a 
different schema so I would have thought 'additionalProperties: false' 
would be appropriate for a schema covering a leaf node. 
'unevaluatedProperties: false' seems to enable stricter checking which 
makes sense when all the properties are described in the schema.

Best regards,
Krzysztof
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help