[PATCH v2 00/34] Devicetree schema
Rob Herring
robh at kernel.org
Tue Dec 4 08:31:49 AEDT 2018
The current DT binding documentation is not ideal as it is just free form
text with at most only a loose structure. This makes reviewing bindings a
manual process. The bindings are often duplicating information that's
already defined elsewhere and missing information one would need to
validate a DTS file. The examples in binding documents are not built and
a source of lots of typos sometimes found in review and sometimes not.
Secondly, there's no verification that DTS files match what the
documentation says. While dtc does do some checking (and has gained more
recently), it can't do per binding checks as it would have to understand
thousands of compatible strings to match on.
There's been a number of proposals over the years to address validation.
They've all suffered from inventing their own validation language and the
effort it would take to fully define and flush out a validation language.
Enter json-schema. The language has a defined specification, maps well to
DT data, and there are numerous existing tools which can be leveraged.
The actual DT schema doc files are stored as YAML using only a JSON
compatible subset. YAML is considered more human readable allowing
comments for example.
This series adds the build support, some documentation, and converts
some bindings (mostly ARM board/soc bindings). The tools, core schema,
and meta-schema are in a separate repository[1]. This might eventually
be integrated with dtc or added to the kernel, but for now I plan to
keep it separate.
This series is available here[2]. The branch also has a doc2yaml script
which can help convert binding files. It's not perfect, but works pretty
well considering the input is free form text.
My plan is to merge this initial support for v4.21. There's not yet any
requirement that new bindings be submitted using the schema. I think that
should wait a bit until after this gets a bit more exposure. I do have
some tooling in place to test submitted patches and update DT patchwork
with the result.
SoC maintainers,
The board/soc bindings can go thru your trees if there are conflicts (if
any SoC or board is added). It shouldn't matter if they go in separately
from the build support. shmobile, rockchip, fsl and amlogic already have
conflicts with next. Otherwise, I can take them via the DT tree.
Rob
v2:
- Rebase to v4.20-rc2
- Add some missing Xilinx boards (from Michal Simek)
- Add ability to validate with a single specified schema using
the DT_SCHEMA_FILES variable.
- Add back some dropped comments for board names
- Various maintainer fixes
- Rework ARM PMU interrupts schema.
- Updates to ARM CPU vendor specific properties.
- Add i2c-gpio conversion to json-schema. Serves as example of including
another schema (i2c-controller.yaml)
- Set license on schema files to GPL-2.0
- Improvements to writing-schema.md and annotated example.
[1] https://github.com/robherring/yaml-bindings
[2] git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git yaml-bindings-v2
Michal Simek (1):
dt-bindings: arm: Add missing Xilinx boards
Rob Herring (33):
kbuild: Add support for DT binding schema checks
dt-bindings: Add a writing DT schemas how-to and annotated example
dt-bindings: Convert trivial-devices.txt to json-schema
dt-bindings: altera: Convert clkmgr binding to json-schema
dt-bindings: i2c: Convert i2c-gpio binding to json-schema
dt-bindings: timer: Convert ARM timer bindings to json-schema
dt-bindings: arm: Convert cpu binding to json-schema
dt-bindings: arm: Convert PMU binding to json-schema
dt-bindings: arm: Convert primecell binding to json-schema
dt-bindings: arm: Convert Actions Semi bindings to jsonschema
dt-bindings: arm: Convert Alpine board/soc bindings to json-schema
dt-bindings: arm: Convert Altera board/soc bindings to json-schema
dt-bindings: arm: amlogic: Move 'amlogic,meson-gx-ao-secure' binding
to its own file
dt-bindings: arm: Convert Amlogic board/soc bindings to json-schema
dt-bindings: arm: Convert Atmel board/soc bindings to json-schema
dt-bindings: arm: Convert Calxeda board/soc bindings to json-schema
dt-bindings: arm: Convert TI davinci board/soc bindings to json-schema
dt-bindings: arm: Convert FSL board/soc bindings to json-schema
dt-bindings: arm: Convert MediaTek board/soc bindings to json-schema
dt-bindings: arm: Convert TI nspire board/soc bindings to json-schema
dt-bindings: arm: Convert Oxford Semi board/soc bindings to
json-schema
dt-bindings: arm: Convert QCom board/soc bindings to json-schema
dt-bindings: arm: Convert Realtek board/soc bindings to json-schema
dt-bindings: arm: Convert Rockchip board/soc bindings to json-schema
dt-bindings: arm: renesas: Move 'renesas,prr' binding to its own doc
dt-bindings: arm: Convert Renesas board/soc bindings to json-schema
dt-bindings: arm: Convert CSR SiRF board/soc bindings to json-schema
dt-bindings: arm: Convert SPEAr board/soc bindings to json-schema
dt-bindings: arm: Convert ST STi board/soc bindings to json-schema
dt-bindings: arm: Convert Tegra board/soc bindings to json-schema
dt-bindings: arm: Convert VIA board/soc bindings to json-schema
dt-bindings: arm: Convert Xilinx board/soc bindings to json-schema
dt-bindings: arm: Convert ZTE board/soc bindings to json-schema
.gitignore | 1 +
Documentation/Makefile | 2 +-
Documentation/devicetree/bindings/.gitignore | 1 +
Documentation/devicetree/bindings/Makefile | 33 ++
.../devicetree/bindings/arm/actions.txt | 56 --
.../devicetree/bindings/arm/actions.yaml | 38 ++
.../devicetree/bindings/arm/al,alpine.txt | 16 -
.../devicetree/bindings/arm/al,alpine.yaml | 21 +
.../devicetree/bindings/arm/altera.txt | 14 -
.../devicetree/bindings/arm/altera.yaml | 20 +
.../arm/altera/socfpga-clk-manager.txt | 11 -
.../arm/altera/socfpga-clk-manager.yaml | 31 ++
.../devicetree/bindings/arm/amlogic.txt | 138 -----
.../devicetree/bindings/arm/amlogic.yaml | 109 ++++
.../amlogic/amlogic,meson-gx-ao-secure.txt | 28 +
.../devicetree/bindings/arm/armadeus.txt | 6 -
.../devicetree/bindings/arm/atmel-at91.txt | 72 ---
.../devicetree/bindings/arm/atmel-at91.yaml | 133 +++++
Documentation/devicetree/bindings/arm/bhf.txt | 6 -
.../devicetree/bindings/arm/calxeda.txt | 15 -
.../devicetree/bindings/arm/calxeda.yaml | 22 +
.../bindings/arm/compulab-boards.txt | 25 -
.../devicetree/bindings/arm/cpus.txt | 490 -----------------
.../devicetree/bindings/arm/cpus.yaml | 507 ++++++++++++++++++
.../devicetree/bindings/arm/davinci.txt | 25 -
Documentation/devicetree/bindings/arm/fsl.txt | 229 --------
.../devicetree/bindings/arm/fsl.yaml | 214 ++++++++
.../devicetree/bindings/arm/i2se.txt | 22 -
.../devicetree/bindings/arm/mediatek.txt | 79 ---
.../devicetree/bindings/arm/mediatek.yaml | 85 +++
.../devicetree/bindings/arm/nspire.txt | 14 -
.../devicetree/bindings/arm/olimex.txt | 10 -
.../devicetree/bindings/arm/oxnas.txt | 14 -
.../devicetree/bindings/arm/oxnas.yaml | 25 +
Documentation/devicetree/bindings/arm/pmu.txt | 70 ---
.../devicetree/bindings/arm/pmu.yaml | 91 ++++
.../devicetree/bindings/arm/primecell.txt | 46 --
.../devicetree/bindings/arm/primecell.yaml | 36 ++
.../devicetree/bindings/arm/qcom.txt | 57 --
.../devicetree/bindings/arm/qcom.yaml | 125 +++++
.../devicetree/bindings/arm/realtek.txt | 22 -
.../devicetree/bindings/arm/realtek.yaml | 23 +
.../devicetree/bindings/arm/renesas,prr.txt | 20 +
.../devicetree/bindings/arm/rockchip.txt | 240 ---------
.../devicetree/bindings/arm/rockchip.yaml | 251 +++++++++
.../devicetree/bindings/arm/shmobile.txt | 169 ------
.../devicetree/bindings/arm/shmobile.yaml | 218 ++++++++
.../devicetree/bindings/arm/sirf.txt | 11 -
.../devicetree/bindings/arm/sirf.yaml | 27 +
.../devicetree/bindings/arm/spear.txt | 26 -
.../devicetree/bindings/arm/spear.yaml | 25 +
Documentation/devicetree/bindings/arm/sti.txt | 23 -
.../devicetree/bindings/arm/sti.yaml | 23 +
.../devicetree/bindings/arm/technologic.txt | 23 -
.../devicetree/bindings/arm/tegra.txt | 65 ---
.../devicetree/bindings/arm/tegra.yaml | 101 ++++
.../devicetree/bindings/arm/ti/nspire.yaml | 24 +
.../bindings/arm/ti/ti,davinci.yaml | 26 +
.../devicetree/bindings/arm/vt8500.txt | 22 -
.../devicetree/bindings/arm/vt8500.yaml | 23 +
.../devicetree/bindings/arm/xilinx.txt | 83 ---
.../devicetree/bindings/arm/xilinx.yaml | 114 ++++
Documentation/devicetree/bindings/arm/zte.txt | 14 -
.../devicetree/bindings/arm/zte.yaml | 26 +
.../devicetree/bindings/example-schema.yaml | 170 ++++++
.../devicetree/bindings/i2c/i2c-gpio.txt | 46 --
.../devicetree/bindings/i2c/i2c-gpio.yaml | 73 +++
.../bindings/timer/arm,arch_timer.txt | 112 ----
.../bindings/timer/arm,arch_timer.yaml | 103 ++++
.../bindings/timer/arm,arch_timer_mmio.yaml | 120 +++++
.../bindings/timer/arm,global_timer.txt | 27 -
.../bindings/timer/arm,global_timer.yaml | 46 ++
.../devicetree/bindings/trivial-devices.txt | 190 -------
.../devicetree/bindings/trivial-devices.yaml | 392 ++++++++++++++
Documentation/devicetree/writing-schema.md | 130 +++++
Makefile | 11 +-
scripts/Makefile.lib | 24 +-
77 files changed, 3487 insertions(+), 2493 deletions(-)
create mode 100644 Documentation/devicetree/bindings/.gitignore
create mode 100644 Documentation/devicetree/bindings/Makefile
delete mode 100644 Documentation/devicetree/bindings/arm/actions.txt
create mode 100644 Documentation/devicetree/bindings/arm/actions.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/al,alpine.txt
create mode 100644 Documentation/devicetree/bindings/arm/al,alpine.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/altera.txt
create mode 100644 Documentation/devicetree/bindings/arm/altera.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/altera/socfpga-clk-manager.txt
create mode 100644 Documentation/devicetree/bindings/arm/altera/socfpga-clk-manager.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/amlogic.txt
create mode 100644 Documentation/devicetree/bindings/arm/amlogic.yaml
create mode 100644 Documentation/devicetree/bindings/arm/amlogic/amlogic,meson-gx-ao-secure.txt
delete mode 100644 Documentation/devicetree/bindings/arm/armadeus.txt
delete mode 100644 Documentation/devicetree/bindings/arm/atmel-at91.txt
create mode 100644 Documentation/devicetree/bindings/arm/atmel-at91.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/bhf.txt
delete mode 100644 Documentation/devicetree/bindings/arm/calxeda.txt
create mode 100644 Documentation/devicetree/bindings/arm/calxeda.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/compulab-boards.txt
delete mode 100644 Documentation/devicetree/bindings/arm/cpus.txt
create mode 100644 Documentation/devicetree/bindings/arm/cpus.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/davinci.txt
delete mode 100644 Documentation/devicetree/bindings/arm/fsl.txt
create mode 100644 Documentation/devicetree/bindings/arm/fsl.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/i2se.txt
delete mode 100644 Documentation/devicetree/bindings/arm/mediatek.txt
create mode 100644 Documentation/devicetree/bindings/arm/mediatek.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/nspire.txt
delete mode 100644 Documentation/devicetree/bindings/arm/olimex.txt
delete mode 100644 Documentation/devicetree/bindings/arm/oxnas.txt
create mode 100644 Documentation/devicetree/bindings/arm/oxnas.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/pmu.txt
create mode 100644 Documentation/devicetree/bindings/arm/pmu.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/primecell.txt
create mode 100644 Documentation/devicetree/bindings/arm/primecell.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/qcom.txt
create mode 100644 Documentation/devicetree/bindings/arm/qcom.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/realtek.txt
create mode 100644 Documentation/devicetree/bindings/arm/realtek.yaml
create mode 100644 Documentation/devicetree/bindings/arm/renesas,prr.txt
delete mode 100644 Documentation/devicetree/bindings/arm/rockchip.txt
create mode 100644 Documentation/devicetree/bindings/arm/rockchip.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/shmobile.txt
create mode 100644 Documentation/devicetree/bindings/arm/shmobile.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/sirf.txt
create mode 100644 Documentation/devicetree/bindings/arm/sirf.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/spear.txt
create mode 100644 Documentation/devicetree/bindings/arm/spear.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/sti.txt
create mode 100644 Documentation/devicetree/bindings/arm/sti.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/technologic.txt
delete mode 100644 Documentation/devicetree/bindings/arm/tegra.txt
create mode 100644 Documentation/devicetree/bindings/arm/tegra.yaml
create mode 100644 Documentation/devicetree/bindings/arm/ti/nspire.yaml
create mode 100644 Documentation/devicetree/bindings/arm/ti/ti,davinci.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/vt8500.txt
create mode 100644 Documentation/devicetree/bindings/arm/vt8500.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/xilinx.txt
create mode 100644 Documentation/devicetree/bindings/arm/xilinx.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/zte.txt
create mode 100644 Documentation/devicetree/bindings/arm/zte.yaml
create mode 100644 Documentation/devicetree/bindings/example-schema.yaml
delete mode 100644 Documentation/devicetree/bindings/i2c/i2c-gpio.txt
create mode 100644 Documentation/devicetree/bindings/i2c/i2c-gpio.yaml
delete mode 100644 Documentation/devicetree/bindings/timer/arm,arch_timer.txt
create mode 100644 Documentation/devicetree/bindings/timer/arm,arch_timer.yaml
create mode 100644 Documentation/devicetree/bindings/timer/arm,arch_timer_mmio.yaml
delete mode 100644 Documentation/devicetree/bindings/timer/arm,global_timer.txt
create mode 100644 Documentation/devicetree/bindings/timer/arm,global_timer.yaml
delete mode 100644 Documentation/devicetree/bindings/trivial-devices.txt
create mode 100644 Documentation/devicetree/bindings/trivial-devices.yaml
create mode 100644 Documentation/devicetree/writing-schema.md
--
2.19.1
More information about the Linuxppc-dev
mailing list