docs: dt: writing-schema: Document usage of CHECK_DTBS make flag

Message ID 20221102214300.309347-1-nfraprado@collabora.com
State New
Headers
Series docs: dt: writing-schema: Document usage of CHECK_DTBS make flag |

Commit Message

Nícolas F. R. A. Prado Nov. 2, 2022, 9:43 p.m. UTC
  It is possible to run checks on a Devicetree by passing the CHECK_DTBS
flag when building. This is a useful shortcut to the dtbs_check make
target since it avoids checking unrelated Devicetrees, which can take
some time and is unnecessary if no bindings were modified. Document it.

Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>

---

 Documentation/devicetree/bindings/writing-schema.rst | 7 +++++++
 1 file changed, 7 insertions(+)
  

Comments

AngeloGioacchino Del Regno Nov. 3, 2022, 9:19 a.m. UTC | #1
Il 02/11/22 22:43, Nícolas F. R. A. Prado ha scritto:
> It is possible to run checks on a Devicetree by passing the CHECK_DTBS
> flag when building. This is a useful shortcut to the dtbs_check make
> target since it avoids checking unrelated Devicetrees, which can take
> some time and is unnecessary if no bindings were modified. Document it.
> 
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
>  > ---
> 
>   Documentation/devicetree/bindings/writing-schema.rst | 7 +++++++
>   1 file changed, 7 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/writing-schema.rst b/Documentation/devicetree/bindings/writing-schema.rst
> index 4a381d20f2b4..55ad556472b4 100644
> --- a/Documentation/devicetree/bindings/writing-schema.rst
> +++ b/Documentation/devicetree/bindings/writing-schema.rst
> @@ -167,6 +167,13 @@ setting the ``DT_SCHEMA_FILES`` variable to a specific schema file or pattern.
>       make dt_binding_check DT_SCHEMA_FILES=/gpio/
>       make dtbs_check DT_SCHEMA_FILES=trivial-devices.yaml
>   
> +Note that ``make dtbs_check`` will validate every DT source file that is

"Note that xxxx" looks a bit repeated... read:

Note that ``dtbs_check`` will skip any binding schema files with errors.
(etc etc)

Note that ``make dtbs_check`` will validate every DT source file ...
(etc etc)

Perhaps we can change the first paragraph saying
"In order to perform validation of DT source files, use..."
to something like:

In order to perform validation of all DT source files, use the ``dtbs_check``
target, or set the ``CHECK_DTBS`` variable to ``y`` when building specific DTs::

::

     make dtbs_check
     make CHECK_DTBS=y mediatek/mt8192-evb.dtb

Any opinion?

Cheers,
Angelo
  
Nícolas F. R. A. Prado Nov. 3, 2022, 3:01 p.m. UTC | #2
On Thu, Nov 03, 2022 at 10:19:15AM +0100, AngeloGioacchino Del Regno wrote:
> Il 02/11/22 22:43, Nícolas F. R. A. Prado ha scritto:
> > It is possible to run checks on a Devicetree by passing the CHECK_DTBS
> > flag when building. This is a useful shortcut to the dtbs_check make
> > target since it avoids checking unrelated Devicetrees, which can take
> > some time and is unnecessary if no bindings were modified. Document it.
> > 
> > Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
> >  > ---
> > 
> >   Documentation/devicetree/bindings/writing-schema.rst | 7 +++++++
> >   1 file changed, 7 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/writing-schema.rst b/Documentation/devicetree/bindings/writing-schema.rst
> > index 4a381d20f2b4..55ad556472b4 100644
> > --- a/Documentation/devicetree/bindings/writing-schema.rst
> > +++ b/Documentation/devicetree/bindings/writing-schema.rst
> > @@ -167,6 +167,13 @@ setting the ``DT_SCHEMA_FILES`` variable to a specific schema file or pattern.
> >       make dt_binding_check DT_SCHEMA_FILES=/gpio/
> >       make dtbs_check DT_SCHEMA_FILES=trivial-devices.yaml
> > +Note that ``make dtbs_check`` will validate every DT source file that is
> 
> "Note that xxxx" looks a bit repeated... read:
> 
> Note that ``dtbs_check`` will skip any binding schema files with errors.
> (etc etc)
> 
> Note that ``make dtbs_check`` will validate every DT source file ...
> (etc etc)
> 
> Perhaps we can change the first paragraph saying
> "In order to perform validation of DT source files, use..."
> to something like:
> 
> In order to perform validation of all DT source files, use the ``dtbs_check``
> target, or set the ``CHECK_DTBS`` variable to ``y`` when building specific DTs::
> 
> ::
> 
>     make dtbs_check
>     make CHECK_DTBS=y mediatek/mt8192-evb.dtb
> 
> Any opinion?

