linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] kbuild: Always validate DT binding examples
@ 2020-02-29  0:37 Rob Herring
  2020-02-29  0:37 ` [PATCH v2 2/2] kbuild: Build DT binding examples with dtc warnings enabled Rob Herring
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Rob Herring @ 2020-02-29  0:37 UTC (permalink / raw)
  To: Masahiro Yamada; +Cc: devicetree, linux-kernel, Michal Marek, linux-kbuild

Most folks only run dt_binding_check on the single schema they care about
by setting DT_SCHEMA_FILES. That means example is only checked against
that one schema which is not always sufficient.

Let's address this by splitting processed-schema.yaml into 2 files: one
that's always all schemas for the examples and one that's just the schema
in DT_SCHEMA_FILES for dtbs.

Cc: Michal Marek <michal.lkml@markovi.net>
Cc: linux-kbuild@vger.kernel.org
Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Rob Herring <robh@kernel.org>
---
Masahiro, given you pretty much re-wrote this, I added you as 
Co-developed-by.

Based on next/master

 Documentation/devicetree/bindings/.gitignore |  2 +-
 Documentation/devicetree/bindings/Makefile   | 22 +++++++++++++-------
 scripts/Makefile.lib                         |  3 ++-
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
index ef82fcfcccab..57afa1533a5f 100644
--- a/Documentation/devicetree/bindings/.gitignore
+++ b/Documentation/devicetree/bindings/.gitignore
@@ -1,2 +1,2 @@
 *.example.dts
-processed-schema.yaml
+processed-schema*.yaml
diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
index 646cb3525373..7c40d5ba1b51 100644
--- a/Documentation/devicetree/bindings/Makefile
+++ b/Documentation/devicetree/bindings/Makefile
@@ -2,7 +2,6 @@
 DT_DOC_CHECKER ?= dt-doc-validate
 DT_EXTRACT_EX ?= dt-extract-example
 DT_MK_SCHEMA ?= dt-mk-schema
-DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
 
 quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
       cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
@@ -11,26 +10,33 @@ quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
 $(obj)/%.example.dts: $(src)/%.yaml FORCE
 	$(call if_changed,chk_binding)
 
-DT_TMP_SCHEMA := processed-schema.yaml
+# Use full schemas when checking %.example.dts
+DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
 
 quiet_cmd_mk_schema = SCHEMA  $@
       cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
 
-DT_DOCS = $(shell \
+DT_DOCS = $(addprefix $(src)/, \
+	$(shell \
 	cd $(srctree)/$(src) && \
 	find * \( -name '*.yaml' ! \
-		-name $(DT_TMP_SCHEMA) ! \
+		-name 'processed-schema*' ! \
 		-name '*.example.dt.yaml' \) \
-	)
+	))
 
-DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
+DT_SCHEMA_FILES ?= $(DT_DOCS)
 
 ifeq ($(CHECK_DTBS),)
 extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
 extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
+extra-y += processed-schema-examples.yaml
+
+$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
+	$(call if_changed,mk_schema)
 endif
 
-$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
+$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
+$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
 	$(call if_changed,mk_schema)
 
-extra-y += $(DT_TMP_SCHEMA)
+extra-y += processed-schema.yaml
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index f5ff506e4a24..b12dd5ba4896 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -307,7 +307,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
 
 DT_CHECKER ?= dt-validate
 DT_BINDING_DIR := Documentation/devicetree/bindings
-DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
+# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
+DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
 
 quiet_cmd_dtb_check =	CHECK   $@
       cmd_dtb_check =	$(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v2 2/2] kbuild: Build DT binding examples with dtc warnings enabled
  2020-02-29  0:37 [PATCH v2 1/2] kbuild: Always validate DT binding examples Rob Herring
@ 2020-02-29  0:37 ` Rob Herring
  2020-02-29  4:25 ` [PATCH v2 1/2] kbuild: Always validate DT binding examples Masahiro Yamada
  2020-04-21 10:07 ` Laurent Pinchart
  2 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2020-02-29  0:37 UTC (permalink / raw)
  To: Masahiro Yamada; +Cc: devicetree, linux-kernel, Michal Marek, linux-kbuild

Now that we have a separate rule for DT binding examples, we can customize
the dtc options. Let's adjust the dtc warnings to me more strict by
default so the examples get cleaned up as they get converted to schema.

Leaving 'avoid_unnecessary_addr_size' and 'graph_child_address' warnings
disabled as examples tend to be incomplete and they generates a lot of
warnings.

Cc: Michal Marek <michal.lkml@markovi.net>
Cc: linux-kbuild@vger.kernel.org
Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Rob Herring <robh@kernel.org>
---
 Documentation/devicetree/bindings/Makefile | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
index 7c40d5ba1b51..b62c0470f122 100644
--- a/Documentation/devicetree/bindings/Makefile
+++ b/Documentation/devicetree/bindings/Makefile
@@ -31,6 +31,10 @@ extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
 extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
 extra-y += processed-schema-examples.yaml
 
