[1/2] dt-bindings: power: syscon-reboot: Convert bindings to json-schema
diff mbox series

Message ID 20190902150336.3600-1-krzk@kernel.org
State Changes Requested
Headers show
Series
  • [1/2] dt-bindings: power: syscon-reboot: Convert bindings to json-schema
Related show

Checks

Context Check Description
robh/dt-meta-schema fail build log
robh/checkpatch warning "total: 0 errors, 2 warnings, 68 lines checked"

Commit Message

Krzysztof Kozlowski Sept. 2, 2019, 3:03 p.m. UTC
Convert the Syscon reboot bindings to DT schema format using
json-schema.

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
---
 .../bindings/power/reset/syscon-reboot.txt    | 30 --------
 .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
 2 files changed, 68 insertions(+), 30 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
 create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml

Comments

Rob Herring Sept. 3, 2019, 7:14 a.m. UTC | #1
On Mon, Sep 2, 2019 at 4:03 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> Convert the Syscon reboot bindings to DT schema format using
> json-schema.
>
> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> ---
>  .../bindings/power/reset/syscon-reboot.txt    | 30 --------
>  .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
>  2 files changed, 68 insertions(+), 30 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
>  create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml

> diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> new file mode 100644
> index 000000000000..a583f3dc8ef4
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> @@ -0,0 +1,68 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Generic SYSCON mapped register reset driver
> +
> +maintainers:
> +  - Sebastian Reichel <sre@kernel.org>
> +
> +description: |+
> +  This is a generic reset driver using syscon to map the reset register.
> +  The reset is generally performed with a write to the reset register
> +  defined by the register map pointed by syscon reference plus the offset
> +  with the value and mask defined in the reboot node.
> +  Default will be little endian mode, 32 bit access only.
> +
> +properties:
> +  compatible:
> +    const: syscon-reboot
> +
> +  mask:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: Update only the register bits defined by the mask (32 bit).
> +    maxItems: 1

Drop this as that is already defined for uint32.

It also doesn't actually work. The $ref has to be under an 'allOf' if
you have additional schemas. A quirk of json-schema...

> +
> +  offset:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: Offset in the register map for the reboot register (in bytes).
> +    maxItems: 1
> +
> +  regmap:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description: Phandle to the register map node.
> +    maxItems: 1
> +
> +  value:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: The reset value written to the reboot register (32 bit access).
> +    maxItems: 1
> +
> +required:
> +  - compatible
> +  - regmap
> +  - offset
> +
> +allOf:
> +  - if:
> +      properties:
> +        value:
> +          not:
> +            type: array

I think you could make this a bit more readable with:

if:
  not:
    required:
      - value

However, if the tree is free of legacy usage, then you could just drop all this.

Rob
Krzysztof Kozlowski Sept. 3, 2019, 7:46 a.m. UTC | #2
On Tue, 3 Sep 2019 at 09:14, Rob Herring <robh+dt@kernel.org> wrote:
>
> On Mon, Sep 2, 2019 at 4:03 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >
> > Convert the Syscon reboot bindings to DT schema format using
> > json-schema.
> >
> > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> > ---
> >  .../bindings/power/reset/syscon-reboot.txt    | 30 --------
> >  .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
> >  2 files changed, 68 insertions(+), 30 deletions(-)
> >  delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
> >  create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
>
> > diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > new file mode 100644
> > index 000000000000..a583f3dc8ef4
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > @@ -0,0 +1,68 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Generic SYSCON mapped register reset driver
> > +
> > +maintainers:
> > +  - Sebastian Reichel <sre@kernel.org>
> > +
> > +description: |+
> > +  This is a generic reset driver using syscon to map the reset register.
> > +  The reset is generally performed with a write to the reset register
> > +  defined by the register map pointed by syscon reference plus the offset
> > +  with the value and mask defined in the reboot node.
> > +  Default will be little endian mode, 32 bit access only.
> > +
> > +properties:
> > +  compatible:
> > +    const: syscon-reboot
> > +
> > +  mask:
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    description: Update only the register bits defined by the mask (32 bit).
> > +    maxItems: 1
>
> Drop this as that is already defined for uint32.
>
> It also doesn't actually work. The $ref has to be under an 'allOf' if
> you have additional schemas. A quirk of json-schema...
>
> > +
> > +  offset:
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    description: Offset in the register map for the reboot register (in bytes).
> > +    maxItems: 1
> > +
> > +  regmap:
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +    description: Phandle to the register map node.
> > +    maxItems: 1
> > +
> > +  value:
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    description: The reset value written to the reboot register (32 bit access).
> > +    maxItems: 1
> > +
> > +required:
> > +  - compatible
> > +  - regmap
> > +  - offset
> > +
> > +allOf:
> > +  - if:
> > +      properties:
> > +        value:
> > +          not:
> > +            type: array
>
> I think you could make this a bit more readable with:
>
> if:
>   not:
>     required:
>       - value