Something to keep in mind is that the purpose of this section is to describe how
to validate binding changes (both on the binding itself and in the DTs that use
them). For this, people really should be using dtbs_check since otherwise a new
warning might be missed. Using CHECK_DTBS is more suitable for a different use
case, which is to validate some dtbs without having changed the bindings, which
is why I added it at the end of the section more as a side note. For this
reason I think it's better to keep them separate.

About repeating the "Note that", that could just be changed for "It's worth
noting that" or something similar.

Thanks,
Nícolas
  
Marijn Suijten Nov. 16, 2022, 1:55 p.m. UTC | #3
Hi Nícolas,

On 2022-11-02 17:43:00, Nícolas F. R. A. Prado wrote:
> It is possible to run checks on a Devicetree by passing the CHECK_DTBS
> flag when building. This is a useful shortcut to the dtbs_check make
> target since it avoids checking unrelated Devicetrees, which can take
> some time and is unnecessary if no bindings were modified. Document it.
> 
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
> 
> ---
> 
>  Documentation/devicetree/bindings/writing-schema.rst | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/writing-schema.rst b/Documentation/devicetree/bindings/writing-schema.rst
> index 4a381d20f2b4..55ad556472b4 100644
> --- a/Documentation/devicetree/bindings/writing-schema.rst
> +++ b/Documentation/devicetree/bindings/writing-schema.rst
> @@ -167,6 +167,13 @@ setting the ``DT_SCHEMA_FILES`` variable to a specific schema file or pattern.
>      make dt_binding_check DT_SCHEMA_FILES=/gpio/
>      make dtbs_check DT_SCHEMA_FILES=trivial-devices.yaml
>  
> +Note that ``make dtbs_check`` will validate every DT source file that is
> +enabled. When making changes to a DT but not to the bindings, a possible
> +shortcut to validate only the DT in question is to explicitly build it with
> +the ``CHECK_DTBS`` flag enabled. For example::
> +
> +    make CHECK_DTBS=y mediatek/mt8192-evb.dtb

I have a bit of trouble getting this to work on a _clean_ out directory
(perhaps this should have been reported at the original patch, I had
always been using Dmitry's version [1] which didn't suffer from this
problem).

Consider running with the following:

    rm out -r
    make ARCH=arm64 O=out defconfig
    make ARCH=arm64 O=out CHECK_DTBS=y qcom/sm8450-sony-xperia-nagara-pdx223.dtb

After compiling preliminaries, it exits with:

    make[3]: *** No rule to make target 'arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara-pdx223.dtb'.  Stop.
    make[2]: *** [../scripts/Makefile.build:500: arch/arm64/boot/dts/qcom] Error 2
    make[1]: *** [/kernel/Makefile:1460: qcom/sm8450-sony-xperia-nagara-pdx223.dtb] Error 2
    make[1]: Leaving directory '/kernel/out'
    make: *** [Makefile:231: __sub-make] Error 2

However, if I lint all DTBs first by running `dtbs_check`, it seems the
schema preliminaries are built:

      LINT    Documentation/devicetree/bindings
      CHKDT   Documentation/devicetree/bindings/processed-schema.json
    ... bunch of warnings
      SCHEMA  Documentation/devicetree/bindings/processed-schema.json

And here I ctrl+c the build so that it doesn't run DTC_CHK over every
dts.  If I now re-run the original command on my .dtb of choice, it
completes successfully with the warnings that I expect.  Is the logic
behind `CHECK_DTBS=y` simply missing a step to make sure SCHEMA is built
and up-to-date?