+override DTC_FLAGS := \
+	-Wno-avoid_unnecessary_addr_size \
+	-Wno-graph_child_address
+
 $(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
 	$(call if_changed,mk_schema)
 endif
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-02-29  0:37 [PATCH v2 1/2] kbuild: Always validate DT binding examples Rob Herring
  2020-02-29  0:37 ` [PATCH v2 2/2] kbuild: Build DT binding examples with dtc warnings enabled Rob Herring
@ 2020-02-29  4:25 ` Masahiro Yamada
  2020-03-02 16:06   ` Rob Herring
  2020-04-21 10:07 ` Laurent Pinchart
  2 siblings, 1 reply; 18+ messages in thread
From: Masahiro Yamada @ 2020-02-29  4:25 UTC (permalink / raw)
  To: Rob Herring
  Cc: DTML, Linux Kernel Mailing List, Michal Marek, Linux Kbuild mailing list

Hi Rob,

On Sat, Feb 29, 2020 at 9:37 AM Rob Herring <robh@kernel.org> wrote:
>
> Most folks only run dt_binding_check on the single schema they care about
> by setting DT_SCHEMA_FILES. That means example is only checked against
> that one schema which is not always sufficient.
>
> Let's address this by splitting processed-schema.yaml into 2 files: one
> that's always all schemas for the examples and one that's just the schema
> in DT_SCHEMA_FILES for dtbs.
>
> Cc: Michal Marek <michal.lkml@markovi.net>
> Cc: linux-kbuild@vger.kernel.org
> Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> Masahiro, given you pretty much re-wrote this, I added you as
> Co-developed-by.



I can apply both to my kbuild tree.

Or, if you want to apply them to your tree,
please add my
Acked-by: Masahiro Yamada <masahiroy@kernel.org>


Either way is fine.

Thanks.



>
> Based on next/master
>
>  Documentation/devicetree/bindings/.gitignore |  2 +-
>  Documentation/devicetree/bindings/Makefile   | 22 +++++++++++++-------
>  scripts/Makefile.lib                         |  3 ++-
>  3 files changed, 17 insertions(+), 10 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
> index ef82fcfcccab..57afa1533a5f 100644
> --- a/Documentation/devicetree/bindings/.gitignore
> +++ b/Documentation/devicetree/bindings/.gitignore
> @@ -1,2 +1,2 @@
>  *.example.dts
> -processed-schema.yaml
> +processed-schema*.yaml
> diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
> index 646cb3525373..7c40d5ba1b51 100644
> --- a/Documentation/devicetree/bindings/Makefile
> +++ b/Documentation/devicetree/bindings/Makefile
> @@ -2,7 +2,6 @@
>  DT_DOC_CHECKER ?= dt-doc-validate
>  DT_EXTRACT_EX ?= dt-extract-example
>  DT_MK_SCHEMA ?= dt-mk-schema
> -DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
>
>  quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
>        cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
> @@ -11,26 +10,33 @@ quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
>  $(obj)/%.example.dts: $(src)/%.yaml FORCE
>         $(call if_changed,chk_binding)
>
> -DT_TMP_SCHEMA := processed-schema.yaml
> +# Use full schemas when checking %.example.dts
> +DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
>
>  quiet_cmd_mk_schema = SCHEMA  $@
>        cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
>
> -DT_DOCS = $(shell \
> +DT_DOCS = $(addprefix $(src)/, \
> +       $(shell \
>         cd $(srctree)/$(src) && \
>         find * \( -name '*.yaml' ! \
> -               -name $(DT_TMP_SCHEMA) ! \
> +               -name 'processed-schema*' ! \
>                 -name '*.example.dt.yaml' \) \
> -       )
> +       ))
>
> -DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
> +DT_SCHEMA_FILES ?= $(DT_DOCS)
>
>  ifeq ($(CHECK_DTBS),)
>  extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
>  extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
> +extra-y += processed-schema-examples.yaml
> +
> +$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
> +       $(call if_changed,mk_schema)
>  endif
>
> -$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
> +$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
> +$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
>         $(call if_changed,mk_schema)
>
> -extra-y += $(DT_TMP_SCHEMA)
> +extra-y += processed-schema.yaml
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index f5ff506e4a24..b12dd5ba4896 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -307,7 +307,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
>
>  DT_CHECKER ?= dt-validate
>  DT_BINDING_DIR := Documentation/devicetree/bindings
> -DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> +# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
> +DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
>
>  quiet_cmd_dtb_check =  CHECK   $@
>        cmd_dtb_check =  $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@
> --
> 2.20.1
>


-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-02-29  4:25 ` [PATCH v2 1/2] kbuild: Always validate DT binding examples Masahiro Yamada
@ 2020-03-02 16:06   ` Rob Herring
  2020-03-03 13:45     ` Masahiro Yamada
  0 siblings, 1 reply; 18+ messages in thread
From: Rob Herring @ 2020-03-02 16:06 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: DTML, Linux Kernel Mailing List, Michal Marek, Linux Kbuild mailing list

On Fri, Feb 28, 2020 at 10:25 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> Hi Rob,
>
> On Sat, Feb 29, 2020 at 9:37 AM Rob Herring <robh@kernel.org> wrote:
> >
> > Most folks only run dt_binding_check on the single schema they care about
> > by setting DT_SCHEMA_FILES. That means example is only checked against
> > that one schema which is not always sufficient.
> >
> > Let's address this by splitting processed-schema.yaml into 2 files: one
> > that's always all schemas for the examples and one that's just the schema
> > in DT_SCHEMA_FILES for dtbs.
> >
> > Cc: Michal Marek <michal.lkml@markovi.net>
> > Cc: linux-kbuild@vger.kernel.org
> > Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
> > Signed-off-by: Rob Herring <robh@kernel.org>
> > ---
> > Masahiro, given you pretty much re-wrote this, I added you as
> > Co-developed-by.
>
>
>
> I can apply both to my kbuild tree.

Please apply to your tree.

Rob

>
> Or, if you want to apply them to your tree,
> please add my
> Acked-by: Masahiro Yamada <masahiroy@kernel.org>
>
>
> Either way is fine.
>
> Thanks.
>
>
>
> >
> > Based on next/master
> >
> >  Documentation/devicetree/bindings/.gitignore |  2 +-
> >  Documentation/devicetree/bindings/Makefile   | 22 +++++++++++++-------
> >  scripts/Makefile.lib                         |  3 ++-
> >  3 files changed, 17 insertions(+), 10 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
> > index ef82fcfcccab..57afa1533a5f 100644
> > --- a/Documentation/devicetree/bindings/.gitignore
> > +++ b/Documentation/devicetree/bindings/.gitignore
> > @@ -1,2 +1,2 @@
> >  *.example.dts
> > -processed-schema.yaml
> > +processed-schema*.yaml
> > diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
> > index 646cb3525373..7c40d5ba1b51 100644
> > --- a/Documentation/devicetree/bindings/Makefile
> > +++ b/Documentation/devicetree/bindings/Makefile
> > @@ -2,7 +2,6 @@
> >  DT_DOC_CHECKER ?= dt-doc-validate
> >  DT_EXTRACT_EX ?= dt-extract-example
> >  DT_MK_SCHEMA ?= dt-mk-schema
> > -DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
> >
> >  quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
> >        cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
> > @@ -11,26 +10,33 @@ quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
> >  $(obj)/%.example.dts: $(src)/%.yaml FORCE
> >         $(call if_changed,chk_binding)
> >
> > -DT_TMP_SCHEMA := processed-schema.yaml
> > +# Use full schemas when checking %.example.dts
> > +DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
> >
> >  quiet_cmd_mk_schema = SCHEMA  $@
> >        cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
> >
> > -DT_DOCS = $(shell \
> > +DT_DOCS = $(addprefix $(src)/, \
> > +       $(shell \
> >         cd $(srctree)/$(src) && \
> >         find * \( -name '*.yaml' ! \
> > -               -name $(DT_TMP_SCHEMA) ! \
> > +               -name 'processed-schema*' ! \
> >                 -name '*.example.dt.yaml' \) \
> > -       )
> > +       ))
> >
> > -DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
> > +DT_SCHEMA_FILES ?= $(DT_DOCS)
> >
> >  ifeq ($(CHECK_DTBS),)
> >  extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
> >  extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
> > +extra-y += processed-schema-examples.yaml
> > +
> > +$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
> > +       $(call if_changed,mk_schema)
> >  endif
> >
> > -$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
> > +$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
> > +$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
> >         $(call if_changed,mk_schema)
> >
> > -extra-y += $(DT_TMP_SCHEMA)
> > +extra-y += processed-schema.yaml
> > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> > index f5ff506e4a24..b12dd5ba4896 100644
> > --- a/scripts/Makefile.lib
> > +++ b/scripts/Makefile.lib
> > @@ -307,7 +307,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
> >
> >  DT_CHECKER ?= dt-validate
> >  DT_BINDING_DIR := Documentation/devicetree/bindings
> > -DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> > +# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
> > +DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> >
> >  quiet_cmd_dtb_check =  CHECK   $@
> >        cmd_dtb_check =  $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@
> > --
> > 2.20.1
> >
>
>
> --
> Best Regards
> Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-03-02 16:06   ` Rob Herring
@ 2020-03-03 13:45     ` Masahiro Yamada
  0 siblings, 0 replies; 18+ messages in thread
From: Masahiro Yamada @ 2020-03-03 13:45 UTC (permalink / raw)
  To: Rob Herring
  Cc: DTML, Linux Kernel Mailing List, Michal Marek, Linux Kbuild mailing list

On Tue, Mar 3, 2020 at 1:06 AM Rob Herring <robh@kernel.org> wrote:
>
> On Fri, Feb 28, 2020 at 10:25 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > Hi Rob,
> >
> > On Sat, Feb 29, 2020 at 9:37 AM Rob Herring <robh@kernel.org> wrote:
> > >
> > > Most folks only run dt_binding_check on the single schema they care about
> > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > that one schema which is not always sufficient.
> > >
> > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > that's always all schemas for the examples and one that's just the schema
> > > in DT_SCHEMA_FILES for dtbs.
> > >
> > > Cc: Michal Marek <michal.lkml@markovi.net>
> > > Cc: linux-kbuild@vger.kernel.org
> > > Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
> > > Signed-off-by: Rob Herring <robh@kernel.org>
> > > ---
> > > Masahiro, given you pretty much re-wrote this, I added you as
> > > Co-developed-by.
> >
> >
> >
> > I can apply both to my kbuild tree.
>
> Please apply to your tree.


Done.
Thanks.


-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-02-29  0:37 [PATCH v2 1/2] kbuild: Always validate DT binding examples Rob Herring
  2020-02-29  0:37 ` [PATCH v2 2/2] kbuild: Build DT binding examples with dtc warnings enabled Rob Herring
  2020-02-29  4:25 ` [PATCH v2 1/2] kbuild: Always validate DT binding examples Masahiro Yamada
@ 2020-04-21 10:07 ` Laurent Pinchart
  2020-04-21 10:45   ` Masahiro Yamada
  2 siblings, 1 reply; 18+ messages in thread
From: Laurent Pinchart @ 2020-04-21 10:07 UTC (permalink / raw)
  To: Rob Herring
  Cc: Masahiro Yamada, devicetree, linux-kernel, Michal Marek, linux-kbuild

Hi Rob,

On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> Most folks only run dt_binding_check on the single schema they care about
> by setting DT_SCHEMA_FILES. That means example is only checked against
> that one schema which is not always sufficient.
> 
> Let's address this by splitting processed-schema.yaml into 2 files: one
> that's always all schemas for the examples and one that's just the schema
> in DT_SCHEMA_FILES for dtbs.

This broke

make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check

for me :-(

make[1]: Entering directory '/home/laurent/src/linux/output/arm32'
make[2]: execvp: /bin/sh: Argument list too long
make[2]: *** [/home/laurent/src/linux/Documentation/devicetree/bindings/Makefile:35: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
make[1]: *** [/home/laurent/src/linux/Makefile:1296: dt_binding_check] Error 2
make[1]: Leaving directory '/home/laurent/src/linux/output/arm32'
make: *** [Makefile:180: sub-make] Error 2

Before the patch, dt-mk-schema was called with DT_SCHEMA_FILES only, and
it is now called with DT_DOCS unconditionally.

> Cc: Michal Marek <michal.lkml@markovi.net>
> Cc: linux-kbuild@vger.kernel.org
> Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> Masahiro, given you pretty much re-wrote this, I added you as 
> Co-developed-by.
> 
> Based on next/master
> 
>  Documentation/devicetree/bindings/.gitignore |  2 +-
>  Documentation/devicetree/bindings/Makefile   | 22 +++++++++++++-------
>  scripts/Makefile.lib                         |  3 ++-
>  3 files changed, 17 insertions(+), 10 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
> index ef82fcfcccab..57afa1533a5f 100644
> --- a/Documentation/devicetree/bindings/.gitignore
> +++ b/Documentation/devicetree/bindings/.gitignore
> @@ -1,2 +1,2 @@
>  *.example.dts
> -processed-schema.yaml
> +processed-schema*.yaml
> diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
> index 646cb3525373..7c40d5ba1b51 100644
> --- a/Documentation/devicetree/bindings/Makefile
> +++ b/Documentation/devicetree/bindings/Makefile
> @@ -2,7 +2,6 @@
>  DT_DOC_CHECKER ?= dt-doc-validate
>  DT_EXTRACT_EX ?= dt-extract-example
>  DT_MK_SCHEMA ?= dt-mk-schema
> -DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
>  
>  quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
>        cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
> @@ -11,26 +10,33 @@ quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
>  $(obj)/%.example.dts: $(src)/%.yaml FORCE
>  	$(call if_changed,chk_binding)
>  
> -DT_TMP_SCHEMA := processed-schema.yaml
> +# Use full schemas when checking %.example.dts
> +DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
>  
>  quiet_cmd_mk_schema = SCHEMA  $@
>        cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
>  
> -DT_DOCS = $(shell \
> +DT_DOCS = $(addprefix $(src)/, \
> +	$(shell \
>  	cd $(srctree)/$(src) && \
>  	find * \( -name '*.yaml' ! \
> -		-name $(DT_TMP_SCHEMA) ! \
> +		-name 'processed-schema*' ! \
>  		-name '*.example.dt.yaml' \) \
> -	)
> +	))
>  
> -DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
> +DT_SCHEMA_FILES ?= $(DT_DOCS)
>  
>  ifeq ($(CHECK_DTBS),)
>  extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
>  extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
> +extra-y += processed-schema-examples.yaml
> +
> +$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
> +	$(call if_changed,mk_schema)
>  endif
>  
> -$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
> +$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
> +$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
>  	$(call if_changed,mk_schema)
>  
> -extra-y += $(DT_TMP_SCHEMA)
> +extra-y += processed-schema.yaml
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index f5ff506e4a24..b12dd5ba4896 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -307,7 +307,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
>  
>  DT_CHECKER ?= dt-validate
>  DT_BINDING_DIR := Documentation/devicetree/bindings
> -DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> +# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
> +DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
>  
>  quiet_cmd_dtb_check =	CHECK   $@
>        cmd_dtb_check =	$(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 10:07 ` Laurent Pinchart
@ 2020-04-21 10:45   ` Masahiro Yamada
  2020-04-21 11:05     ` Laurent Pinchart
  0 siblings, 1 reply; 18+ messages in thread
From: Masahiro Yamada @ 2020-04-21 10:45 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Rob Herring, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Rob,
>
> On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > Most folks only run dt_binding_check on the single schema they care about
> > by setting DT_SCHEMA_FILES. That means example is only checked against
> > that one schema which is not always sufficient.
> >
> > Let's address this by splitting processed-schema.yaml into 2 files: one
> > that's always all schemas for the examples and one that's just the schema
> > in DT_SCHEMA_FILES for dtbs.
>
> This broke
>
> make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check

What is intended by
"DT_SCHEMA_FILES=Documentation/devicetree/.."  ?




>
> for me :-(
>
> make[1]: Entering directory '/home/laurent/src/linux/output/arm32'
> make[2]: execvp: /bin/sh: Argument list too long
> make[2]: *** [/home/laurent/src/linux/Documentation/devicetree/bindings/Makefile:35: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
> make[1]: *** [/home/laurent/src/linux/Makefile:1296: dt_binding_check] Error 2
> make[1]: Leaving directory '/home/laurent/src/linux/output/arm32'
> make: *** [Makefile:180: sub-make] Error 2
>
> Before the patch, dt-mk-schema was called with DT_SCHEMA_FILES only, and
> it is now called with DT_DOCS unconditionally.
>
> > Cc: Michal Marek <michal.lkml@markovi.net>
> > Cc: linux-kbuild@vger.kernel.org
> > Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
> > Signed-off-by: Rob Herring <robh@kernel.org>
> > ---
> > Masahiro, given you pretty much re-wrote this, I added you as
> > Co-developed-by.
> >
> > Based on next/master
> >
> >  Documentation/devicetree/bindings/.gitignore |  2 +-
> >  Documentation/devicetree/bindings/Makefile   | 22 +++++++++++++-------
> >  scripts/Makefile.lib                         |  3 ++-
> >  3 files changed, 17 insertions(+), 10 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
> > index ef82fcfcccab..57afa1533a5f 100644
> > --- a/Documentation/devicetree/bindings/.gitignore
> > +++ b/Documentation/devicetree/bindings/.gitignore
> > @@ -1,2 +1,2 @@
> >  *.example.dts
> > -processed-schema.yaml
> > +processed-schema*.yaml
> > diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
> > index 646cb3525373..7c40d5ba1b51 100644
> > --- a/Documentation/devicetree/bindings/Makefile
> > +++ b/Documentation/devicetree/bindings/Makefile
> > @@ -2,7 +2,6 @@
> >  DT_DOC_CHECKER ?= dt-doc-validate
> >  DT_EXTRACT_EX ?= dt-extract-example
> >  DT_MK_SCHEMA ?= dt-mk-schema
> > -DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
> >
> >  quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
> >        cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
> > @@ -11,26 +10,33 @@ quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
> >  $(obj)/%.example.dts: $(src)/%.yaml FORCE
> >       $(call if_changed,chk_binding)
> >
> > -DT_TMP_SCHEMA := processed-schema.yaml
> > +# Use full schemas when checking %.example.dts
> > +DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
> >
> >  quiet_cmd_mk_schema = SCHEMA  $@
> >        cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
> >
> > -DT_DOCS = $(shell \
> > +DT_DOCS = $(addprefix $(src)/, \
> > +     $(shell \
> >       cd $(srctree)/$(src) && \
> >       find * \( -name '*.yaml' ! \
> > -             -name $(DT_TMP_SCHEMA) ! \
> > +             -name 'processed-schema*' ! \
> >               -name '*.example.dt.yaml' \) \
> > -     )
> > +     ))
> >
> > -DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
> > +DT_SCHEMA_FILES ?= $(DT_DOCS)
> >
> >  ifeq ($(CHECK_DTBS),)
> >  extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
> >  extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
> > +extra-y += processed-schema-examples.yaml
> > +
> > +$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
> > +     $(call if_changed,mk_schema)
> >  endif
> >
> > -$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
> > +$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
> > +$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
> >       $(call if_changed,mk_schema)
> >
> > -extra-y += $(DT_TMP_SCHEMA)
> > +extra-y += processed-schema.yaml
> > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> > index f5ff506e4a24..b12dd5ba4896 100644
> > --- a/scripts/Makefile.lib
> > +++ b/scripts/Makefile.lib
> > @@ -307,7 +307,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
> >
> >  DT_CHECKER ?= dt-validate
> >  DT_BINDING_DIR := Documentation/devicetree/bindings
> > -DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> > +# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
> > +DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> >
> >  quiet_cmd_dtb_check =        CHECK   $@
> >        cmd_dtb_check =        $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@
>
> --
> Regards,
>
> Laurent Pinchart



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 10:45   ` Masahiro Yamada
@ 2020-04-21 11:05     ` Laurent Pinchart
  2020-04-21 13:15       ` Masahiro Yamada
  0 siblings, 1 reply; 18+ messages in thread
From: Laurent Pinchart @ 2020-04-21 11:05 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Rob Herring, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Yamada-san,

On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > Most folks only run dt_binding_check on the single schema they care about
> > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > that one schema which is not always sufficient.
> > >
> > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > that's always all schemas for the examples and one that's just the schema
> > > in DT_SCHEMA_FILES for dtbs.
> >
> > This broke
> >
> > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> 
> What is intended by
> "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?

My bad, I forgot to write that ... is the continuation of the string.
It's any yaml schema file that has an example.

> > for me :-(
> >
> > make[1]: Entering directory '/home/laurent/src/linux/output/arm32'
> > make[2]: execvp: /bin/sh: Argument list too long
> > make[2]: *** [/home/laurent/src/linux/Documentation/devicetree/bindings/Makefile:35: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
> > make[1]: *** [/home/laurent/src/linux/Makefile:1296: dt_binding_check] Error 2
> > make[1]: Leaving directory '/home/laurent/src/linux/output/arm32'
> > make: *** [Makefile:180: sub-make] Error 2
> >
> > Before the patch, dt-mk-schema was called with DT_SCHEMA_FILES only, and
> > it is now called with DT_DOCS unconditionally.
> >
> > > Cc: Michal Marek <michal.lkml@markovi.net>
> > > Cc: linux-kbuild@vger.kernel.org
> > > Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
> > > Signed-off-by: Rob Herring <robh@kernel.org>
> > > ---
> > > Masahiro, given you pretty much re-wrote this, I added you as
> > > Co-developed-by.
> > >
> > > Based on next/master
> > >
> > >  Documentation/devicetree/bindings/.gitignore |  2 +-
> > >  Documentation/devicetree/bindings/Makefile   | 22 +++++++++++++-------
> > >  scripts/Makefile.lib                         |  3 ++-
> > >  3 files changed, 17 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/Documentation/devicetree/bindings/.gitignore b/Documentation/devicetree/bindings/.gitignore
> > > index ef82fcfcccab..57afa1533a5f 100644
> > > --- a/Documentation/devicetree/bindings/.gitignore
> > > +++ b/Documentation/devicetree/bindings/.gitignore
> > > @@ -1,2 +1,2 @@
> > >  *.example.dts
> > > -processed-schema.yaml
> > > +processed-schema*.yaml
> > > diff --git a/Documentation/devicetree/bindings/Makefile b/Documentation/devicetree/bindings/Makefile
> > > index 646cb3525373..7c40d5ba1b51 100644
> > > --- a/Documentation/devicetree/bindings/Makefile
> > > +++ b/Documentation/devicetree/bindings/Makefile
> > > @@ -2,7 +2,6 @@
> > >  DT_DOC_CHECKER ?= dt-doc-validate
> > >  DT_EXTRACT_EX ?= dt-extract-example
> > >  DT_MK_SCHEMA ?= dt-mk-schema
> > > -DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
> > >
> > >  quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
> > >        cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
> > > @@ -11,26 +10,33 @@ quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
> > >  $(obj)/%.example.dts: $(src)/%.yaml FORCE
> > >       $(call if_changed,chk_binding)
> > >
> > > -DT_TMP_SCHEMA := processed-schema.yaml
> > > +# Use full schemas when checking %.example.dts
> > > +DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
> > >
> > >  quiet_cmd_mk_schema = SCHEMA  $@
> > >        cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
> > >
> > > -DT_DOCS = $(shell \
> > > +DT_DOCS = $(addprefix $(src)/, \
> > > +     $(shell \
> > >       cd $(srctree)/$(src) && \
> > >       find * \( -name '*.yaml' ! \
> > > -             -name $(DT_TMP_SCHEMA) ! \
> > > +             -name 'processed-schema*' ! \
> > >               -name '*.example.dt.yaml' \) \
> > > -     )
> > > +     ))
> > >
> > > -DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
> > > +DT_SCHEMA_FILES ?= $(DT_DOCS)
> > >
> > >  ifeq ($(CHECK_DTBS),)
> > >  extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
> > >  extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
> > > +extra-y += processed-schema-examples.yaml
> > > +
> > > +$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
> > > +     $(call if_changed,mk_schema)
> > >  endif
> > >
> > > -$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
> > > +$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
> > > +$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
> > >       $(call if_changed,mk_schema)
> > >
> > > -extra-y += $(DT_TMP_SCHEMA)
> > > +extra-y += processed-schema.yaml
> > > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> > > index f5ff506e4a24..b12dd5ba4896 100644
> > > --- a/scripts/Makefile.lib
> > > +++ b/scripts/Makefile.lib
> > > @@ -307,7 +307,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE
> > >
> > >  DT_CHECKER ?= dt-validate
> > >  DT_BINDING_DIR := Documentation/devicetree/bindings
> > > -DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> > > +# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
> > > +DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
> > >
> > >  quiet_cmd_dtb_check =        CHECK   $@
> > >        cmd_dtb_check =        $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 11:05     ` Laurent Pinchart
@ 2020-04-21 13:15       ` Masahiro Yamada
  2020-04-21 13:46         ` Laurent Pinchart
  2020-04-21 13:47         ` Rob Herring
  0 siblings, 2 replies; 18+ messages in thread
From: Masahiro Yamada @ 2020-04-21 13:15 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Rob Herring, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Laurent,

On Tue, Apr 21, 2020 at 8:05 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Yamada-san,
>
> On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> > On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > > Most folks only run dt_binding_check on the single schema they care about
> > > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > > that one schema which is not always sufficient.
> > > >
> > > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > > that's always all schemas for the examples and one that's just the schema
> > > > in DT_SCHEMA_FILES for dtbs.
> > >
> > > This broke
> > >
> > > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> >
> > What is intended by
> > "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?
>
> My bad, I forgot to write that ... is the continuation of the string.
> It's any yaml schema file that has an example.

Ah, OK. I just input verbatim.

Is it broken?

You can specify any individual file(s) under Documentation/devicetree/bindings/.

For example, the following worked for me.

$ make DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml
 dt_binding_check
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  LEX     scripts/dtc/dtc-lexer.lex.c
  YACC    scripts/dtc/dtc-parser.tab.[ch]
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTCC  scripts/dtc/yamltree.o
  HOSTLD  scripts/dtc/dtc
  CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
  SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
  DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
  CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
  SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml


-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 13:15       ` Masahiro Yamada
@ 2020-04-21 13:46         ` Laurent Pinchart
  2020-04-21 14:01           ` Rob Herring
  2020-04-21 17:36           ` Masahiro Yamada
  2020-04-21 13:47         ` Rob Herring
  1 sibling, 2 replies; 18+ messages in thread
From: Laurent Pinchart @ 2020-04-21 13:46 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Rob Herring, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Yamada-san,

On Tue, Apr 21, 2020 at 10:15:02PM +0900, Masahiro Yamada wrote:
> On Tue, Apr 21, 2020 at 8:05 PM Laurent Pinchart wrote:
> > On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> > > On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > > > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > > > Most folks only run dt_binding_check on the single schema they care about
> > > > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > > > that one schema which is not always sufficient.
> > > > >
> > > > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > > > that's always all schemas for the examples and one that's just the schema
> > > > > in DT_SCHEMA_FILES for dtbs.
> > > >
> > > > This broke
> > > >
> > > > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> > >
> > > What is intended by
> > > "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?
> >
> > My bad, I forgot to write that ... is the continuation of the string.
> > It's any yaml schema file that has an example.
> 
> Ah, OK. I just input verbatim.
> 
> Is it broken?
> 
> You can specify any individual file(s) under Documentation/devicetree/bindings/.
> 
> For example, the following worked for me.
> 
> $ make DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml
>  dt_binding_check
>   HOSTCC  scripts/basic/fixdep
>   HOSTCC  scripts/dtc/dtc.o
>   HOSTCC  scripts/dtc/flattree.o
>   HOSTCC  scripts/dtc/fstree.o
>   HOSTCC  scripts/dtc/data.o
>   HOSTCC  scripts/dtc/livetree.o
>   HOSTCC  scripts/dtc/treesource.o
>   HOSTCC  scripts/dtc/srcpos.o
>   HOSTCC  scripts/dtc/checks.o
>   HOSTCC  scripts/dtc/util.o
>   LEX     scripts/dtc/dtc-lexer.lex.c
>   YACC    scripts/dtc/dtc-parser.tab.[ch]
>   HOSTCC  scripts/dtc/dtc-lexer.lex.o
>   HOSTCC  scripts/dtc/dtc-parser.tab.o
>   HOSTCC  scripts/dtc/yamltree.o
>   HOSTLD  scripts/dtc/dtc
>   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
>   SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
>   DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
>   CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
>   SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml

This is getting interesting.

~/src/kernel/linux $ make O=output/x86 DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml dt_binding_check
make[1]: Entering directory '/home/laurent/src/kernel/linux/output/x86'
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  LEX     scripts/dtc/dtc-lexer.lex.c
  YACC    scripts/dtc/dtc-parser.tab.[ch]
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTCC  scripts/dtc/yamltree.o
  HOSTLD  scripts/dtc/dtc
  CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
  SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
  DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
  CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
  SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
make[1]: Leaving directory '/home/laurent/src/kernel/linux/output/x86'

~/src/kernel/this_is_a_long_directory_name/linux $ make O=output/x86 DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml dt_binding_check
make[1]: Entering directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  LEX     scripts/dtc/dtc-lexer.lex.c
  YACC    scripts/dtc/dtc-parser.tab.[ch]
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTCC  scripts/dtc/yamltree.o
  HOSTLD  scripts/dtc/dtc
  CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
make[2]: execvp: /bin/sh: Argument list too long
make[2]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Documentation/devicetree/bindings/Makefile:38: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
make[1]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Makefile:1300: dt_binding_check] Error 2
make[1]: Leaving directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
make: *** [Makefile:180: sub-make] Error 2

It seems to only fail with out of tree builds (O=...). I expect that
failures will become more common the more YAML bindings we have, even
without long directory names.

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 13:15       ` Masahiro Yamada
  2020-04-21 13:46         ` Laurent Pinchart
@ 2020-04-21 13:47         ` Rob Herring
  2020-04-21 17:31           ` Masahiro Yamada
  1 sibling, 1 reply; 18+ messages in thread
From: Rob Herring @ 2020-04-21 13:47 UTC (permalink / raw)
  To: Masahiro Yamada, Laurent Pinchart
  Cc: DTML, Linux Kernel Mailing List, Michal Marek, Linux Kbuild mailing list

On Tue, Apr 21, 2020 at 8:16 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> Hi Laurent,
>
> On Tue, Apr 21, 2020 at 8:05 PM Laurent Pinchart
> <laurent.pinchart@ideasonboard.com> wrote:
> >
> > Hi Yamada-san,
> >
> > On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> > > On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > > > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > > > Most folks only run dt_binding_check on the single schema they care about
> > > > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > > > that one schema which is not always sufficient.
> > > > >
> > > > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > > > that's always all schemas for the examples and one that's just the schema
> > > > > in DT_SCHEMA_FILES for dtbs.
> > > >
> > > > This broke
> > > >
> > > > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> > >
> > > What is intended by
> > > "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?
> >
> > My bad, I forgot to write that ... is the continuation of the string.
> > It's any yaml schema file that has an example.
>
> Ah, OK. I just input verbatim.
>
> Is it broken?
>
> You can specify any individual file(s) under Documentation/devicetree/bindings/.
>
> For example, the following worked for me.

Me too.

There is however a bug I just noticed. We're now always setting '-u'
for dtbs_check which means the core schema are never used.

Masahiro, Got a better suggestion than adding the ifeq:

ifeq ("$(origin DT_SCHEMA_FILES)", "command line")
$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
endif

Rob

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 13:46         ` Laurent Pinchart
@ 2020-04-21 14:01           ` Rob Herring
  2020-04-21 16:56             ` Masahiro Yamada
  2020-04-21 18:29             ` Laurent Pinchart
  2020-04-21 17:36           ` Masahiro Yamada
  1 sibling, 2 replies; 18+ messages in thread
From: Rob Herring @ 2020-04-21 14:01 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Masahiro Yamada, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

On Tue, Apr 21, 2020 at 8:47 AM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Yamada-san,
>
> On Tue, Apr 21, 2020 at 10:15:02PM +0900, Masahiro Yamada wrote:
> > On Tue, Apr 21, 2020 at 8:05 PM Laurent Pinchart wrote:
> > > On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> > > > On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > > > > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > > > > Most folks only run dt_binding_check on the single schema they care about
> > > > > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > > > > that one schema which is not always sufficient.
> > > > > >
> > > > > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > > > > that's always all schemas for the examples and one that's just the schema
> > > > > > in DT_SCHEMA_FILES for dtbs.
> > > > >
> > > > > This broke
> > > > >
> > > > > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> > > >
> > > > What is intended by
> > > > "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?
> > >
> > > My bad, I forgot to write that ... is the continuation of the string.
> > > It's any yaml schema file that has an example.
> >
> > Ah, OK. I just input verbatim.
> >
> > Is it broken?
> >
> > You can specify any individual file(s) under Documentation/devicetree/bindings/.
> >
> > For example, the following worked for me.
> >
> > $ make DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml
> >  dt_binding_check
> >   HOSTCC  scripts/basic/fixdep
> >   HOSTCC  scripts/dtc/dtc.o
> >   HOSTCC  scripts/dtc/flattree.o
> >   HOSTCC  scripts/dtc/fstree.o
> >   HOSTCC  scripts/dtc/data.o
> >   HOSTCC  scripts/dtc/livetree.o
> >   HOSTCC  scripts/dtc/treesource.o
> >   HOSTCC  scripts/dtc/srcpos.o
> >   HOSTCC  scripts/dtc/checks.o
> >   HOSTCC  scripts/dtc/util.o
> >   LEX     scripts/dtc/dtc-lexer.lex.c
> >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> >   HOSTCC  scripts/dtc/yamltree.o
> >   HOSTLD  scripts/dtc/dtc
> >   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
> >   SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
> >   DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
> >   CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
> >   SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
>
> This is getting interesting.
>
> ~/src/kernel/linux $ make O=output/x86 DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml dt_binding_check
> make[1]: Entering directory '/home/laurent/src/kernel/linux/output/x86'
>   HOSTCC  scripts/basic/fixdep
>   HOSTCC  scripts/dtc/dtc.o
>   HOSTCC  scripts/dtc/flattree.o
>   HOSTCC  scripts/dtc/fstree.o
>   HOSTCC  scripts/dtc/data.o
>   HOSTCC  scripts/dtc/livetree.o
>   HOSTCC  scripts/dtc/treesource.o
>   HOSTCC  scripts/dtc/srcpos.o
>   HOSTCC  scripts/dtc/checks.o
>   HOSTCC  scripts/dtc/util.o
>   LEX     scripts/dtc/dtc-lexer.lex.c
>   YACC    scripts/dtc/dtc-parser.tab.[ch]
>   HOSTCC  scripts/dtc/dtc-lexer.lex.o
>   HOSTCC  scripts/dtc/dtc-parser.tab.o
>   HOSTCC  scripts/dtc/yamltree.o
>   HOSTLD  scripts/dtc/dtc
>   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
>   SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
>   DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
>   CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
>   SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
> make[1]: Leaving directory '/home/laurent/src/kernel/linux/output/x86'
>
> ~/src/kernel/this_is_a_long_directory_name/linux $ make O=output/x86 DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml dt_binding_check
> make[1]: Entering directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
>   HOSTCC  scripts/basic/fixdep
>   HOSTCC  scripts/dtc/dtc.o
>   HOSTCC  scripts/dtc/flattree.o
>   HOSTCC  scripts/dtc/fstree.o
>   HOSTCC  scripts/dtc/data.o
>   HOSTCC  scripts/dtc/livetree.o
>   HOSTCC  scripts/dtc/treesource.o
>   HOSTCC  scripts/dtc/srcpos.o
>   HOSTCC  scripts/dtc/checks.o
>   HOSTCC  scripts/dtc/util.o
>   LEX     scripts/dtc/dtc-lexer.lex.c
>   YACC    scripts/dtc/dtc-parser.tab.[ch]
>   HOSTCC  scripts/dtc/dtc-lexer.lex.o
>   HOSTCC  scripts/dtc/dtc-parser.tab.o
>   HOSTCC  scripts/dtc/yamltree.o
>   HOSTLD  scripts/dtc/dtc
>   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
> make[2]: execvp: /bin/sh: Argument list too long
> make[2]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Documentation/devicetree/bindings/Makefile:38: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
> make[1]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Makefile:1300: dt_binding_check] Error 2
> make[1]: Leaving directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
> make: *** [Makefile:180: sub-make] Error 2
>
> It seems to only fail with out of tree builds (O=...). I expect that
> failures will become more common the more YAML bindings we have, even
> without long directory names.

dt-mk-schema can take and recurse a single directory already, so does
this fix it for you:

@@ -22,7 +22,7 @@ $(obj)/%.example.dts: $(src)/%.yaml
check_dtschema_version FORCE
 DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml

 quiet_cmd_mk_schema = SCHEMA  $@
-      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
$(real-prereqs)
+      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
$(srctree)/$(src)

 DT_DOCS = $(addprefix $(src)/, \
        $(shell \

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 14:01           ` Rob Herring
@ 2020-04-21 16:56             ` Masahiro Yamada
  2020-04-21 19:31               ` Rob Herring
  2020-04-21 18:29             ` Laurent Pinchart
  1 sibling, 1 reply; 18+ messages in thread
From: Masahiro Yamada @ 2020-04-21 16:56 UTC (permalink / raw)
  To: Rob Herring
  Cc: Laurent Pinchart, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Rob,


On Tue, Apr 21, 2020 at 11:01 PM Rob Herring <robh@kernel.org> wrote:
> >
> > It seems to only fail with out of tree builds (O=...). I expect that
> > failures will become more common the more YAML bindings we have, even
> > without long directory names.
>
> dt-mk-schema can take and recurse a single directory already, so does
> this fix it for you:
>
> @@ -22,7 +22,7 @@ $(obj)/%.example.dts: $(src)/%.yaml
> check_dtschema_version FORCE
>  DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
>
>  quiet_cmd_mk_schema = SCHEMA  $@
> -      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> $(real-prereqs)
> +      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> $(srctree)/$(src)


I am just curious.

How come the tool excludes 'processed-schema*' and '*.example.dt.yaml'
from $(srctree)/$(src) ?





-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 13:47         ` Rob Herring
@ 2020-04-21 17:31           ` Masahiro Yamada
  0 siblings, 0 replies; 18+ messages in thread
From: Masahiro Yamada @ 2020-04-21 17:31 UTC (permalink / raw)
  To: Rob Herring
  Cc: Laurent Pinchart, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Rob,

On Tue, Apr 21, 2020 at 10:47 PM Rob Herring <robh@kernel.org> wrote:
>
> On Tue, Apr 21, 2020 at 8:16 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > Hi Laurent,
> >
> > On Tue, Apr 21, 2020 at 8:05 PM Laurent Pinchart
> > <laurent.pinchart@ideasonboard.com> wrote:
> > >
> > > Hi Yamada-san,
> > >
> > > On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> > > > On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > > > > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > > > > Most folks only run dt_binding_check on the single schema they care about
> > > > > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > > > > that one schema which is not always sufficient.
> > > > > >
> > > > > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > > > > that's always all schemas for the examples and one that's just the schema
> > > > > > in DT_SCHEMA_FILES for dtbs.
> > > > >
> > > > > This broke
> > > > >
> > > > > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> > > >
> > > > What is intended by
> > > > "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?
> > >
> > > My bad, I forgot to write that ... is the continuation of the string.
> > > It's any yaml schema file that has an example.
> >
> > Ah, OK. I just input verbatim.
> >
> > Is it broken?
> >
> > You can specify any individual file(s) under Documentation/devicetree/bindings/.
> >
> > For example, the following worked for me.
>
> Me too.
>
> There is however a bug I just noticed. We're now always setting '-u'
> for dtbs_check which means the core schema are never used.
>
> Masahiro, Got a better suggestion than adding the ifeq:
>
> ifeq ("$(origin DT_SCHEMA_FILES)", "command line")
> $(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
> endif


Hmm, this does not work when DT_SCHEMA_FILES is
passed as the environment variable.


ifneq ("$(origin DT_SCHEMA_FILES)", "file")
$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
endif

... should work, I think.


Maybe, the following also works. Please choose whatever you like.

diff --git a/Documentation/devicetree/bindings/Makefile
b/Documentation/devicetree/bindings/Makefile
index 1df680d07461..a939bb18f66b 100644
--- a/Documentation/devicetree/bindings/Makefile
+++ b/Documentation/devicetree/bindings/Makefile
@@ -2,6 +2,7 @@
 DT_DOC_CHECKER ?= dt-doc-validate
 DT_EXTRACT_EX ?= dt-extract-example
 DT_MK_SCHEMA ?= dt-mk-schema
+DT_MK_SCHEMA_USERONLY_FLAG := $(if $(DT_SCHEMA_FILES), -u)

 quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<)
       cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
@@ -37,7 +38,7 @@ override DTC_FLAGS := \
 $(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
        $(call if_changed,mk_schema)

-$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
+$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS :=
$(DT_MK_SCHEMA_USERONLY_FLAG)
 $(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
        $(call if_changed,mk_schema)



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 13:46         ` Laurent Pinchart
  2020-04-21 14:01           ` Rob Herring
@ 2020-04-21 17:36           ` Masahiro Yamada
  1 sibling, 0 replies; 18+ messages in thread
From: Masahiro Yamada @ 2020-04-21 17:36 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Rob Herring, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Laurent,

On Tue, Apr 21, 2020 at 10:47 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:

>   HOSTLD  scripts/dtc/dtc
>   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
> make[2]: execvp: /bin/sh: Argument list too long
> make[2]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Documentation/devicetree/bindings/Makefile:38: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
> make[1]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Makefile:1300: dt_binding_check] Error 2
> make[1]: Leaving directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
> make: *** [Makefile:180: sub-make] Error 2
>
> It seems to only fail with out of tree builds (O=...). I expect that
> failures will become more common the more YAML bindings we have, even
> without long directory names.

Indeed. This will be a common problem sooner or later.

Rob already suggested a solution.


Another way is to use a pipe.

See the following code in scripts/Makefile.modpost


# Read out modules.order instead of expanding $(modules) to pass in modpost.
# Otherwise, allmodconfig would fail with "Argument list too long".
quiet_cmd_modpost = MODPOST $(words $(modules)) modules
      cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST)


