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

From: Chris Packham
Date: Tue Jun 06 2023 - 00:38:17 EST



On 6/06/23 08:44, Chris Packham wrote:
>
> On 4/06/23 21:26, Krzysztof Kozlowski wrote:
>> On 02/06/2023 01:06, Chris Packham wrote:
>>> 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@xxxxxxxxxxx>
>>>>>
>>>>> 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@xxxxxxxxxxx>
>>>>> Signed-off-by: Chris Packham <chris.packham@xxxxxxxxxxxxxxxxxxx>
>>>>> ---
>>>>>
>>>>> 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.
>
>>>>>       - 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@xxxxxxxxxxx>
>>>>> +
>>>>> +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).
>> 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.
>>>          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?
>> 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.

So I think this might be the problem. If I look at qcom,nandc.yaml or
ingenic,nand.yaml which both have a partitions property in their
example. Neither have 'unevaluatedProperties: false' on the nand@...
subnode. If I add it sure enough I start getting complaints about the
'partitions' node being unexpected.

>
>>
>> Best regards,
>> Krzysztof