Aside from not working in a clean output directly, could this imply
schema changes (edits in Documentation/devicetree/bindings) _are not_
propagated when running with `CHECK_DTBS=y?

At the same time running this command twice results in no output the
second time around, supposedly because the dtb has "already been built".
Is that also something we can improve?

[1]: https://lore.kernel.org/linux-arm-msm/20220623144357.297252-1-dmitry.baryshkov@linaro.org/

Thanks!
- Marijn
  
Marijn Suijten Nov. 16, 2022, 2:01 p.m. UTC | #4
+CC Konrad and Dmitry whom I discussed this with before.

On 2022-11-16 14:55:04, Marijn Suijten wrote:
> Hi Nícolas,
> 
> On 2022-11-02 17:43:00, Nícolas F. R. A. Prado wrote:
> > It is possible to run checks on a Devicetree by passing the CHECK_DTBS
> > flag when building. This is a useful shortcut to the dtbs_check make
> > target since it avoids checking unrelated Devicetrees, which can take
> > some time and is unnecessary if no bindings were modified. Document it.
> > 
> > Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
> > 
> > ---
> > 
> >  Documentation/devicetree/bindings/writing-schema.rst | 7 +++++++
> >  1 file changed, 7 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/writing-schema.rst b/Documentation/devicetree/bindings/writing-schema.rst
> > index 4a381d20f2b4..55ad556472b4 100644
> > --- a/Documentation/devicetree/bindings/writing-schema.rst
> > +++ b/Documentation/devicetree/bindings/writing-schema.rst
> > @@ -167,6 +167,13 @@ setting the ``DT_SCHEMA_FILES`` variable to a specific schema file or pattern.
> >      make dt_binding_check DT_SCHEMA_FILES=/gpio/
> >      make dtbs_check DT_SCHEMA_FILES=trivial-devices.yaml
> >  
> > +Note that ``make dtbs_check`` will validate every DT source file that is
> > +enabled. When making changes to a DT but not to the bindings, a possible
> > +shortcut to validate only the DT in question is to explicitly build it with
> > +the ``CHECK_DTBS`` flag enabled. For example::
> > +
> > +    make CHECK_DTBS=y mediatek/mt8192-evb.dtb
> 
> I have a bit of trouble getting this to work on a _clean_ out directory
> (perhaps this should have been reported at the original patch, I had
> always been using Dmitry's version [1] which didn't suffer from this
> problem).
> 
> Consider running with the following:
> 
>     rm out -r
>     make ARCH=arm64 O=out defconfig
>     make ARCH=arm64 O=out CHECK_DTBS=y qcom/sm8450-sony-xperia-nagara-pdx223.dtb
> 
> After compiling preliminaries, it exits with:
> 
>     make[3]: *** No rule to make target 'arch/arm64/boot/dts/qcom/sm8450-sony-xperia-nagara-pdx223.dtb'.  Stop.
>     make[2]: *** [../scripts/Makefile.build:500: arch/arm64/boot/dts/qcom] Error 2
>     make[1]: *** [/kernel/Makefile:1460: qcom/sm8450-sony-xperia-nagara-pdx223.dtb] Error 2
>     make[1]: Leaving directory '/kernel/out'
>     make: *** [Makefile:231: __sub-make] Error 2
> 
> However, if I lint all DTBs first by running `dtbs_check`, it seems the
> schema preliminaries are built:
> 
>       LINT    Documentation/devicetree/bindings
>       CHKDT   Documentation/devicetree/bindings/processed-schema.json
>     ... bunch of warnings
>       SCHEMA  Documentation/devicetree/bindings/processed-schema.json
> 
> And here I ctrl+c the build so that it doesn't run DTC_CHK over every
> dts.  If I now re-run the original command on my .dtb of choice, it
> completes successfully with the warnings that I expect.  Is the logic
> behind `CHECK_DTBS=y` simply missing a step to make sure SCHEMA is built
> and up-to-date?
> 
> Aside from not working in a clean output directly, could this imply
> schema changes (edits in Documentation/devicetree/bindings) _are not_
> propagated when running with `CHECK_DTBS=y?
> 
> At the same time running this command twice results in no output the
> second time around, supposedly because the dtb has "already been built".
> Is that also something we can improve?
> 
> [1]: https://lore.kernel.org/linux-arm-msm/20220623144357.297252-1-dmitry.baryshkov@linaro.org/
> 
> Thanks!
> - Marijn
>
  

Patch

diff --git a/Documentation/devicetree/bindings/writing-schema.rst b/Documentation/devicetree/bindings/writing-schema.rst
index 4a381d20f2b4..55ad556472b4 100644
--- a/Documentation/devicetree/bindings/writing-schema.rst
+++ b/Documentation/devicetree/bindings/writing-schema.rst
@@ -167,6 +167,13 @@  setting the ``DT_SCHEMA_FILES`` variable to a specific schema file or pattern.
     make dt_binding_check DT_SCHEMA_FILES=/gpio/
     make dtbs_check DT_SCHEMA_FILES=trivial-devices.yaml
 
+Note that ``make dtbs_check`` will validate every DT source file that is
+enabled. When making changes to a DT but not to the bindings, a possible
+shortcut to validate only the DT in question is to explicitly build it with
+the ``CHECK_DTBS`` flag enabled. For example::
+
+    make CHECK_DTBS=y mediatek/mt8192-evb.dtb
+
 
 json-schema Resources
 ---------------------