I do not understand how does it work (value is not mentioned in the
required fields so why checking of it?)... but it works fine.

> However, if the tree is free of legacy usage, then you could just drop all this.

One of them - mask or value - has to be provided.

Thanks for review,
Kryzsztof
Rob Herring Sept. 3, 2019, 9 a.m. UTC | #3
On Tue, Sep 3, 2019 at 8:47 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> On Tue, 3 Sep 2019 at 09:14, Rob Herring <robh+dt@kernel.org> wrote:
> >
> > On Mon, Sep 2, 2019 at 4:03 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > >
> > > Convert the Syscon reboot bindings to DT schema format using
> > > json-schema.
> > >
> > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> > > ---
> > >  .../bindings/power/reset/syscon-reboot.txt    | 30 --------
> > >  .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
> > >  2 files changed, 68 insertions(+), 30 deletions(-)
> > >  delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
> > >  create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> >
> > > diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > new file mode 100644
> > > index 000000000000..a583f3dc8ef4
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > @@ -0,0 +1,68 @@
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: Generic SYSCON mapped register reset driver
> > > +
> > > +maintainers:
> > > +  - Sebastian Reichel <sre@kernel.org>
> > > +
> > > +description: |+
> > > +  This is a generic reset driver using syscon to map the reset register.
> > > +  The reset is generally performed with a write to the reset register
> > > +  defined by the register map pointed by syscon reference plus the offset
> > > +  with the value and mask defined in the reboot node.
> > > +  Default will be little endian mode, 32 bit access only.
> > > +
> > > +properties:
> > > +  compatible:
> > > +    const: syscon-reboot
> > > +
> > > +  mask:
> > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > +    description: Update only the register bits defined by the mask (32 bit).
> > > +    maxItems: 1
> >
> > Drop this as that is already defined for uint32.
> >
> > It also doesn't actually work. The $ref has to be under an 'allOf' if
> > you have additional schemas. A quirk of json-schema...
> >
> > > +
> > > +  offset:
> > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > +    description: Offset in the register map for the reboot register (in bytes).
> > > +    maxItems: 1
> > > +
> > > +  regmap:
> > > +    $ref: /schemas/types.yaml#/definitions/phandle
> > > +    description: Phandle to the register map node.
> > > +    maxItems: 1
> > > +
> > > +  value:
> > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > +    description: The reset value written to the reboot register (32 bit access).
> > > +    maxItems: 1
> > > +
> > > +required:
> > > +  - compatible
> > > +  - regmap
> > > +  - offset
> > > +
> > > +allOf:
> > > +  - if:
> > > +      properties:
> > > +        value:
> > > +          not:
> > > +            type: array
> >
> > I think you could make this a bit more readable with:
> >
> > if:
> >   not:
> >     required:
> >       - value
>
> I do not understand how does it work (value is not mentioned in the
> required fields so why checking of it?)... but it works fine.

What's under required doesn't have to be listed as a property.

> > However, if the tree is free of legacy usage, then you could just drop all this.
>
> One of them - mask or value - has to be provided.

Or both, right?

Actually, a better way to express it is probably this:

oneOf:
  - required: [ value ]
  - required: [ mask ]
  - required: [ value, mask ]

