linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rob Herring <robh@kernel.org>
To: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linuxppc-dev@lists.ozlabs.org
Cc: Grant Likely <glikely@secretlab.ca>,
	Kumar Gala <kumar.gala@linaro.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Olof Johansson <olof@lixom.net>, Arnd Bergmann <arnd@arndb.de>,
	Mark Brown <broonie@kernel.org>, Tom Rini <trini@konsulko.com>,
	Pantelis Antoniou <pantelis.antoniou@konsulko.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Jonathan Cameron <jic23@kernel.org>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Jonathan Corbet <corbet@lwn.net>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Michal Marek <michal.lkml@markovi.net>,
	linux-doc@vger.kernel.org, linux-kbuild@vger.kernel.org
Subject: [PATCH 07/36] kbuild: Add support for DT binding schema checks
Date: Fri,  5 Oct 2018 11:58:19 -0500	[thread overview]
Message-ID: <20181005165848.3474-8-robh@kernel.org> (raw)
In-Reply-To: <20181005165848.3474-1-robh@kernel.org>

This adds the build infrastructure for checking DT binding schema
documents and validating dts files using the binding schema.

Check DT binding schema documents:
make dt_binding_check

Build dts files and check using DT binding schema:
make dtbs_check

Currently, the validation targets are separate from a normal build to
avoid a hard dependency on the external DT schema project and because
there are lots of warnings generated.

Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Michal Marek <michal.lkml@markovi.net>
Cc: linux-doc@vger.kernel.org
Cc: devicetree@vger.kernel.org
Cc: linux-kbuild@vger.kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>
---
 .gitignore                                   |  1 +
 Documentation/Makefile                       |  2 +-
 Documentation/devicetree/bindings/.gitignore |  2 ++
 Documentation/devicetree/bindings/Makefile   | 30 ++++++++++++++++++++
 Makefile                                     |  8 +++++-
 scripts/Makefile.lib                         | 24 ++++++++++++++--
 6 files changed, 63 insertions(+), 4 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/.gitignore
 create mode 100644 Documentation/devicetree/bindings/Makefile

diff --git a/.gitignore b/.gitignore
index 97ba6b79834c..a20ac26aa2f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@
 *.bin
 *.bz2
 *.c.[012]*.*
+*.dt.yaml
 *.dtb
 *.dtb.S
 *.dwo
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 2ca77ad0f238..9786957c6a35 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -2,7 +2,7 @@
 # Makefile for Sphinx documentation
 #
 
-subdir-y :=
+subdir-y := devicetree/bindings/
 
 # You can set these variables from the command line.
 SPHINXBUILD   = sphinx-build
diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
new file mode 100644
index 000000000000..7e47316f1d7a
--- /dev/null
+++ b/Documentation/devicetree/bindings/.gitignore
@@ -0,0 +1,2 @@
+*.example.dts
+*.yaml.tmp
diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
new file mode 100644
index 000000000000..b57f0dec3fab
--- /dev/null
+++ b/Documentation/devicetree/bindings/Makefile
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: GPL-2.0
+DT_DOC_CHECKER ?= dt-doc-validate
+DT_EXTRACT_EX ?= dt-extract-example
+
+quiet_cmd_chk_binding = CHKDT   $<
+      cmd_chk_binding = (set -e; \
+                         $(DT_DOC_CHECKER) $< ; \
+                         mkdir -p $(dir $@) ; \
+                         $(DT_EXTRACT_EX) $< > $@ )
+
+$(obj)/%.example.dts: $(src)/%.yaml FORCE
+	$(call if_changed,chk_binding)
+
+DT_MK_SCHEMA ?= dt-mk-schema
+DT_TMP_SCHEMA := .schema.yaml.tmp
+extra-y += $(DT_TMP_SCHEMA)
+
+quiet_cmd_mk_schema = SCHEMA  $@
+      cmd_mk_schema = mkdir -p $(obj); \
+                      $(DT_MK_SCHEMA) -o $@ $(srctree)/$(src)
+
+DT_DOCS = $(shell cd $(srctree)/$(src) && find * -name '*.yaml')
+DTS_EXAMPLES = $(patsubst %.yaml,%.example.dts, $(DT_DOCS))
+extra-y += $(DTS_EXAMPLES)
+
+DTBS = $(patsubst %.yaml,%.example.dtb, $(DT_DOCS))
+extra-y += $(DTBS)
+
+$(obj)/$(DT_TMP_SCHEMA): $(addprefix $(obj)/, $(DTBS)) FORCE
+	$(call if_changed,mk_schema)
diff --git a/Makefile b/Makefile
index 021e274c4b03..648f7238e883 100644
--- a/Makefile
+++ b/Makefile
@@ -1227,10 +1227,13 @@ ifneq ($(dtstree),)
 %.dtb: prepare3 scripts_dtc
 	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
 
-PHONY += dtbs dtbs_install
+PHONY += dtbs dtbs_install dt_binding_check
 dtbs: prepare3 scripts_dtc
 	$(Q)$(MAKE) $(build)=$(dtstree)
 
