Skip to contentSkip to conversation

DT schema warnings on Risc-V virt machine

DISCUSSION Rob Herring 3 participants 4 messages Aug 3, 2022 – Aug 5, 2022 RISC-V

lore
Share & tools
lore
#0 lore raw

Hey folks,

FYI, I ran DT validation on the Risc-V 'virt' machine and these are the warnings:

/home/rob/riscv-virt.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml
/home/rob/riscv-virt.dtb: soc: poweroff: {'value': [[21845]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-poweroff']} should not be valid under {'type': 'object'}
From schema: /home/rob/proj/git/dt-schema/dtschema/schemas/simple-bus.yaml
/home/rob/riscv-virt.dtb: soc: reboot: {'value': [[30583]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-reboot']} should not be valid under {'type': 'object'}
From schema: /home/rob/proj/git/dt-schema/dtschema/schemas/simple-bus.yaml
/home/rob/riscv-virt.dtb: uart@10000000: $nodename:0: 'uart@10000000' does not match '^serial(@.*)?$'
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/serial/8250.yaml
/home/rob/riscv-virt.dtb: plic@c000000: compatible: 'oneOf' conditional failed, one must be fixed:

        'sifive,plic-1.0.0' is not one of ['sifive,fu540-c000-plic', 'starfive,jh7100-plic', 'canaan,k210-plic']
        'sifive,plic-1.0.0' is not one of ['allwinner,sun20i-d1-plic']
        'sifive,plic-1.0.0' was expected
        'thead,c900-plic' was expected
        From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml

/home/rob/riscv-virt.dtb: plic@c000000: '#address-cells' is a required property
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml
/home/rob/riscv-virt.dtb: clint@2000000: compatible:0: 'sifive,clint0' is not one of ['sifive,fu540-c000-clint', 'starfive,jh7100-clint', 'canaan,k210-clint']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml
/home/rob/riscv-virt.dtb: clint@2000000: compatible:1: 'sifive,clint0' was expected
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml

Also from the 'spike' machine:

/home/rob/riscv-spike.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml
/home/rob/riscv-spike.dtb: clint@2000000: compatible:0: 'sifive,clint0' is not one of ['sifive,fu540-c000-clint', 'starfive,jh7100-clint', 'canaan,k210-clint']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml
/home/rob/riscv-spike.dtb: clint@2000000: compatible:1: 'sifive,clint0' was expected
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml

There could also be other warnings from non-default configurations.

To reproduce, dump the dtb and run:

dt-validate -p Documentation/devicetree/bindings/processed-schema.json riscv-spike.dtb

(processed-schema.json is from kernel validation run)

Rob

#1 lore raw
Quoted 4 lines · Rob Herring

Hey folks,

FYI, I ran DT validation on the Risc-V 'virt' machine and these are the warnings:

/sigh
There was I thinking I was almost done with dt warnings! I guess I'll take a look Rob, thanks for the report. Conor.

Quoted 42 lines

/home/rob/riscv-virt.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml
/home/rob/riscv-virt.dtb: soc: poweroff: {'value': [[21845]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-poweroff']} should not be valid under {'type': 'object'}
From schema: /home/rob/proj/git/dt-schema/dtschema/schemas/simple-bus.yaml
/home/rob/riscv-virt.dtb: soc: reboot: {'value': [[30583]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-reboot']} should not be valid under {'type': 'object'}
From schema: /home/rob/proj/git/dt-schema/dtschema/schemas/simple-bus.yaml
/home/rob/riscv-virt.dtb: uart@10000000: $nodename:0: 'uart@10000000' does not match '^serial(@.*)?$'
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/serial/8250.yaml
/home/rob/riscv-virt.dtb: plic@c000000: compatible: 'oneOf' conditional failed, one must be fixed:

        'sifive,plic-1.0.0' is not one of ['sifive,fu540-c000-plic', 'starfive,jh7100-plic', 'canaan,k210-plic']
        'sifive,plic-1.0.0' is not one of ['allwinner,sun20i-d1-plic']
        'sifive,plic-1.0.0' was expected
        'thead,c900-plic' was expected
        From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml

/home/rob/riscv-virt.dtb: plic@c000000: '#address-cells' is a required property
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml
/home/rob/riscv-virt.dtb: clint@2000000: compatible:0: 'sifive,clint0' is not one of ['sifive,fu540-c000-clint', 'starfive,jh7100-clint', 'canaan,k210-clint']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml
/home/rob/riscv-virt.dtb: clint@2000000: compatible:1: 'sifive,clint0' was expected
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml

Also from the 'spike' machine:

/home/rob/riscv-spike.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml
/home/rob/riscv-spike.dtb: clint@2000000: compatible:0: 'sifive,clint0' is not one of ['sifive,fu540-c000-clint', 'starfive,jh7100-clint', 'canaan,k210-clint']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml
/home/rob/riscv-spike.dtb: clint@2000000: compatible:1: 'sifive,clint0' was expected
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml

There could also be other warnings from non-default configurations.

To reproduce, dump the dtb and run:

dt-validate -p Documentation/devicetree/bindings/processed-schema.json riscv-spike.dtb

(processed-schema.json is from kernel validation run)

Rob

#2 lore raw
Quoted 11 lines · Conor Dooley

EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe

Quoted 4 lines · Rob Herring

Hey folks,

FYI, I ran DT validation on the Risc-V 'virt' machine and these are the warnings:

/sigh
There was I thinking I was almost done with dt warnings! I guess I'll take a look Rob, thanks for the report.

FWIW, patches sent for QEMU:
https://lore.kernel.org/linux-riscv/[email protected]/T/#t

and kernel:
https://lore.kernel.org/linux-riscv/[email protected]/T/#t

Conor.

Quoted 49 lines

Conor.

Quoted 35 lines

/home/rob/riscv-virt.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml
/home/rob/riscv-virt.dtb: soc: poweroff: {'value': [[21845]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-poweroff']} should not be valid under {'type': 'object'}
From schema: /home/rob/proj/git/dt-schema/dtschema/schemas/simple-bus.yaml
/home/rob/riscv-virt.dtb: soc: reboot: {'value': [[30583]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-reboot']} should not be valid under {'type': 'object'}
From schema: /home/rob/proj/git/dt-schema/dtschema/schemas/simple-bus.yaml
/home/rob/riscv-virt.dtb: uart@10000000: $nodename:0: 'uart@10000000' does not match '^serial(@.*)?$'
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/serial/8250.yaml
/home/rob/riscv-virt.dtb: plic@c000000: compatible: 'oneOf' conditional failed, one must be fixed:

        'sifive,plic-1.0.0' is not one of ['sifive,fu540-c000-plic', 'starfive,jh7100-plic', 'canaan,k210-plic']
        'sifive,plic-1.0.0' is not one of ['allwinner,sun20i-d1-plic']
        'sifive,plic-1.0.0' was expected
        'thead,c900-plic' was expected
        From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml

/home/rob/riscv-virt.dtb: plic@c000000: '#address-cells' is a required property
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml
/home/rob/riscv-virt.dtb: clint@2000000: compatible:0: 'sifive,clint0' is not one of ['sifive,fu540-c000-clint', 'starfive,jh7100-clint', 'canaan,k210-clint']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml
/home/rob/riscv-virt.dtb: clint@2000000: compatible:1: 'sifive,clint0' was expected
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml

Also from the 'spike' machine:

/home/rob/riscv-spike.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml
/home/rob/riscv-spike.dtb: clint@2000000: compatible:0: 'sifive,clint0' is not one of ['sifive,fu540-c000-clint', 'starfive,jh7100-clint', 'canaan,k210-clint']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml
/home/rob/riscv-spike.dtb: clint@2000000: compatible:1: 'sifive,clint0' was expected
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/timer/sifive,clint.yaml

There could also be other warnings from non-default configurations.

Quoted 7 lines

To reproduce, dump the dtb and run:

dt-validate -p Documentation/devicetree/bindings/processed-schema.json riscv-spike.dtb

(processed-schema.json is from kernel validation run)

Rob

_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv

#3 lore raw
In reply to Rob Herring
Quoted 7 lines · Rob Herring

Hey folks,

FYI, I ran DT validation on the Risc-V 'virt' machine and these are the warnings:

/home/rob/riscv-virt.dtb: cpu@0: riscv,isa:0: 'rv64imafdcsuh' is not one of ['rv64imac', 'rv64imafdc']
From schema: /home/rob/proj/git/linux-dt/Documentation/devicetree/bindings/riscv/cpus.yaml

This one is party a QEMU problem & should've been fixed - but the fix was never applied:
https://lore.kernel.org/qemu-devel/[email protected]/
I think this just needs a rebase & a resend which I can do. I think kernel-side we need to add a new string riscv,isa string but it is not the one in your error message - it's either "rv64imafdch" or "rv64imafdch_zicsr_zifencei_zba_zbb_zbc_zbs". Palmer, what is your take on that? Is only the short misa meant to go into the dt?

For the plic/clint related warnings, documenting the "riscv,{plic,clint}0" variants seems to be to be the right thing to do as they're already in the kernel in drivers. I'll send patches for these.

BTW Rob, what version of qemu were you using? I saw more errors on
QEMU's master branch - like the following from a dump of the virt
machine:
/stuff/qemu/qemu.dtb: platform@4000000: $nodename:0: 'platform@4000000' does not match '^([a-z][a-z0-9\\-]+-bus|bus|soc|axi|ahb|apb)(@[0-9a-f]+)?$'
From schema: /home/conor/.local/lib/python3.9/site-packages/dtschema/schemas/simple-bus.yaml

Using a platform bus seems to be a core QEMU feature, used on multiple archs in hw/core/sysbus-fdt.c - but that violates the schema. Not sure what to do there.

/stuff/qemu/qemu.dtb: soc: poweroff: {'value': [[21845]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-poweroff']} should not be valid under {'type': 'object'}
From schema: /home/conor/.local/lib/python3.9/site-packages/dtschema/schemas/simple-bus.yaml
/stuff/qemu/qemu.dtb: soc: reboot: {'value': [[30583]], 'offset': [[0]], 'regmap': [[4]], 'compatible': ['syscon-reboot']} should not be valid under {'type': 'object'}
From schema: /home/conor/.local/lib/python3.9/site-packages/dtschema/schemas/simple-bus.yaml

These two seem to be that the creation script adds them as subnodes of the soc bus not subnodes of the syscon. A QEMU problem rather than a dt bindings problem.

The rest seem to be a variety of incorrect names being used in riscv's virt.c in QEMU. I guess I'll send fixes for those too..

Thanks,
Conor