Rob
Krzysztof Kozlowski Sept. 3, 2019, 11:44 a.m. UTC | #4
On Tue, 3 Sep 2019 at 11:00, Rob Herring <robh+dt@kernel.org> wrote:
>
> On Tue, Sep 3, 2019 at 8:47 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >
> > On Tue, 3 Sep 2019 at 09:14, Rob Herring <robh+dt@kernel.org> wrote:
> > >
> > > On Mon, Sep 2, 2019 at 4:03 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > > >
> > > > Convert the Syscon reboot bindings to DT schema format using
> > > > json-schema.
> > > >
> > > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> > > > ---
> > > >  .../bindings/power/reset/syscon-reboot.txt    | 30 --------
> > > >  .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
> > > >  2 files changed, 68 insertions(+), 30 deletions(-)
> > > >  delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
> > > >  create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > >
> > > > diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > > new file mode 100644
> > > > index 000000000000..a583f3dc8ef4
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > > @@ -0,0 +1,68 @@
> > > > +# SPDX-License-Identifier: GPL-2.0
> > > > +%YAML 1.2
> > > > +---
> > > > +$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
> > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > +
> > > > +title: Generic SYSCON mapped register reset driver
> > > > +
> > > > +maintainers:
> > > > +  - Sebastian Reichel <sre@kernel.org>
> > > > +
> > > > +description: |+
> > > > +  This is a generic reset driver using syscon to map the reset register.
> > > > +  The reset is generally performed with a write to the reset register
> > > > +  defined by the register map pointed by syscon reference plus the offset
> > > > +  with the value and mask defined in the reboot node.
> > > > +  Default will be little endian mode, 32 bit access only.
> > > > +
> > > > +properties:
> > > > +  compatible:
> > > > +    const: syscon-reboot
> > > > +
> > > > +  mask:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: Update only the register bits defined by the mask (32 bit).
> > > > +    maxItems: 1
> > >
> > > Drop this as that is already defined for uint32.
> > >
> > > It also doesn't actually work. The $ref has to be under an 'allOf' if
> > > you have additional schemas. A quirk of json-schema...
> > >
> > > > +
> > > > +  offset:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: Offset in the register map for the reboot register (in bytes).
> > > > +    maxItems: 1
> > > > +
> > > > +  regmap:
> > > > +    $ref: /schemas/types.yaml#/definitions/phandle
> > > > +    description: Phandle to the register map node.
> > > > +    maxItems: 1
> > > > +
> > > > +  value:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: The reset value written to the reboot register (32 bit access).
> > > > +    maxItems: 1
> > > > +
> > > > +required:
> > > > +  - compatible
> > > > +  - regmap
> > > > +  - offset
> > > > +
> > > > +allOf:
> > > > +  - if:
> > > > +      properties:
> > > > +        value:
> > > > +          not:
> > > > +            type: array
> > >
> > > I think you could make this a bit more readable with:
> > >
> > > if:
> > >   not:
> > >     required:
> > >       - value
> >
> > I do not understand how does it work (value is not mentioned in the
> > required fields so why checking of it?)... but it works fine.
>
> What's under required doesn't have to be listed as a property.
>
> > > However, if the tree is free of legacy usage, then you could just drop all this.
> >
> > One of them - mask or value - has to be provided.
>
> Or both, right?
>
> Actually, a better way to express it is probably this:
>
> oneOf:
>   - required: [ value ]
>   - required: [ mask ]
>   - required: [ value, mask ]

This does not work mask+value would be valid everywhere:

arch/arm/boot/dts/exynos3250-artik5-eval.dt.yaml: syscon-reboot:
{'regmap': [[9]], 'mask': [[1]], '$nodename': ['syscon-reboot'],
'value': [[1]], 'offset': [[1024]], 'compatible': ['syscon-reboot']}
is valid under each of {'required': ['mask']}, {'required': ['value',
'mask']}, {'required': ['value']}
Sebastian Reichel Sept. 3, 2019, 11:46 a.m. UTC | #5
On Tue, Sep 03, 2019 at 10:00:12AM +0100, Rob Herring wrote:
> On Tue, Sep 3, 2019 at 8:47 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >
> > On Tue, 3 Sep 2019 at 09:14, Rob Herring <robh+dt@kernel.org> wrote:
> > >
> > > On Mon, Sep 2, 2019 at 4:03 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > > >
> > > > Convert the Syscon reboot bindings to DT schema format using
> > > > json-schema.
> > > >
> > > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> > > > ---
> > > >  .../bindings/power/reset/syscon-reboot.txt    | 30 --------
> > > >  .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
> > > >  2 files changed, 68 insertions(+), 30 deletions(-)
> > > >  delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
> > > >  create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > >
> > > > diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > > new file mode 100644
> > > > index 000000000000..a583f3dc8ef4
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > > @@ -0,0 +1,68 @@
> > > > +# SPDX-License-Identifier: GPL-2.0
> > > > +%YAML 1.2
> > > > +---
> > > > +$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
> > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > +
> > > > +title: Generic SYSCON mapped register reset driver
> > > > +
> > > > +maintainers:
> > > > +  - Sebastian Reichel <sre@kernel.org>
> > > > +
> > > > +description: |+
> > > > +  This is a generic reset driver using syscon to map the reset register.
> > > > +  The reset is generally performed with a write to the reset register
> > > > +  defined by the register map pointed by syscon reference plus the offset
> > > > +  with the value and mask defined in the reboot node.
> > > > +  Default will be little endian mode, 32 bit access only.
> > > > +
> > > > +properties:
> > > > +  compatible:
> > > > +    const: syscon-reboot
> > > > +
> > > > +  mask:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: Update only the register bits defined by the mask (32 bit).
> > > > +    maxItems: 1
> > >
> > > Drop this as that is already defined for uint32.
> > >
> > > It also doesn't actually work. The $ref has to be under an 'allOf' if
> > > you have additional schemas. A quirk of json-schema...
> > >
> > > > +
> > > > +  offset:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: Offset in the register map for the reboot register (in bytes).
> > > > +    maxItems: 1
> > > > +
> > > > +  regmap:
> > > > +    $ref: /schemas/types.yaml#/definitions/phandle
> > > > +    description: Phandle to the register map node.
> > > > +    maxItems: 1
> > > > +
> > > > +  value:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: The reset value written to the reboot register (32 bit access).
> > > > +    maxItems: 1
> > > > +
> > > > +required:
> > > > +  - compatible
> > > > +  - regmap
> > > > +  - offset
> > > > +
> > > > +allOf:
> > > > +  - if:
> > > > +      properties:
> > > > +        value:
> > > > +          not:
> > > > +            type: array
> > >
> > > I think you could make this a bit more readable with:
> > >
> > > if:
> > >   not:
> > >     required:
> > >       - value
> >
> > I do not understand how does it work (value is not mentioned in the
> > required fields so why checking of it?)... but it works fine.
> 
> What's under required doesn't have to be listed as a property.
> 
> > > However, if the tree is free of legacy usage, then you could just drop all this.
> >
> > One of them - mask or value - has to be provided.
> 
> Or both, right?
> 
> Actually, a better way to express it is probably this:
> 
> oneOf:
>   - required: [ value ]
>   - required: [ mask ]
>   - required: [ value, mask ]

Looks good to me.