+dtbs_check: prepare3 dt_binding_check
+	$(Q)$(MAKE) $(build)=$(dtstree) CHECK_DTBS=1
+
 dtbs_install:
 	$(Q)$(MAKE) $(dtbinst)=$(dtstree)
 
@@ -1244,6 +1247,9 @@ PHONY += scripts_dtc
 scripts_dtc: scripts_basic
 	$(Q)$(MAKE) $(build)=scripts/dtc
 
+dt_binding_check: scripts_dtc
+	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings
+
 # ---------------------------------------------------------------------------
 # Modules
 
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 8fe4468f9bda..d1c5630ba24c 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -61,6 +61,11 @@ real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))
 extra-y				+= $(dtb-y)
 extra-$(CONFIG_OF_ALL_DTBS)	+= $(dtb-)
 
+ifneq ($(CHECK_DTBS),)
+extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y))
+extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-))
+endif
+
 # Add subdir path
 
 extra-y		:= $(addprefix $(obj)/,$(extra-y))
@@ -284,13 +289,28 @@ $(obj)/%.dtb.S: $(obj)/%.dtb FORCE
 quiet_cmd_dtc = DTC     $@
 cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
 	$(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
-	$(DTC) -O dtb -o $@ -b 0 \
+	$(DTC) -O $(2) -o $@ -b 0 \
 		$(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \
 		-d $(depfile).dtc.tmp $(dtc-tmp) ; \
 	cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
 
 $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
-	$(call if_changed_dep,dtc)
+	$(call if_changed_dep,dtc,dtb)
+
+DT_CHECKER ?= dt-validate
+DT_BINDING_DIR := Documentation/devicetree/bindings
+DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/.schema.yaml.tmp
+
+quiet_cmd_dtb_check =	CHECK  $@
+      cmd_dtb_check =	$(DT_CHECKER) -p $(DT_TMP_SCHEMA) $@ ;
+
+define rule_dtc_dt_yaml
+	$(call cmd_and_fixdep,dtc,yaml)		\
+	$(call echo-cmd,dtb_check) $(cmd_dtb_check)
+endef
+
+$(obj)/%.dt.yaml: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE
+	$(call if_changed_rule,dtc_dt_yaml)
 
 dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
 
-- 
2.17.1


  parent reply	other threads:[~2018-10-05 17:02 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-05 16:58 [PATCH 00/36] Devicetree schema Rob Herring
2018-10-05 16:58 ` [PATCH 01/36] dt-bindings: arm: alpine: Move CPU control related binding to cpu-enable-method/al,alpine-smp Rob Herring
2018-10-05 16:58 ` [PATCH 02/36] dt-bindings: arm: amlogic: Move 'amlogic,meson-gx-ao-secure' binding to its own file Rob Herring
2018-10-05 16:58 ` [PATCH 03/36] dt-bindings: arm: atmel: Move various sys registers out of SoC binding doc Rob Herring
2018-10-05 16:58 ` [PATCH 04/36] dt-bindings: arm: fsl: Move DCFG and SCFG bindings to their own docs Rob Herring
2018-10-08  6:25   ` Shawn Guo
2018-10-05 16:58 ` [PATCH 05/36] dt-bindings: arm: renesas: Move 'renesas,prr' binding to its own doc Rob Herring
2018-10-08  7:05   ` Geert Uytterhoeven
2018-10-08 14:59     ` Rob Herring
2018-10-18 13:04       ` Simon Horman
2018-10-05 16:58 ` [PATCH 06/36] dt-bindings: arm: zte: Move sysctrl bindings to their " Rob Herring
2018-10-08  6:30   ` Shawn Guo
2018-10-05 16:58 ` Rob Herring [this message]
2018-10-05 16:58 ` [PATCH 08/36] dt-bindings: Add a writing DT schemas how-to and annotated example Rob Herring
2018-10-05 16:58 ` [PATCH 09/36] dt-bindings: Convert trivial-devices.txt to json-schema Rob Herring
2018-10-05 16:58 ` [PATCH 10/36] dt-bindings: altera: Convert clkmgr binding " Rob Herring
2018-10-05 16:58 ` [PATCH 11/36] dt-bindings: timer: Convert ARM timer bindings " Rob Herring
2018-10-05 16:58 ` [PATCH 12/36] dt-bindings: arm: Convert cpu binding " Rob Herring
2018-11-08  8:48   ` Michal Simek
2018-11-30 18:00     ` Rob Herring
2018-12-03 12:40       ` Will Deacon
2018-12-03 14:24         ` Rob Herring
2018-10-05 16:58 ` [PATCH 13/36] dt-bindings: arm: Convert PMU " Rob Herring
2018-10-09 11:57   ` Will Deacon
2018-10-09 18:14     ` Rob Herring
2018-10-10 16:50       ` Will Deacon
2018-10-10 18:51         ` Rob Herring
2018-10-19 10:34           ` Will Deacon
2018-11-01 19:32     ` Rob Herring
2018-11-08 15:54       ` Robin Murphy
2018-11-08 15:59         ` Thomas Petazzoni
2018-11-08 16:10           ` Robin Murphy
2018-10-05 16:58 ` [PATCH 14/36] dt-bindings: arm: Convert primecell " Rob Herring
2018-10-05 16:58 ` [PATCH 15/36] dt-bindings: arm: Convert Actions Semi bindings to jsonschema Rob Herring
2018-10-06 10:40   ` Andreas Färber
2018-10-07 20:11     ` Rob Herring
2018-10-10  1:41     ` Joe Perches
2018-10-05 16:58 ` [PATCH 16/36] dt-bindings: arm: Convert Alpine board/soc bindings to json-schema Rob Herring
2018-10-05 16:58 ` [PATCH 17/36] dt-bindings: arm: Convert Altera " Rob Herring
2018-10-05 16:58 ` [PATCH 18/36] dt-bindings: arm: Convert Amlogic " Rob Herring
2018-10-05 16:58 ` [PATCH 19/36] dt-bindings: arm: Convert Atmel " Rob Herring
2018-10-05 18:07   ` Alexandre Belloni
2018-10-05 18:32     ` Rob Herring
2018-10-05 16:58 ` [PATCH 20/36] dt-bindings: arm: Convert Calxeda " Rob Herring
2018-10-05 16:58 ` [PATCH 21/36] dt-bindings: arm: Convert TI davinci " Rob Herring
2018-10-09 11:59   ` Sekhar Nori
2018-10-05 16:58 ` [PATCH 22/36] dt-bindings: arm: Convert FSL " Rob Herring
2018-10-08  7:01   ` Shawn Guo
2018-10-08 13:30     ` Rob Herring
2018-10-05 16:58 ` [PATCH 23/36] dt-bindings: arm: Convert MediaTek " Rob Herring
2018-10-05 16:58 ` [PATCH 24/36] dt-bindings: arm: Convert TI nspire " Rob Herring
2018-10-05 16:58 ` [PATCH 25/36] dt-bindings: arm: Convert Oxford Semi " Rob Herring
2018-10-05 16:58 ` [PATCH 26/36] dt-bindings: arm: Convert QCom " Rob Herring
2018-10-05 16:58 ` [PATCH 27/36] dt-bindings: arm: Convert Realtek " Rob Herring
2018-10-06 10:54   ` Andreas Färber
2018-10-07 19:20     ` Rob Herring
2018-10-05 16:58 ` [PATCH 28/36] dt-bindings: arm: Convert Rockchip " Rob Herring
2018-10-08  9:45   ` Heiko Stuebner
2018-10-08 13:46     ` Rob Herring
2018-10-05 16:58 ` [PATCH 29/36] dt-bindings: arm: Convert Renesas " Rob Herring
2018-10-08  7:47   ` Geert Uytterhoeven
2018-10-08 14:57     ` Rob Herring
2018-10-08 15:12       ` Geert Uytterhoeven
2018-10-08 16:54         ` Rob Herring
2018-10-08  8:02   ` Simon Horman
2018-10-08 14:05     ` Rob Herring
2018-10-18 13:01       ` Simon Horman
2018-10-05 16:58 ` [PATCH 30/36] dt-bindings: arm: Convert CSR SiRF " Rob Herring
2018-10-05 16:58 ` [PATCH 31/36] dt-bindings: arm: Convert SPEAr " Rob Herring
2018-10-05 16:58 ` [PATCH 32/36] dt-bindings: arm: Convert ST STi " Rob Herring
2018-10-10  9:19   ` Patrice CHOTARD
2018-10-05 16:58 ` [PATCH 33/36] dt-bindings: arm: Convert Tegra " Rob Herring
2018-10-05 22:19   ` Marcel Ziswiler
2018-10-05 23:36     ` Rob Herring
2018-10-05 16:58 ` [PATCH 34/36] dt-bindings: arm: Convert VIA " Rob Herring
2018-10-05 16:58 ` [PATCH 35/36] dt-bindings: arm: Convert Xilinx " Rob Herring
2018-11-08 13:34   ` Michal Simek
2018-10-05 16:58 ` [PATCH 36/36] dt-bindings: arm: Convert ZTE " Rob Herring
2018-10-08  7:16   ` Shawn Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181005165848.3474-8-robh@kernel.org \
    --to=robh@kernel.org \
    --cc=arnd@arndb.de \
    --cc=bjorn.andersson@linaro.org \
    --cc=broonie@kernel.org \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=frowand.list@gmail.com \
    --cc=geert@linux-m68k.org \
    --cc=glikely@secretlab.ca \
    --cc=jic23@kernel.org \
    --cc=kumar.gala@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mark.rutland@arm.com \
    --cc=michal.lkml@markovi.net \
    --cc=olof@lixom.net \
    --cc=pantelis.antoniou@konsulko.com \
    --cc=trini@konsulko.com \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).