The same issue happens for modpost
because allmodconfig floods the command line.


-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 14:01           ` Rob Herring
  2020-04-21 16:56             ` Masahiro Yamada
@ 2020-04-21 18:29             ` Laurent Pinchart
  1 sibling, 0 replies; 18+ messages in thread
From: Laurent Pinchart @ 2020-04-21 18:29 UTC (permalink / raw)
  To: Rob Herring
  Cc: Masahiro Yamada, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

Hi Rob,

On Tue, Apr 21, 2020 at 09:01:32AM -0500, Rob Herring wrote:
> On Tue, Apr 21, 2020 at 8:47 AM Laurent Pinchart wrote:
> > On Tue, Apr 21, 2020 at 10:15:02PM +0900, Masahiro Yamada wrote:
> > > On Tue, Apr 21, 2020 at 8:05 PM Laurent Pinchart wrote:
> > > > On Tue, Apr 21, 2020 at 07:45:05PM +0900, Masahiro Yamada wrote:
> > > > > On Tue, Apr 21, 2020 at 7:08 PM Laurent Pinchart wrote:
> > > > > > On Fri, Feb 28, 2020 at 06:37:30PM -0600, Rob Herring wrote:
> > > > > > > Most folks only run dt_binding_check on the single schema they care about
> > > > > > > by setting DT_SCHEMA_FILES. That means example is only checked against
> > > > > > > that one schema which is not always sufficient.
> > > > > > >
> > > > > > > Let's address this by splitting processed-schema.yaml into 2 files: one
> > > > > > > that's always all schemas for the examples and one that's just the schema
> > > > > > > in DT_SCHEMA_FILES for dtbs.
> > > > > >
> > > > > > This broke
> > > > > >
> > > > > > make DT_SCHEMA_FILES=Documentation/devicetree/.. dt_binding_check
> > > > >
> > > > > What is intended by
> > > > > "DT_SCHEMA_FILES=Documentation/devicetree/.."  ?
> > > >
> > > > My bad, I forgot to write that ... is the continuation of the string.
> > > > It's any yaml schema file that has an example.
> > >
> > > Ah, OK. I just input verbatim.
> > >
> > > Is it broken?
> > >
> > > You can specify any individual file(s) under Documentation/devicetree/bindings/.
> > >
> > > For example, the following worked for me.
> > >
> > > $ make DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml
> > >  dt_binding_check
> > >   HOSTCC  scripts/basic/fixdep
> > >   HOSTCC  scripts/dtc/dtc.o
> > >   HOSTCC  scripts/dtc/flattree.o
> > >   HOSTCC  scripts/dtc/fstree.o
> > >   HOSTCC  scripts/dtc/data.o
> > >   HOSTCC  scripts/dtc/livetree.o
> > >   HOSTCC  scripts/dtc/treesource.o
> > >   HOSTCC  scripts/dtc/srcpos.o
> > >   HOSTCC  scripts/dtc/checks.o
> > >   HOSTCC  scripts/dtc/util.o
> > >   LEX     scripts/dtc/dtc-lexer.lex.c
> > >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> > >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> > >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> > >   HOSTCC  scripts/dtc/yamltree.o
> > >   HOSTLD  scripts/dtc/dtc
> > >   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
> > >   SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
> > >   DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
> > >   CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
> > >   SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
> >
> > This is getting interesting.
> >
> > ~/src/kernel/linux $ make O=output/x86 DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml dt_binding_check
> > make[1]: Entering directory '/home/laurent/src/kernel/linux/output/x86'
> >   HOSTCC  scripts/basic/fixdep
> >   HOSTCC  scripts/dtc/dtc.o
> >   HOSTCC  scripts/dtc/flattree.o
> >   HOSTCC  scripts/dtc/fstree.o
> >   HOSTCC  scripts/dtc/data.o
> >   HOSTCC  scripts/dtc/livetree.o
> >   HOSTCC  scripts/dtc/treesource.o
> >   HOSTCC  scripts/dtc/srcpos.o
> >   HOSTCC  scripts/dtc/checks.o
> >   HOSTCC  scripts/dtc/util.o
> >   LEX     scripts/dtc/dtc-lexer.lex.c
> >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> >   HOSTCC  scripts/dtc/yamltree.o
> >   HOSTLD  scripts/dtc/dtc
> >   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
> >   SCHEMA  Documentation/devicetree/bindings/processed-schema-examples.yaml
> >   DTC     Documentation/devicetree/bindings/arm/psci.example.dt.yaml
> >   CHECK   Documentation/devicetree/bindings/arm/psci.example.dt.yaml
> >   SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
> > make[1]: Leaving directory '/home/laurent/src/kernel/linux/output/x86'
> >
> > ~/src/kernel/this_is_a_long_directory_name/linux $ make O=output/x86 DT_SCHEMA_FILES=Documentation/devicetree/bindings/arm/psci.yaml dt_binding_check
> > make[1]: Entering directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
> >   HOSTCC  scripts/basic/fixdep
> >   HOSTCC  scripts/dtc/dtc.o
> >   HOSTCC  scripts/dtc/flattree.o
> >   HOSTCC  scripts/dtc/fstree.o
> >   HOSTCC  scripts/dtc/data.o
> >   HOSTCC  scripts/dtc/livetree.o
> >   HOSTCC  scripts/dtc/treesource.o
> >   HOSTCC  scripts/dtc/srcpos.o
> >   HOSTCC  scripts/dtc/checks.o
> >   HOSTCC  scripts/dtc/util.o
> >   LEX     scripts/dtc/dtc-lexer.lex.c
> >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> >   HOSTCC  scripts/dtc/yamltree.o
> >   HOSTLD  scripts/dtc/dtc
> >   CHKDT   Documentation/devicetree/bindings/arm/psci.yaml
> > make[2]: execvp: /bin/sh: Argument list too long
> > make[2]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Documentation/devicetree/bindings/Makefile:38: Documentation/devicetree/bindings/processed-schema-examples.yaml] Error 127
> > make[1]: *** [/home/laurent/src/kernel/this_is_a_long_directory_name/linux/Makefile:1300: dt_binding_check] Error 2
> > make[1]: Leaving directory '/home/laurent/src/kernel/this_is_a_long_directory_name/linux/output/x86'
> > make: *** [Makefile:180: sub-make] Error 2
> >
> > It seems to only fail with out of tree builds (O=...). I expect that
> > failures will become more common the more YAML bindings we have, even
> > without long directory names.
> 
> dt-mk-schema can take and recurse a single directory already, so does
> this fix it for you:

Yes, the change below fixes my problem, thank you.

> @@ -22,7 +22,7 @@ $(obj)/%.example.dts: $(src)/%.yaml
> check_dtschema_version FORCE
>  DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
> 
>  quiet_cmd_mk_schema = SCHEMA  $@
> -      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> $(real-prereqs)
> +      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> $(srctree)/$(src)
> 
>  DT_DOCS = $(addprefix $(src)/, \
>         $(shell \

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 16:56             ` Masahiro Yamada
@ 2020-04-21 19:31               ` Rob Herring
  2020-04-21 20:40                 ` Rob Herring
  0 siblings, 1 reply; 18+ messages in thread
