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

Chris Packham Chris.Packham at alliedtelesis.co.nz
Thu Jun 1 16:06:38 PDT 2023


Hi Krzystof,

On 1/06/23 19:05, Krzysztof Kozlowski wrote:
> On 01/06/2023 01:49, Chris Packham wrote:
>> From: Vadym Kochan <vadym.kochan at plvision.eu>
>>
>> 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 <vadym.kochan at plvision.eu>
>> Signed-off-by: Chris Packham <chris.packham at 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.
>>      - 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=18P45NWaR4V6pXt_kuivNCiVAXCm3C7MEF-_8xrP2A&u=http%3a%2f%2fdevicetree%2eorg%2fschemas%2fmtd%2fmarvell%2cnand-controller%2eyaml%23
>> +$schema: http://scanmail.trustwave.com/?c=20988&d=18P45NWaR4V6pXt_kuivNCiVAXCm3C7MEFvq8B-ZjQ&u=http%3a%2f%2fdevicetree%2eorg%2fmeta-schemas%2fcore%2eyaml%23
>> +
>> +title: Marvell NAND Flash Controller (NFC)
>> +
>> +maintainers:
>> +  - Miquel Raynal <miquel.raynal at 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.
>
>> +        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).

        nand-rb:
         items:
           - minimum: 0
             maximum: 1

>
>> +
>> +      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
>
>> +
>> +      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.

>> +
>> +      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?
>
>> +
>> +    required:
>> +      - reg
>> +      - nand-rb
>> +
> required: block goes here
Will move
>
>> +allOf:
>> +  - $ref: nand-controller.yaml
>> +
>> +  - if:
>> +      properties:
>> +        compatible:
>> +          contains:
>> +            const: marvell,pxa3xx-nand-controller
>> +    then:
>> +      required:
>> +        - dmas
>> +        - dma-names
>> +
>> +  - if:
>> +      properties:
>> +        compatible:
>> +          contains:
>> +            const: marvell,armada-8k-nand-controller
>> +    then:
>> +      properties:
>> +        clocks:
>> +          minItems: 2
>> +
>> +        clock-names:
>> +          minItems: 2
>> +
>> +      required:
>> +        - marvell,system-controller
>> +
>
> Best regards,
> Krzysztof
>


More information about the linux-mtd mailing list