-- Sebastian
Rob Herring Sept. 3, 2019, 1:12 p.m. UTC | #6
On Tue, Sep 3, 2019 at 12:44 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> On Tue, 3 Sep 2019 at 11:00, Rob Herring <robh+dt@kernel.org> wrote:
> >
> > On Tue, Sep 3, 2019 at 8:47 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > >
> > > On Tue, 3 Sep 2019 at 09:14, Rob Herring <robh+dt@kernel.org> wrote:
> > > >
> > > > On Mon, Sep 2, 2019 at 4:03 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > > > >
> > > > > Convert the Syscon reboot bindings to DT schema format using
> > > > > json-schema.
> > > > >
> > > > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> > > > > ---
> > > > >  .../bindings/power/reset/syscon-reboot.txt    | 30 --------
> > > > >  .../bindings/power/reset/syscon-reboot.yaml   | 68 +++++++++++++++++++
> > > > >  2 files changed, 68 insertions(+), 30 deletions(-)
> > > > >  delete mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
> > > > >  create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > >
> > > > > diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > > > new file mode 100644
> > > > > index 000000000000..a583f3dc8ef4
> > > > > --- /dev/null
> > > > > +++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> > > > > @@ -0,0 +1,68 @@
> > > > > +# SPDX-License-Identifier: GPL-2.0
> > > > > +%YAML 1.2
> > > > > +---
> > > > > +$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
> > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > > +
> > > > > +title: Generic SYSCON mapped register reset driver
> > > > > +
> > > > > +maintainers:
> > > > > +  - Sebastian Reichel <sre@kernel.org>
> > > > > +
> > > > > +description: |+
> > > > > +  This is a generic reset driver using syscon to map the reset register.
> > > > > +  The reset is generally performed with a write to the reset register
> > > > > +  defined by the register map pointed by syscon reference plus the offset
> > > > > +  with the value and mask defined in the reboot node.
> > > > > +  Default will be little endian mode, 32 bit access only.
> > > > > +
> > > > > +properties:
> > > > > +  compatible:
> > > > > +    const: syscon-reboot
> > > > > +
> > > > > +  mask:
> > > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > > +    description: Update only the register bits defined by the mask (32 bit).
> > > > > +    maxItems: 1
> > > >
> > > > Drop this as that is already defined for uint32.
> > > >
> > > > It also doesn't actually work. The $ref has to be under an 'allOf' if
> > > > you have additional schemas. A quirk of json-schema...
> > > >
> > > > > +
> > > > > +  offset:
> > > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > > +    description: Offset in the register map for the reboot register (in bytes).
> > > > > +    maxItems: 1
> > > > > +
> > > > > +  regmap:
> > > > > +    $ref: /schemas/types.yaml#/definitions/phandle
> > > > > +    description: Phandle to the register map node.
> > > > > +    maxItems: 1
> > > > > +
> > > > > +  value:
> > > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > > +    description: The reset value written to the reboot register (32 bit access).
> > > > > +    maxItems: 1
> > > > > +
> > > > > +required:
> > > > > +  - compatible
> > > > > +  - regmap
> > > > > +  - offset
> > > > > +
> > > > > +allOf:
> > > > > +  - if:
> > > > > +      properties:
> > > > > +        value:
> > > > > +          not:
> > > > > +            type: array
> > > >
> > > > I think you could make this a bit more readable with:
> > > >
> > > > if:
> > > >   not:
> > > >     required:
> > > >       - value
> > >
> > > I do not understand how does it work (value is not mentioned in the
> > > required fields so why checking of it?)... but it works fine.
> >
> > What's under required doesn't have to be listed as a property.
> >
> > > > However, if the tree is free of legacy usage, then you could just drop all this.
> > >
> > > One of them - mask or value - has to be provided.
> >
> > Or both, right?
> >
> > Actually, a better way to express it is probably this:
> >
> > oneOf:
> >   - required: [ value ]
> >   - required: [ mask ]
> >   - required: [ value, mask ]
>
> This does not work mask+value would be valid everywhere:
>
> arch/arm/boot/dts/exynos3250-artik5-eval.dt.yaml: syscon-reboot:
> {'regmap': [[9]], 'mask': [[1]], '$nodename': ['syscon-reboot'],
> 'value': [[1]], 'offset': [[1024]], 'compatible': ['syscon-reboot']}
> is valid under each of {'required': ['mask']}, {'required': ['value',
> 'mask']}, {'required': ['value']}

Ahh, right. 'anyOf' is what we want:

anyOf:
  - required: [ value ]
  - required: [ mask ]
Krzysztof Kozlowski Sept. 3, 2019, 1:29 p.m. UTC | #7
On Tue, 3 Sep 2019 at 15:12, Rob Herring <robh+dt@kernel.org> wrote:
> > arch/arm/boot/dts/exynos3250-artik5-eval.dt.yaml: syscon-reboot:
> > {'regmap': [[9]], 'mask': [[1]], '$nodename': ['syscon-reboot'],
> > 'value': [[1]], 'offset': [[1024]], 'compatible': ['syscon-reboot']}
> > is valid under each of {'required': ['mask']}, {'required': ['value',
> > 'mask']}, {'required': ['value']}
>
> Ahh, right. 'anyOf' is what we want:
>
> anyOf:
>   - required: [ value ]
>   - required: [ mask ]

This triggers meta-schema error:

  SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
Traceback (most recent call last):
  File "/home/kozik/.local/lib/python3.5/site-packages/dtschema/lib.py",
line 429, in process_schema
    DTValidator.check_schema(schema)
  File "/home/kozik/.local/lib/python3.5/site-packages/dtschema/lib.py",
line 575, in check_schema
    raise jsonschema.SchemaError.create_from(error)
jsonschema.exceptions.SchemaError: Additional properties are not
allowed ('anyOf' was unexpected)