From: Rob Herring @ 2020-04-21 19:31 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Laurent Pinchart, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

On Tue, Apr 21, 2020 at 11:57 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> Hi Rob,
>
>
> On Tue, Apr 21, 2020 at 11:01 PM Rob Herring <robh@kernel.org> wrote:
> > >
> > > It seems to only fail with out of tree builds (O=...). I expect that
> > > failures will become more common the more YAML bindings we have, even
> > > without long directory names.
> >
> > dt-mk-schema can take and recurse a single directory already, so does
> > this fix it for you:
> >
> > @@ -22,7 +22,7 @@ $(obj)/%.example.dts: $(src)/%.yaml
> > check_dtschema_version FORCE
> >  DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
> >
> >  quiet_cmd_mk_schema = SCHEMA  $@
> > -      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> > $(real-prereqs)
> > +      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> > $(srctree)/$(src)
>
>
> I am just curious.
>
> How come the tool excludes 'processed-schema*' and '*.example.dt.yaml'
> from $(srctree)/$(src) ?

Uggg, it wouldn't. Can't everyone build out of tree. ;) I guess the options are:

- Call dt-mk-schema on each file individually appending the result
- Make dt-mk-schema take stdin or a file with a list of files as
Masahiro suggested

I'd like to avoid a dt-mk-schema change so I'll try to make the former
work. It's only been a day since adding a minimum version. :(

