2022-11-25 20:32:31

by Samuel Holland

[permalink] [raw]
Subject: [PATCH 0/3] dt-bindings: net: sunxi: Fix binding validation issues

These patches fix issues found when running `make dtbs_check` on sunxi
boards. I am not 100% sure about the change in the first two patches,
but I think I understand what is happening, and the change has the
desired effect. It fixes errors of the form:

arch/arm/boot/dts/sun6i-a31s-colorfly-e708-q1.dtb: ethernet@1c30000:
Unevaluated properties are not allowed ('mdio', 'reset-names',
'resets', 'snps,fixed-burst', 'snps,force_sf_dma_mode', 'snps,pbl'
were unexpected)

where all of the listed properties are defined in snps,dwmac.yaml.

The third patch fixes an unrelated omission in the sun8i-emac binding.


Samuel Holland (3):
dt-bindings: net: sun7i-gmac: Fix snps,dwmac.yaml inheritance
dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance
dt-bindings: net: sun8i-emac: Add phy-supply property

.../devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml | 5 ++---
.../devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml | 6 +++++-
2 files changed, 7 insertions(+), 4 deletions(-)

--
2.37.4


2022-11-25 20:32:36

by Samuel Holland

[permalink] [raw]
Subject: [PATCH 1/3] dt-bindings: net: sun7i-gmac: Fix snps,dwmac.yaml inheritance

The sun7i-gmac binding extends snps,dwmac.yaml, and should accept all
properties defined there, including "mdio", "resets", and "reset-names".
However, validation currently fails for these properties because the
local binding sets "unevaluatedProperties: false", and snps,dwmac.yaml
is only included inside an allOf block. Fix this by referencing
snps,dwmac.yaml at the top level.

Signed-off-by: Samuel Holland <[email protected]>
---

.../devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml b/Documentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml
index 3bd912ed7c7e..7d2c62b4ccad 100644
--- a/Documentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml
+++ b/Documentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml
@@ -6,13 +6,12 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#

title: Allwinner A20 GMAC

-allOf:
- - $ref: "snps,dwmac.yaml#"
-
maintainers:
- Chen-Yu Tsai <[email protected]>
- Maxime Ripard <[email protected]>

+$ref: "snps,dwmac.yaml#"
+
properties:
compatible:
const: allwinner,sun7i-a20-gmac
--
2.37.4

2022-11-25 20:46:46

by Samuel Holland

[permalink] [raw]
Subject: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
properties defined there, including "mdio", "resets", and "reset-names".
However, validation currently fails for these properties because the
local binding sets "unevaluatedProperties: false", and snps,dwmac.yaml
is only included inside an allOf block. Fix this by referencing
snps,dwmac.yaml at the top level.

Signed-off-by: Samuel Holland <[email protected]>
---

.../devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
index 1432fda3b603..34a47922296d 100644
--- a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
+++ b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
@@ -10,6 +10,8 @@ maintainers:
- Chen-Yu Tsai <[email protected]>
- Maxime Ripard <[email protected]>

+$ref: "snps,dwmac.yaml#"
+
properties:
compatible:
oneOf:
@@ -60,7 +62,6 @@ required:
- syscon

allOf:
- - $ref: "snps,dwmac.yaml#"
- if:
properties:
compatible:
--
2.37.4

2022-11-26 13:29:19

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 1/3] dt-bindings: net: sun7i-gmac: Fix snps,dwmac.yaml inheritance

On 25/11/2022 21:20, Samuel Holland wrote:
> The sun7i-gmac binding extends snps,dwmac.yaml, and should accept all
> properties defined there, including "mdio", "resets", and "reset-names".
> However, validation currently fails for these properties because the
> local binding sets "unevaluatedProperties: false", and snps,dwmac.yaml
> is only included inside an allOf block. Fix this by referencing
> snps,dwmac.yaml at the top level.
>