Failed validating 'additionalProperties' in metaschema['allOf'][0]:
    {'$id': 'http://devicetree.org/meta-schemas/base.yaml#',
     '$schema': 'http://json-schema.org/draft-07/schema#',
     'additionalProperties': False,
     'allOf': [{'$ref': 'http://json-schema.org/draft-07/schema#'}],
     'description': 'Metaschema for devicetree binding documentation',
     'properties': {'$id': {'pattern':
'http://devicetree.org/schemas/.*\\.yaml#'},
                    '$schema': {'enum':
['http://devicetree.org/meta-schemas/core.yaml#',

'http://devicetree.org/meta-schemas/base.yaml#']},
                    'additionalProperties': {'type': 'boolean'},
                    'allOf': {'items': {'propertyNames': {'enum': ['$ref',
                                                                   'if',
                                                                   'then',
                                                                   'else']}}},
                    'definitions': True,
                    'dependencies': True,
                    'description': True,
                    'else': True,
                    'examples': {'items': {'type': 'string'},
                                 'type': 'array'},
                    'if': True,
                    'maintainers': {'items': {'format': 'email',
                                              'type': 'string'},
                                    'type': 'array'},
                    'oneOf': True,
                    'patternProperties': True,
                    'properties': True,
                    'required': True,
                    'select': {'allOf': [{'$ref':
'http://json-schema.org/draft-07/schema#'},
                                         {'oneOf': [{'properties':
{'properties': True,

'required': True},
                                                     'type': 'object'},
                                                    {'type': 'boolean'}]}]},
                    'then': True,
                    'title': {'maxLength': 100},
                    'unevaluatedProperties': {'type': 'boolean'}},
     'required': ['$id', '$schema', 'title', 'maintainers']}

Best regards,
Krzysztof

Patch
diff mbox series

diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.txt b/Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
deleted file mode 100644
index e23dea8344f8..000000000000
--- a/Documentation/devicetree/bindings/power/reset/syscon-reboot.txt
+++ /dev/null
@@ -1,30 +0,0 @@ 
-Generic SYSCON mapped register reset driver
-
-This is a generic reset driver using syscon to map the reset register.
-The reset is generally performed with a write to the reset register
-defined by the register map pointed by syscon reference plus the offset
-with the value and mask defined in the reboot node.
-
-Required properties:
-- compatible: should contain "syscon-reboot"
-- regmap: this is phandle to the register map node
-- offset: offset in the register map for the reboot register (in bytes)
-- value: the reset value written to the reboot register (32 bit access)
-
-Optional properties:
-- mask: update only the register bits defined by the mask (32 bit)
-
-Legacy usage:
-If a node doesn't contain a value property but contains a mask property, the
-mask property is used as the value.
-
-Default will be little endian mode, 32 bit access only.
-
-Examples:
-
-	reboot {
-	   compatible = "syscon-reboot";
-	   regmap = <&regmapnode>;
-	   offset = <0x0>;
-	   mask = <0x1>;
-	};
diff --git a/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
new file mode 100644
index 000000000000..a583f3dc8ef4
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
@@ -0,0 +1,68 @@ 
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Generic SYSCON mapped register reset driver
+
+maintainers:
+  - Sebastian Reichel <sre@kernel.org>
+
+description: |+
+  This is a generic reset driver using syscon to map the reset register.
+  The reset is generally performed with a write to the reset register
+  defined by the register map pointed by syscon reference plus the offset
+  with the value and mask defined in the reboot node.
+  Default will be little endian mode, 32 bit access only.
+
+properties:
+  compatible:
+    const: syscon-reboot
+
+  mask:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: Update only the register bits defined by the mask (32 bit).
+    maxItems: 1
+
+  offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: Offset in the register map for the reboot register (in bytes).
+    maxItems: 1
+
+  regmap:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: Phandle to the register map node.
+    maxItems: 1
+
+  value:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: The reset value written to the reboot register (32 bit access).
+    maxItems: 1
+
+required:
+  - compatible
+  - regmap
+  - offset
+
+allOf:
+  - if:
+      properties:
+        value:
+          not:
+            type: array
+    then:
+      required:
+        - mask
+    else:
+      required:
+        - value
+
+examples:
+  - |
+    reboot {
+      compatible = "syscon-reboot";
+      regmap = <&regmapnode>;
+      offset = <0x0>;
+      mask = <0x1>;
+    };