Rob

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 1/2] kbuild: Always validate DT binding examples
  2020-04-21 19:31               ` Rob Herring
@ 2020-04-21 20:40                 ` Rob Herring
  0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2020-04-21 20:40 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Laurent Pinchart, DTML, Linux Kernel Mailing List, Michal Marek,
	Linux Kbuild mailing list

On Tue, Apr 21, 2020 at 2:31 PM Rob Herring <robh@kernel.org> wrote:
>
> On Tue, Apr 21, 2020 at 11:57 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > Hi Rob,
> >
> >
> > On Tue, Apr 21, 2020 at 11:01 PM Rob Herring <robh@kernel.org> wrote:
> > > >
> > > > It seems to only fail with out of tree builds (O=...). I expect that
> > > > failures will become more common the more YAML bindings we have, even
> > > > without long directory names.
> > >
> > > dt-mk-schema can take and recurse a single directory already, so does
> > > this fix it for you:
> > >
> > > @@ -22,7 +22,7 @@ $(obj)/%.example.dts: $(src)/%.yaml
> > > check_dtschema_version FORCE
> > >  DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
> > >
> > >  quiet_cmd_mk_schema = SCHEMA  $@
> > > -      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> > > $(real-prereqs)
> > > +      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
> > > $(srctree)/$(src)
> >
> >
> > I am just curious.
> >
> > How come the tool excludes 'processed-schema*' and '*.example.dt.yaml'
> > from $(srctree)/$(src) ?
>
> Uggg, it wouldn't. Can't everyone build out of tree. ;) I guess the options are:
>
> - Call dt-mk-schema on each file individually appending the result
> - Make dt-mk-schema take stdin or a file with a list of files as
> Masahiro suggested
>
> I'd like to avoid a dt-mk-schema change so I'll try to make the former
> work. It's only been a day since adding a minimum version. :(