I don't understand where is the problem and how does your patch solve
it. The old syntax is correct and your change does nothing, no fixing,
no impact. It actually looks like noop with big explanation :(

> Signed-off-by: Samuel Holland <[email protected]>
> ---


Best regards,
Krzysztof

2022-11-26 13:35:14

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

On 25/11/2022 21:20, Samuel Holland wrote:
> The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
> properties defined there, including "mdio", "resets", and "reset-names".
> However, validation currently fails for these properties because the

validation does not fail:
make dt_binding_check -> no problems

Maybe you meant that DTS do not pass dtbs_check?


> local binding sets "unevaluatedProperties: false", and snps,dwmac.yaml
> is only included inside an allOf block. Fix this by referencing
> snps,dwmac.yaml at the top level.

There is nothing being fixed here...

>
> Signed-off-by: Samuel Holland <[email protected]>
> ---
>
> .../devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> index 1432fda3b603..34a47922296d 100644
> --- a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> +++ b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> @@ -10,6 +10,8 @@ maintainers:
> - Chen-Yu Tsai <[email protected]>
> - Maxime Ripard <[email protected]>
>
> +$ref: "snps,dwmac.yaml#"
> +
> properties:
> compatible:
> oneOf:
> @@ -60,7 +62,6 @@ required:
> - syscon
>
> allOf:
> - - $ref: "snps,dwmac.yaml#"
> - if:
> properties:
> compatible:

Best regards,
Krzysztof

2022-11-26 14:29:32

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

On 25/11/2022 21:20, Samuel Holland wrote:
> The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
> properties defined there, including "mdio", "resets", and "reset-names".
> However, validation currently fails for these properties because the
> local binding sets "unevaluatedProperties: false", and snps,dwmac.yaml
> is only included inside an allOf block. Fix this by referencing
> snps,dwmac.yaml at the top level.
>
> Signed-off-by: Samuel Holland <[email protected]>
> ---
>
> .../devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>

I must admit you're right that this hides the warning from dtbs_check,
but not because something in allOf should not be included. The problem
is how disabled nodes are being parsed here by referenced schema
(snps,dwmac.yaml) and probably is a bug in dtschema package.


Best regards,
Krzysztof

2022-11-26 14:42:25

by Andre Przywara

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

On Sat, 26 Nov 2022 14:26:25 +0100
Krzysztof Kozlowski <[email protected]> wrote:

Hi,

> On 25/11/2022 21:20, Samuel Holland wrote:
> > The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
> > properties defined there, including "mdio", "resets", and "reset-names".
> > However, validation currently fails for these properties because the
>
> validation does not fail:
> make dt_binding_check -> no problems
>
> Maybe you meant that DTS do not pass dtbs_check?

Yes, that's what he meant: If a board actually doesn't have Ethernet
configured, dt-validate complains. I saw this before, but didn't find
any solution.
An example is: $ dt-validate ... sun50i-a64-pinephone-1.2.dtb
arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dtb:
ethernet@1c30000: Unevaluated properties are not allowed ('resets', 'reset-names', 'mdio' were unexpected)
From schema: Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml

Why exactly is beyond me, but this patch removes this message.

Cheers,
Andre


> > local binding sets "unevaluatedProperties: false", and snps,dwmac.yaml
> > is only included inside an allOf block. Fix this by referencing
> > snps,dwmac.yaml at the top level.
>
> There is nothing being fixed here...
>
> >
> > Signed-off-by: Samuel Holland <[email protected]>
> > ---
> >
> > .../devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> > index 1432fda3b603..34a47922296d 100644
> > --- a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> > +++ b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> > @@ -10,6 +10,8 @@ maintainers:
> > - Chen-Yu Tsai <[email protected]>
> > - Maxime Ripard <[email protected]>
> >
> > +$ref: "snps,dwmac.yaml#"
> > +
> > properties:
> > compatible:
> > oneOf:
> > @@ -60,7 +62,6 @@ required:
> > - syscon
> >
> > allOf:
> > - - $ref: "snps,dwmac.yaml#"
> > - if:
> > properties:
> > compatible:
>
> Best regards,
> Krzysztof
>
>

2022-11-26 15:35:23

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

On 26/11/2022 15:28, Andre Przywara wrote:
> On Sat, 26 Nov 2022 14:26:25 +0100
> Krzysztof Kozlowski <[email protected]> wrote:
>
> Hi,
>
>> On 25/11/2022 21:20, Samuel Holland wrote:
>>> The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
>>> properties defined there, including "mdio", "resets", and "reset-names".
>>> However, validation currently fails for these properties because the
>>
>> validation does not fail:
>> make dt_binding_check -> no problems
>>
>> Maybe you meant that DTS do not pass dtbs_check?
>
> Yes, that's what he meant: If a board actually doesn't have Ethernet
> configured, dt-validate complains. I saw this before, but didn't find
> any solution.
> An example is: $ dt-validate ... sun50i-a64-pinephone-1.2.dtb
> arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dtb:
> ethernet@1c30000: Unevaluated properties are not allowed ('resets', 'reset-names', 'mdio' were unexpected)
> From schema: Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
>
> Why exactly is beyond me, but this patch removes this message.

I don't think this should be fixed like this. That's the problem of
dtschema (not ignoring fully disabled nodes) and such patch only moves
from one correct syntax to another correct syntax, which fixes dtschema
problem, but changes nothing here.

Best regards,
Krzysztof

2022-12-01 04:02:30

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

On Sat, Nov 26, 2022 at 03:48:33PM +0100, Krzysztof Kozlowski wrote:
> On 26/11/2022 15:28, Andre Przywara wrote:
> > On Sat, 26 Nov 2022 14:26:25 +0100
> > Krzysztof Kozlowski <[email protected]> wrote:
> >
> > Hi,
> >
> >> On 25/11/2022 21:20, Samuel Holland wrote:
> >>> The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
> >>> properties defined there, including "mdio", "resets", and "reset-names".
> >>> However, validation currently fails for these properties because the
> >>
> >> validation does not fail:
> >> make dt_binding_check -> no problems
> >>
> >> Maybe you meant that DTS do not pass dtbs_check?
> >
> > Yes, that's what he meant: If a board actually doesn't have Ethernet
> > configured, dt-validate complains. I saw this before, but didn't find
> > any solution.
> > An example is: $ dt-validate ... sun50i-a64-pinephone-1.2.dtb
> > arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dtb:
> > ethernet@1c30000: Unevaluated properties are not allowed ('resets', 'reset-names', 'mdio' were unexpected)
> > From schema: Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> >
> > Why exactly is beyond me, but this patch removes this message.
>
> I don't think this should be fixed like this. That's the problem of
> dtschema (not ignoring fully disabled nodes) and such patch only moves
> from one correct syntax to another correct syntax, which fixes dtschema
> problem, but changes nothing here.

Humm, it looks to me like the 'phy-mode' required in snps,dwmac.yaml
causes the problem, but I can't get a minimized example to fail.
Something in 'required' shouldn't matter. Definitely seems like an issue
in the jsonschema package. I'll keep looking at it.

Rob

2022-12-01 18:14:08

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH 2/3] dt-bindings: net: sun8i-emac: Fix snps,dwmac.yaml inheritance