Laurent, does this work for you? I've reproduced the problem, but just
double checking.

 DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml

 quiet_cmd_mk_schema = SCHEMA  $@
-      cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@
$(real-prereqs)
+      cmd_mk_schema = $(file >$@.tmp, $(real-prereqs)) \
+                      cat $@.tmp | xargs $(DT_MK_SCHEMA)
$(DT_MK_SCHEMA_FLAGS) -o $@

 DT_DOCS = $(addprefix $(src)/, \
        $(shell \

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-04-21 20:40 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-29  0:37 [PATCH v2 1/2] kbuild: Always validate DT binding examples Rob Herring
2020-02-29  0:37 ` [PATCH v2 2/2] kbuild: Build DT binding examples with dtc warnings enabled Rob Herring
2020-02-29  4:25 ` [PATCH v2 1/2] kbuild: Always validate DT binding examples Masahiro Yamada
2020-03-02 16:06   ` Rob Herring
2020-03-03 13:45     ` Masahiro Yamada
2020-04-21 10:07 ` Laurent Pinchart
2020-04-21 10:45   ` Masahiro Yamada
2020-04-21 11:05     ` Laurent Pinchart
2020-04-21 13:15       ` Masahiro Yamada
2020-04-21 13:46         ` Laurent Pinchart
2020-04-21 14:01           ` Rob Herring
2020-04-21 16:56             ` Masahiro Yamada
2020-04-21 19:31               ` Rob Herring
2020-04-21 20:40                 ` Rob Herring
2020-04-21 18:29             ` Laurent Pinchart
2020-04-21 17:36           ` Masahiro Yamada
2020-04-21 13:47         ` Rob Herring
2020-04-21 17:31           ` Masahiro Yamada

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).