On Wed, Nov 30, 2022 at 9:45 PM Rob Herring <[email protected]> wrote:
>
> On Sat, Nov 26, 2022 at 03:48:33PM +0100, Krzysztof Kozlowski wrote:
> > On 26/11/2022 15:28, Andre Przywara wrote:
> > > On Sat, 26 Nov 2022 14:26:25 +0100
> > > Krzysztof Kozlowski <[email protected]> wrote:
> > >
> > > Hi,
> > >
> > >> On 25/11/2022 21:20, Samuel Holland wrote:
> > >>> The sun8i-emac binding extends snps,dwmac.yaml, and should accept all
> > >>> properties defined there, including "mdio", "resets", and "reset-names".
> > >>> However, validation currently fails for these properties because the
> > >>
> > >> validation does not fail:
> > >> make dt_binding_check -> no problems
> > >>
> > >> Maybe you meant that DTS do not pass dtbs_check?
> > >
> > > Yes, that's what he meant: If a board actually doesn't have Ethernet
> > > configured, dt-validate complains. I saw this before, but didn't find
> > > any solution.
> > > An example is: $ dt-validate ... sun50i-a64-pinephone-1.2.dtb
> > > arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dtb:
> > > ethernet@1c30000: Unevaluated properties are not allowed ('resets', 'reset-names', 'mdio' were unexpected)
> > > From schema: Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml
> > >
> > > Why exactly is beyond me, but this patch removes this message.
> >
> > I don't think this should be fixed like this. That's the problem of
> > dtschema (not ignoring fully disabled nodes) and such patch only moves
> > from one correct syntax to another correct syntax, which fixes dtschema
> > problem, but changes nothing here.
>
> Humm, it looks to me like the 'phy-mode' required in snps,dwmac.yaml
> causes the problem, but I can't get a minimized example to fail.
> Something in 'required' shouldn't matter. Definitely seems like an issue
> in the jsonschema package. I'll keep looking at it.

TLDR: A fix in dtschema for this will be in place soon.

I've simplified this down to:
{
"$schema": "https://json-schema.org/draft/2019-09/schema",

"unevaluatedProperties": false,
"allOf":[
{
"properties": {
"foo": true,
"bar": true
},
"required": [ "foo" ]
}
]
}

An instance { "bar": 1 } will fail due to the 'required' failing. When
you have a subschema (what's under 'allOf'), then it all has to pass
to be 'evaluated'. This seems inconsistent to me, but the json-schema
folks say it is operating as intended.

I've got 2 possible fixes. One is to just ignore unevaluatedProperties
errors on disabled nodes like is already done for 'required'. This
means disabled nodes can have any unknown property or child node added
which isn't great. The other way overrides 'required' validation to
always pass on disabled nodes. This would be better, but there are
some exceptions we need to still fail. 'oneOf' with N entries of
'required' to say 1 of N properties must be present for example.
Excluding each one of these cases will be fragile, so probably going
with the first fix.

Rob