Hi,
This patchset makes necessary changes to the kernel to add support for
building overlays (%.dtbo) and the required fdtoverlay tool. This also
builds static_test.dtb using most of the existing overlay tests present
in drivers/of/unittest-data/ for better test coverage.
Note that in order for anyone to test this stuff, you need to manually
run the ./update-dtc-source.sh script once to fetch the necessary
changes from the external DTC project (i.e. fdtoverlay.c and this[1]
patch).
I have tested this patchset for static and runtime testing (on Hikey
board) and no issues were reported.
V7:
- Add a comment in scripts/dtc/Makefile
- Add Ack from Masahiro for patch 4/6.
- Drop word "merge" from commit log of 2/6.
- Split apply_static_overlay, static_test.dtb, and static_base.dts into
two parts to handle overlay_base.dts and testcases.dts separately.
V6:
- Create separate rules for dtbo-s and separate entries in .gitignore in
4/6 (Masahiro).
- A new file layout for handling all overlays for existing and new tests
5/6 (Frank).
- Include overlay.dts as well now in 6/6 (Frank).
V5:
- Don't reuse DTC_SOURCE for fdtoverlay.c in patch 1/5 (Frank).
- Update .gitignore and scripts/Makefile.dtbinst, drop dtbo-y syntax and
DTC_FLAGS += -@ in patch 4/5 (Masahiro).
- Remove the intermediate dtb, rename output to static_test.dtb, don't
use overlay.dtb and overlay_base.dtb for static builds, improved
layout/comments in Makefile for patch 5/5 (Frank).
--
Viresh
[1] https://github.com/dgibson/dtc/commit/163f0469bf2ed8b2fe5aa15bc796b93c70243ddc
[2] https://lore.kernel.org/lkml/74f8aa8f-ffab-3b0f-186f-31fb7395ebbb@gmail.com/
Viresh Kumar (6):
scripts: dtc: Fetch fdtoverlay.c from external DTC project
scripts: dtc: Build fdtoverlay tool
scripts: dtc: Remove the unused fdtdump.c file
kbuild: Add support to build overlays (%.dtbo)
of: unittest: Create overlay_common.dtsi and testcases_common.dtsi
of: unittest: Statically apply overlays using fdtoverlay
.gitignore | 1 +
Makefile | 5 +-
drivers/of/unittest-data/Makefile | 56 ++++++
drivers/of/unittest-data/overlay_base.dts | 90 +---------
drivers/of/unittest-data/overlay_common.dtsi | 91 ++++++++++
drivers/of/unittest-data/static_base_1.dts | 4 +
drivers/of/unittest-data/static_base_2.dts | 4 +
drivers/of/unittest-data/testcases.dts | 18 +-
.../of/unittest-data/testcases_common.dtsi | 19 ++
.../of/unittest-data/tests-interrupts.dtsi | 7 -
scripts/Makefile.dtbinst | 3 +
scripts/Makefile.lib | 5 +
scripts/dtc/Makefile | 8 +-
scripts/dtc/fdtdump.c | 163 ------------------
scripts/dtc/update-dtc-source.sh | 3 +-
15 files changed, 204 insertions(+), 273 deletions(-)
create mode 100644 drivers/of/unittest-data/overlay_common.dtsi
create mode 100644 drivers/of/unittest-data/static_base_1.dts
create mode 100644 drivers/of/unittest-data/static_base_2.dts
create mode 100644 drivers/of/unittest-data/testcases_common.dtsi
delete mode 100644 scripts/dtc/fdtdump.c
base-commit: 6ee1d745b7c9fd573fba142a2efdad76a9f1cb04
--
2.25.0.rc1.19.g042ed3e048af
We will start building overlays for platforms soon in the kernel and
would need fdtoverlay tool going forward. Lets start fetching it.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
scripts/dtc/update-dtc-source.sh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
@@ -54,7 +55,7 @@ dtc_log=$(git log --oneline ${last_dtc_ver}..)# Copy the files into the Linux treecd$DTC_LINUX_PATH-forfin$DTC_SOURCE;do+forfin$DTC_SOURCE$FDTOVERLAY_SOURCE;docp${DTC_UPSTREAM_PATH}/${f}${f}gitadd${f}done
We will start building overlays for platforms soon in the kernel and
would need fdtoverlay going forward. Lets start building it.
The fdtoverlay program applies one or more overlay dtb blobs to a base
dtb blob. The kernel build system would later use fdtoverlay to generate
the overlaid blobs based on platform specific configurations.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
scripts/dtc/Makefile | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
@@ -1,13 +1,19 @@# SPDX-License-Identifier: GPL-2.0# scripts/dtc makefile-hostprogs-always-$(CONFIG_DTC)+=dtc+hostprogs-always-$(CONFIG_DTC)+=dtcfdtoverlayhostprogs-always-$(CHECK_DT_BINDING)+=dtcdtc-objs:=dtc.oflattree.ofstree.odata.olivetree.otreesource.o\srcpos.ochecks.outil.odtc-objs+=dtc-lexer.lex.odtc-parser.tab.o+# The upstream project builds libfdt as a separate library. We are choosing to+# instead directly link the libfdt object files into fdtoverlay.+libfdt-objs:=fdt.ofdt_ro.ofdt_wip.ofdt_sw.ofdt_rw.ofdt_strerror.ofdt_empty_tree.ofdt_addresses.ofdt_overlay.o+libfdt=$(addprefixlibfdt/,$(libfdt-objs))+fdtoverlay-objs:=$(libfdt)fdtoverlay.outil.o+# Source files need to get at the userspace version of libfdt_env.h to compileHOST_EXTRACFLAGS+=-I$(srctree)/$(src)/libfdt
This was copied from external DTC repository long back and isn't used
anymore. Over that the dtc tool can be used to generate the dts source
back from the dtb. Remove the unused fdtdump.c file.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
scripts/dtc/fdtdump.c | 163 ------------------------------------------
1 file changed, 163 deletions(-)
delete mode 100644 scripts/dtc/fdtdump.c
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
.dtbo extension to distinguish it from normal blobs.
Acked-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
.gitignore | 1 +
Makefile | 5 ++++-
scripts/Makefile.dtbinst | 3 +++
scripts/Makefile.lib | 5 +++++
4 files changed, 13 insertions(+), 1 deletion(-)
Hi Viresh,
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
.dtbo extension to distinguish it from normal blobs.
Acked-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Hi Viresh,
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
--
viresh
Hi Viresh,
On Fri, Feb 5, 2021 at 10:25 AM Viresh Kumar [off-list ref] wrote:
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
Care to explain why? I've been using .dtsi for ages in
https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git/log/?h=topic/renesas-overlays
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Hi Viresh,
On Fri, Feb 5, 2021 at 10:25 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
Hi Viresh,
On Fri, Feb 5, 2021 at 10:55 AM Viresh Kumar [off-list ref] wrote:
On 05-02-21, 10:41, Geert Uytterhoeven wrote:
quoted
On Fri, Feb 5, 2021 at 10:25 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
I don't see you building them anywhere, they aren't added to the
Makefile ever. What am I missing ?
actually none of the dtso's were added to any makefile in that branch.
I never had a need for those changes to dtc. .dtso/.dtbo work fine regardless.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
From: Rob Herring <robh@kernel.org> Date: 2021-02-05 21:11:49
On Fri, Feb 05, 2021 at 11:17:10AM +0100, Geert Uytterhoeven wrote:
Hi Viresh,
On Fri, Feb 5, 2021 at 10:55 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:41, Geert Uytterhoeven wrote:
quoted
On Fri, Feb 5, 2021 at 10:25 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
I don't see you building them anywhere, they aren't added to the
Makefile ever. What am I missing ?
actually none of the dtso's were added to any makefile in that branch.
I never had a need for those changes to dtc. .dtso/.dtbo work fine regardless.
I think what Viresh means is dtc won't automatically set the input type
to dts if not .dts.
We stuck with .dtbo as it's already widely used. I don't know about
dtso though. If there's strong consensus to use .dtso, then let's do
that. Whatever color for this shed you like.
Rob
Hi Rob,
On Fri, Feb 5, 2021 at 10:08 PM Rob Herring [off-list ref] wrote:
On Fri, Feb 05, 2021 at 11:17:10AM +0100, Geert Uytterhoeven wrote:
> On Fri, Feb 5, 2021 at 10:55 AM Viresh Kumar [off-list ref] wrote:
quoted
quoted
On 05-02-21, 10:41, Geert Uytterhoeven wrote:
quoted
On Fri, Feb 5, 2021 at 10:25 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
I think what Viresh means is dtc won't automatically set the input type
to dts if not .dts.
Which is not needed with the kernel build rules.
We stuck with .dtbo as it's already widely used. I don't know about
dtso though. If there's strong consensus to use .dtso, then let's do
that. Whatever color for this shed you like.
From: Frank Rowand <hidden> Date: 2021-02-25 01:34:28
On 2/5/21 3:08 PM, Rob Herring wrote:
On Fri, Feb 05, 2021 at 11:17:10AM +0100, Geert Uytterhoeven wrote:
quoted
Hi Viresh,
On Fri, Feb 5, 2021 at 10:55 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:41, Geert Uytterhoeven wrote:
quoted
On Fri, Feb 5, 2021 at 10:25 AM Viresh Kumar [off-list ref] wrote:
quoted
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
I don't see you building them anywhere, they aren't added to the
Makefile ever. What am I missing ?
actually none of the dtso's were added to any makefile in that branch.
I never had a need for those changes to dtc. .dtso/.dtbo work fine regardless.
I think what Viresh means is dtc won't automatically set the input type
to dts if not .dts.
We stuck with .dtbo as it's already widely used. I don't know about
dtso though. If there's strong consensus to use .dtso, then let's do
that. Whatever color for this shed you like.
I overlooked this and mistakenly thought that the move to .dtbo also
involved changing to .dtso. My bad.
My favorite color here is to use .dtso for the source file that will
be compiled to create a .dtbo.
Linus has already accepted patch 4/6 to 5.12-rc1, so changing to .dtso
will require another patch.
-Frank
I overlooked this and mistakenly thought that the move to .dtbo also
involved changing to .dtso. My bad.
My favorite color here is to use .dtso for the source file that will
be compiled to create a .dtbo.
Linus has already accepted patch 4/6 to 5.12-rc1, so changing to .dtso
will require another patch.
Looks like this is what many people desire, lets do it and make it a
standard even if it wasn't followed earlier.
What about this ?
I had to keep the original line as is:
$(obj)/%.dtbo: $(src)/%.dts $(DTC) FORCE
to support the unittest stuff as there are no dtso files there. There
are few things we can do here:
- Don't follow the dtso/dtbo convention for unittest, build files as
dtb only and everything will continue to work I suppose as
fdtoverlay won't complain.
- Keep the above line in Makefile, this doesn't sound right, isn't it
?
- Make .dts links for unittest file, maybe from the Makefile itself.
- Something else ?
--
viresh
Hi Viresh,
On Wed, Mar 3, 2021 at 6:21 AM Viresh Kumar [off-list ref] wrote:
On 24-02-21, 19:32, Frank Rowand wrote:
quoted
I overlooked this and mistakenly thought that the move to .dtbo also
involved changing to .dtso. My bad.
My favorite color here is to use .dtso for the source file that will
be compiled to create a .dtbo.
Linus has already accepted patch 4/6 to 5.12-rc1, so changing to .dtso
will require another patch.
Looks like this is what many people desire, lets do it and make it a
standard even if it wasn't followed earlier.
What about this ?
Thanks, looks good to me, and works for me, so
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
I'm wondering if "dt.yaml" should be changed to "dto.yaml" (here and in
the existing rule earlier in Makefile.lib), to avoid issues if both foo.dts and
foo.dtso exist? Unlikely, but it might happen...
I had to keep the original line as is:
$(obj)/%.dtbo: $(src)/%.dts $(DTC) FORCE
to support the unittest stuff as there are no dtso files there. There
are few things we can do here:
- Don't follow the dtso/dtbo convention for unittest, build files as
dtb only and everything will continue to work I suppose as
fdtoverlay won't complain.
- Keep the above line in Makefile, this doesn't sound right, isn't it
?
- Make .dts links for unittest file, maybe from the Makefile itself.
- Something else ?
Rename unittest .dts files to .dtso where applicable?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Hi Viresh,
On Wed, Mar 3, 2021 at 6:21 AM Viresh Kumar [off-list ref] wrote:
quoted
On 24-02-21, 19:32, Frank Rowand wrote:
quoted
I overlooked this and mistakenly thought that the move to .dtbo also
involved changing to .dtso. My bad.
My favorite color here is to use .dtso for the source file that will
be compiled to create a .dtbo.
Linus has already accepted patch 4/6 to 5.12-rc1, so changing to .dtso
will require another patch.
Looks like this is what many people desire, lets do it and make it a
standard even if it wasn't followed earlier.
What about this ?
Thanks, looks good to me, and works for me, so
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
I'm wondering if "dt.yaml" should be changed to "dto.yaml" (here and in
the existing rule earlier in Makefile.lib), to avoid issues if both foo.dts and
foo.dtso exist? Unlikely, but it might happen...
I will let Rob answer that :)
quoted
I had to keep the original line as is:
$(obj)/%.dtbo: $(src)/%.dts $(DTC) FORCE
to support the unittest stuff as there are no dtso files there. There
are few things we can do here:
- Don't follow the dtso/dtbo convention for unittest, build files as
dtb only and everything will continue to work I suppose as
fdtoverlay won't complain.
- Keep the above line in Makefile, this doesn't sound right, isn't it
?
- Make .dts links for unittest file, maybe from the Makefile itself.
- Something else ?
Rename unittest .dts files to .dtso where applicable?
They are used for some runtime tests, we are reusing them to do this
testing as well, so renaming them is out of the question I believe.
--
viresh
From: David Gibson <hidden> Date: 2021-02-06 07:53:56
On Fri, Feb 05, 2021 at 02:55:07PM +0530, Viresh Kumar wrote:
On 05-02-21, 10:02, Geert Uytterhoeven wrote:
quoted
Hi Viresh,
Thanks for your patch
(which I only noticed because it appeared in dt-rh/for-next ;-)
On Fri, Jan 29, 2021 at 8:31 AM Viresh Kumar [off-list ref] wrote:
quoted
Add support for building DT overlays (%.dtbo). The overlay's source file
will have the usual extension, i.e. .dts, though the blob will have
Why use .dts and not .dtso for overlays?
Because you originally (until v5) had a single rule for building .dtb
and .dtbo files?
I am fine with doing that as well if Rob and David agree to it. Rob
did suggest that at one point but we didn't do much about it later on
for some reason.
FWIW, this will also require a change in the DTC compiler.
Not really. It would need a change to automatically recognize that
extension, but you can easily work around that by explicitly giving
the -I option to specify the input type.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
Now that fdtoverlay is part of the kernel build, start using it to test
the unitest overlays we have by applying them statically. Create two new
base files static_base_1.dts and static_base_2.dts which includes other
.dtsi files.
Some unittest overlays deliberately contain errors that unittest checks
for. These overlays will cause fdtoverlay to fail, and are thus not
included for static builds.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/of/unittest-data/Makefile | 56 ++++++++++++++++++++++
drivers/of/unittest-data/static_base_1.dts | 4 ++
drivers/of/unittest-data/static_base_2.dts | 4 ++
3 files changed, 64 insertions(+)
create mode 100644 drivers/of/unittest-data/static_base_1.dts
create mode 100644 drivers/of/unittest-data/static_base_2.dts
@@ -34,7 +34,63 @@ DTC_FLAGS_overlay += -@DTC_FLAGS_overlay_bad_phandle+=-@DTC_FLAGS_overlay_bad_symbol+=-@DTC_FLAGS_overlay_base+=-@+DTC_FLAGS_static_base_1+=-@+DTC_FLAGS_static_base_2+=-@DTC_FLAGS_testcases+=-@# suppress warnings about intentional errorsDTC_FLAGS_testcases+=-Wno-interrupts_property++# Apply overlays statically with fdtoverlay. This is a build time test that+# the overlays can be applied successfully by fdtoverlay. This does not+# guarantee that the overlays can be applied successfully at run time by+# unittest, but it provides a bit of build time test coverage for those+# who do not execute unittest.+#+# The overlays are applied on top of static_base_1.dtb and static_base_2.dtb to+# create static_test_1.dtb and static_test_2.dtb. If fdtoverlay detects an+# error than the kernel build will fail. static_test_1.dtb and+# static_test_2.dtb are not consumed by unittest.+#+# Some unittest overlays deliberately contain errors that unittest checks for.+# These overlays will cause fdtoverlay to fail, and are thus not included+# in the static test:+# overlay_bad_add_dup_node.dtb \+# overlay_bad_add_dup_prop.dtb \+# overlay_bad_phandle.dtb \+# overlay_bad_symbol.dtb \++apply_static_overlay_1:=overlay_0.dtb\+overlay_1.dtb\+overlay_2.dtb\+overlay_3.dtb\+overlay_4.dtb\+overlay_5.dtb\+overlay_6.dtb\+overlay_7.dtb\+overlay_8.dtb\+overlay_9.dtb\+overlay_10.dtb\+overlay_11.dtb\+overlay_12.dtb\+overlay_13.dtb\+overlay_15.dtb\+overlay_gpio_01.dtb\+overlay_gpio_02a.dtb\+overlay_gpio_02b.dtb\+overlay_gpio_03.dtb\+overlay_gpio_04a.dtb\+overlay_gpio_04b.dtb++apply_static_overlay_2:=overlay.dtb++quiet_cmd_fdtoverlay=FDTOVERLAY$@+cmd_fdtoverlay=$(objtree)/scripts/dtc/fdtoverlay-o$@-i$^++$(obj)/static_test_1.dtb:$(obj)/static_base_1.dtb$(addprefix$(obj)/,$(apply_static_overlay_1))+$(callif_changed,fdtoverlay)++$(obj)/static_test_2.dtb:$(obj)/static_base_2.dtb$(addprefix$(obj)/,$(apply_static_overlay_2))+$(callif_changed,fdtoverlay)++always-$(CONFIG_OF_OVERLAY)+=static_test_1.dtbstatic_test_2.dtb
From: Rob Herring <robh@kernel.org> Date: 2021-02-04 01:55:09
On Fri, Jan 29, 2021 at 12:54:10PM +0530, Viresh Kumar wrote:
Now that fdtoverlay is part of the kernel build, start using it to test
the unitest overlays we have by applying them statically. Create two new
base files static_base_1.dts and static_base_2.dts which includes other
.dtsi files.
Some unittest overlays deliberately contain errors that unittest checks
for. These overlays will cause fdtoverlay to fail, and are thus not
included for static builds.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/of/unittest-data/Makefile | 56 ++++++++++++++++++++++
drivers/of/unittest-data/static_base_1.dts | 4 ++
drivers/of/unittest-data/static_base_2.dts | 4 ++
3 files changed, 64 insertions(+)
create mode 100644 drivers/of/unittest-data/static_base_1.dts
create mode 100644 drivers/of/unittest-data/static_base_2.dts
The first 4 patches look good to me, no need to resend those if you
don't want to.
@@ -34,7 +34,63 @@ DTC_FLAGS_overlay += -@DTC_FLAGS_overlay_bad_phandle+=-@DTC_FLAGS_overlay_bad_symbol+=-@DTC_FLAGS_overlay_base+=-@+DTC_FLAGS_static_base_1+=-@+DTC_FLAGS_static_base_2+=-@DTC_FLAGS_testcases+=-@# suppress warnings about intentional errorsDTC_FLAGS_testcases+=-Wno-interrupts_property++# Apply overlays statically with fdtoverlay. This is a build time test that+# the overlays can be applied successfully by fdtoverlay. This does not+# guarantee that the overlays can be applied successfully at run time by+# unittest, but it provides a bit of build time test coverage for those+# who do not execute unittest.+#+# The overlays are applied on top of static_base_1.dtb and static_base_2.dtb to+# create static_test_1.dtb and static_test_2.dtb. If fdtoverlay detects an+# error than the kernel build will fail. static_test_1.dtb and+# static_test_2.dtb are not consumed by unittest.+#+# Some unittest overlays deliberately contain errors that unittest checks for.+# These overlays will cause fdtoverlay to fail, and are thus not included+# in the static test:+# overlay_bad_add_dup_node.dtb \+# overlay_bad_add_dup_prop.dtb \+# overlay_bad_phandle.dtb \+# overlay_bad_symbol.dtb \++apply_static_overlay_1:=overlay_0.dtb\+overlay_1.dtb\+overlay_2.dtb\+overlay_3.dtb\+overlay_4.dtb\+overlay_5.dtb\+overlay_6.dtb\+overlay_7.dtb\+overlay_8.dtb\+overlay_9.dtb\+overlay_10.dtb\+overlay_11.dtb\+overlay_12.dtb\+overlay_13.dtb\+overlay_15.dtb\+overlay_gpio_01.dtb\+overlay_gpio_02a.dtb\+overlay_gpio_02b.dtb\+overlay_gpio_03.dtb\+overlay_gpio_04a.dtb\+overlay_gpio_04b.dtb
We can't be leaving all this for ordinary folks to copy-n-paste in
every directory with overlays. It needs to be simple for users like
multi-file modules:
test1-dtbs := static_base_1.dtb $(apply_static_overlay_1)
test2-dtbs := static_base_2.dtb $(apply_static_overlay_2)
dtb-$(CONFIG_OF_OVERLAY) += test1.dtb test2.dtb
I've gotten something working with the patch below. Hopefully, Masahiro
has some comments on it. I couldn't get multiple '-dtbs' to work without
the '.SECONDEXPANSION'.
Rob
8<-------------------------------------------------------------------
From 3f3f1e478d0cc512050c70eda2e9e6f577bc3107 Mon Sep 17 00:00:00 2001
From: Rob Herring <robh@kernel.org>
Date: Wed, 3 Feb 2021 19:22:47 -0600
Subject: [PATCH] rework dtb overlay building
Signed-off-by: Rob Herring <robh@kernel.org>
---
drivers/of/unittest-data/Makefile | 54 ++++++++++++++-----------------
scripts/Makefile.lib | 12 +++++++
2 files changed, 36 insertions(+), 30 deletions(-)
@@ -332,6 +335,15 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE$(obj)/%.dtbo:$(src)/%.dts$(DTC)FORCE$(callif_changed_dep,dtc)++quiet_cmd_fdtoverlay=DTOVL$@+cmd_fdtoverlay=$(objtree)/scripts/dtc/fdtoverlay-o$@-i$(real-prereqs)++.SECONDEXPANSION:++$(obj)/%.dtb:$$(addprefix$$(obj)/,$$(%-dtbs))FORCE+$(callif_changed,fdtoverlay)+DT_CHECKER?=dt-validateDT_BINDING_DIR:=Documentation/devicetree/bindings# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
@@ -332,6 +335,15 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE$(obj)/%.dtbo:$(src)/%.dts$(DTC)FORCE$(callif_changed_dep,dtc)++quiet_cmd_fdtoverlay=DTOVL$@+cmd_fdtoverlay=$(objtree)/scripts/dtc/fdtoverlay-o$@-i$(real-prereqs)++.SECONDEXPANSION:++$(obj)/%.dtb:$$(addprefix$$(obj)/,$$(%-dtbs))FORCE+$(callif_changed,fdtoverlay)+DT_CHECKER?=dt-validateDT_BINDING_DIR:=Documentation/devicetree/bindings# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
Thanks, this simplifies it greatly for platform guys.
--
viresh
Even after your patch there are some issues I am facing:
1. dtbs_check doesn't test hi3660-hikey960-overlay.dts. I also tried
to add it to dtbo-y +=, but that didn't do anything as well.
I expected this to work as we have this in scripts/Makefile.lib:
ifneq ($(CHECK_DTBS),)
extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y))
+extra-y += $(patsubst %.dtbo,%.dt.yaml, $(dtb-y))
extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-))
+extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtbo,%.dt.yaml, $(dtb-))
endif
2. This fails dtbs_check as it tries to run it for the source file of
test1.dtb
$ make ARCH=arm64 O=../barm64/ -j8 CROSS_COMPILE=aarch64-linux-gnu- dtbs_check
make[1]: Entering directory '/mnt/ssd/all/work/repos/devel/barm64'
make[3]: *** No rule to make target 'arch/arm64/boot/dts/hisilicon/test1.dt.yaml', needed by '__build'. Stop.
/mnt/ssd/all/work/repos/devel/linux/scripts/Makefile.build:496: recipe for target 'arch/arm64/boot/dts/hisilicon' failed
make[2]: *** [arch/arm64/boot/dts/hisilicon] Error 2
make[2]: *** Waiting for unfinished jobs....
/mnt/ssd/all/work/repos/devel/linux/Makefile:1345: recipe for target 'dtbs' failed
make[1]: *** [dtbs] Error 2
make[1]: Leaving directory '/mnt/ssd/all/work/repos/devel/barm64'
Makefile:185: recipe for target '__sub-make' failed
make: *** [__sub-make] Error 2
I am not sure how to fix this.
--
viresh
Even after your patch there are some issues I am facing:
1. dtbs_check doesn't test hi3660-hikey960-overlay.dts. I also tried
to add it to dtbo-y +=, but that didn't do anything as well.
I expected this to work as we have this in scripts/Makefile.lib:
ifneq ($(CHECK_DTBS),)
extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y))
+extra-y += $(patsubst %.dtbo,%.dt.yaml, $(dtb-y))
extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-))
+extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtbo,%.dt.yaml, $(dtb-))
endif
I'll have to try that out. I think that should work.
2. This fails dtbs_check as it tries to run it for the source file of
test1.dtb
$ make ARCH=arm64 O=../barm64/ -j8 CROSS_COMPILE=aarch64-linux-gnu- dtbs_check
make[1]: Entering directory '/mnt/ssd/all/work/repos/devel/barm64'
make[3]: *** No rule to make target 'arch/arm64/boot/dts/hisilicon/test1.dt.yaml', needed by '__build'. Stop.
/mnt/ssd/all/work/repos/devel/linux/scripts/Makefile.build:496: recipe for target 'arch/arm64/boot/dts/hisilicon' failed
make[2]: *** [arch/arm64/boot/dts/hisilicon] Error 2
make[2]: *** Waiting for unfinished jobs....
/mnt/ssd/all/work/repos/devel/linux/Makefile:1345: recipe for target 'dtbs' failed
make[1]: *** [dtbs] Error 2
make[1]: Leaving directory '/mnt/ssd/all/work/repos/devel/barm64'
Makefile:185: recipe for target '__sub-make' failed
make: *** [__sub-make] Error 2
I am not sure how to fix this.
Even if we fixed the make rules, it's not going to work with
validation. There's some information from source files that we
maintain in yaml output, but is lost in dtb output. For example, the
sizes of /bits/ syntax are maintained. For now, I think we'll want to
just validate base and overlays separately. We may need to turn off
checks in overlays for required properties as they may be incomplete.
We already do that on disabled nodes.
Rob
I'll have to try that out. I think that should work.
It works with your patch itself, just that it was done after the
failure and so wasn't happening.
quoted
2. This fails dtbs_check as it tries to run it for the source file of
test1.dtb
$ make ARCH=arm64 O=../barm64/ -j8 CROSS_COMPILE=aarch64-linux-gnu- dtbs_check
make[1]: Entering directory '/mnt/ssd/all/work/repos/devel/barm64'
make[3]: *** No rule to make target 'arch/arm64/boot/dts/hisilicon/test1.dt.yaml', needed by '__build'. Stop.
/mnt/ssd/all/work/repos/devel/linux/scripts/Makefile.build:496: recipe for target 'arch/arm64/boot/dts/hisilicon' failed
make[2]: *** [arch/arm64/boot/dts/hisilicon] Error 2
make[2]: *** Waiting for unfinished jobs....
/mnt/ssd/all/work/repos/devel/linux/Makefile:1345: recipe for target 'dtbs' failed
make[1]: *** [dtbs] Error 2
make[1]: Leaving directory '/mnt/ssd/all/work/repos/devel/barm64'
Makefile:185: recipe for target '__sub-make' failed
make: *** [__sub-make] Error 2
I am not sure how to fix this.
Even if we fixed the make rules, it's not going to work with
validation. There's some information from source files that we
maintain in yaml output, but is lost in dtb output. For example, the
sizes of /bits/ syntax are maintained. For now, I think we'll want to
just validate base and overlays separately. We may need to turn off
checks in overlays for required properties as they may be incomplete.
We already do that on disabled nodes.
I did this instead and it made everything work, we don't try dt.yaml
for the test1.dtb file anymore, is this acceptable ?
We may need to turn off
checks in overlays for required properties as they may be incomplete.
We already do that on disabled nodes.
And after decent amount of effort understanding how to do this, I
finally did it in a not so efficient way, I am sure you can help
improving it :)
Author: Viresh Kumar [off-list ref]
Date: Tue Feb 9 12:19:50 2021 +0530
dt-validate: Skip "required property" checks for overlays
The overlays may not carry the required properties and would depend on
the base dtb to carry those, there is no point raising those errors
here.
Signed-off-by: Viresh Kumar [off-list ref]
---
tools/dt-validate | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
@@ -80,6 +80,23 @@ show_unmatched = False (filename, line, col, fullname, node['compatible']), file=sys.stderr) continue+ if nodename == '/':+ is_fragment = False+ for name in node.items():+ if name[0] == 'fragment@0':+ is_fragment = True+ break;++ if is_fragment == True:+ if 'required property' in error.message:+ continue+ elif error.context:+ for e in error.context:+ if not 'required property' in e.message:+ break+ else:+ continue+ print(dtschema.format_error(filename, error, nodename=nodename, verbose=verbose) + '\n\tFrom schema: ' + schema['$filename'], file=sys.stderr)
And after decent amount of effort understanding how to do this, I
finally did it in a not so efficient way, I am sure you can help
improving it :)
Ping!
Also, where do we send patches for dt-schema ? Which list ?
quoted hunk
Author: Viresh Kumar [off-list ref]
Date: Tue Feb 9 12:19:50 2021 +0530
dt-validate: Skip "required property" checks for overlays
The overlays may not carry the required properties and would depend on
the base dtb to carry those, there is no point raising those errors
here.
Signed-off-by: Viresh Kumar [off-list ref]
---
tools/dt-validate | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
@@ -80,6 +80,23 @@ show_unmatched = False (filename, line, col, fullname, node['compatible']), file=sys.stderr) continue+ if nodename == '/':+ is_fragment = False+ for name in node.items():+ if name[0] == 'fragment@0':+ is_fragment = True+ break;++ if is_fragment == True:+ if 'required property' in error.message:+ continue+ elif error.context:+ for e in error.context:+ if not 'required property' in e.message:+ break+ else:+ continue+ print(dtschema.format_error(filename, error, nodename=nodename, verbose=verbose) + '\n\tFrom schema: ' + schema['$filename'], file=sys.stderr)
In order to build-test the same unit-test files using fdtoverlay tool,
move the device nodes from the existing overlay_base.dts and
testcases_common.dts files to .dtsi counterparts. The .dts files now
include the new .dtsi files, resulting in exactly the same behavior as
earlier.
The .dtsi files can now be reused for compile time tests using
fdtoverlay (will be done by a later commit).
This is required because the base files passed to fdtoverlay tool
shouldn't be overlays themselves (i.e. shouldn't have the /plugin/;
tag).
Note that this commit also moves "testcase-device2" node to
testcases.dts from tests-interrupts.dtsi, as this node has a deliberate
error in it and is only relevant for runtime testing done with
unittest.c.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/of/unittest-data/overlay_base.dts | 90 +-----------------
drivers/of/unittest-data/overlay_common.dtsi | 91 +++++++++++++++++++
drivers/of/unittest-data/testcases.dts | 18 ++--
.../of/unittest-data/testcases_common.dtsi | 19 ++++
.../of/unittest-data/tests-interrupts.dtsi | 7 --
5 files changed, 118 insertions(+), 107 deletions(-)
create mode 100644 drivers/of/unittest-data/overlay_common.dtsi
create mode 100644 drivers/of/unittest-data/testcases_common.dtsi
@@ -2,19 +2,15 @@/dts-v1/;/plugin/;+#include"testcases_common.dtsi"+/{testcase-data{-changeset{-prop-update="hello";-prop-remove="world";-node-remove{-};+testcase-device2{+compatible="testcase-device";+interrupt-parent=<&test_intc2>;+interrupts=<1>;/* invalid specifier - too short */};};+};-#include"tests-phandle.dtsi"-#include"tests-interrupts.dtsi"-#include"tests-match.dtsi"-#include"tests-address.dtsi"-#include"tests-platform.dtsi"-#include"tests-overlay.dtsi"
From: Frank Rowand <hidden> Date: 2021-02-18 21:04:14
On 1/29/21 1:24 AM, Viresh Kumar wrote:
quoted hunk
In order to build-test the same unit-test files using fdtoverlay tool,
move the device nodes from the existing overlay_base.dts and
testcases_common.dts files to .dtsi counterparts. The .dts files now
include the new .dtsi files, resulting in exactly the same behavior as
earlier.
The .dtsi files can now be reused for compile time tests using
fdtoverlay (will be done by a later commit).
This is required because the base files passed to fdtoverlay tool
shouldn't be overlays themselves (i.e. shouldn't have the /plugin/;
tag).
Note that this commit also moves "testcase-device2" node to
testcases.dts from tests-interrupts.dtsi, as this node has a deliberate
error in it and is only relevant for runtime testing done with
unittest.c.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/of/unittest-data/overlay_base.dts | 90 +-----------------
drivers/of/unittest-data/overlay_common.dtsi | 91 +++++++++++++++++++
drivers/of/unittest-data/testcases.dts | 18 ++--
.../of/unittest-data/testcases_common.dtsi | 19 ++++
.../of/unittest-data/tests-interrupts.dtsi | 7 --
5 files changed, 118 insertions(+), 107 deletions(-)
create mode 100644 drivers/of/unittest-data/overlay_common.dtsi
create mode 100644 drivers/of/unittest-data/testcases_common.dtsi
Please add:
/*
* testcase data that intentionally results in an error
* is located here instead of in testcases_common.dtsi
* so that the static overlay apply tests will not include
* the error
*/
Please add:
/*
* testcase data that intentionally results in an error
* is located in testcases.dts instead of in this file
* so that the static overlay apply tests will not include
* the error
*/
From: Frank Rowand <hidden> Date: 2021-02-19 05:21:05
Hi Viresh,
I am in the wrong version with the comments below. You are at version 8 now.
-Frank
On 2/18/21 3:02 PM, Frank Rowand wrote:
On 1/29/21 1:24 AM, Viresh Kumar wrote:
quoted
In order to build-test the same unit-test files using fdtoverlay tool,
move the device nodes from the existing overlay_base.dts and
testcases_common.dts files to .dtsi counterparts. The .dts files now
include the new .dtsi files, resulting in exactly the same behavior as
earlier.
The .dtsi files can now be reused for compile time tests using
fdtoverlay (will be done by a later commit).
This is required because the base files passed to fdtoverlay tool
shouldn't be overlays themselves (i.e. shouldn't have the /plugin/;
tag).
Note that this commit also moves "testcase-device2" node to
testcases.dts from tests-interrupts.dtsi, as this node has a deliberate
error in it and is only relevant for runtime testing done with
unittest.c.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/of/unittest-data/overlay_base.dts | 90 +-----------------
drivers/of/unittest-data/overlay_common.dtsi | 91 +++++++++++++++++++
drivers/of/unittest-data/testcases.dts | 18 ++--
.../of/unittest-data/testcases_common.dtsi | 19 ++++
.../of/unittest-data/tests-interrupts.dtsi | 7 --
5 files changed, 118 insertions(+), 107 deletions(-)
create mode 100644 drivers/of/unittest-data/overlay_common.dtsi
create mode 100644 drivers/of/unittest-data/testcases_common.dtsi
Please add:
/*
* testcase data that intentionally results in an error
* is located here instead of in testcases_common.dtsi
* so that the static overlay apply tests will not include
* the error
*/
Please add:
/*
* testcase data that intentionally results in an error
* is located in testcases.dts instead of in this file
* so that the static overlay apply tests will not include
* the error
*/
From: Rob Herring <robh@kernel.org> Date: 2021-02-04 16:00:39
On Fri, 29 Jan 2021 12:54:04 +0530, Viresh Kumar wrote:
Hi,
This patchset makes necessary changes to the kernel to add support for
building overlays (%.dtbo) and the required fdtoverlay tool. This also
builds static_test.dtb using most of the existing overlay tests present
in drivers/of/unittest-data/ for better test coverage.
Note that in order for anyone to test this stuff, you need to manually
run the ./update-dtc-source.sh script once to fetch the necessary
changes from the external DTC project (i.e. fdtoverlay.c and this[1]
patch).
I have tested this patchset for static and runtime testing (on Hikey
board) and no issues were reported.
V7:
- Add a comment in scripts/dtc/Makefile
- Add Ack from Masahiro for patch 4/6.
- Drop word "merge" from commit log of 2/6.
- Split apply_static_overlay, static_test.dtb, and static_base.dts into
two parts to handle overlay_base.dts and testcases.dts separately.
V6:
- Create separate rules for dtbo-s and separate entries in .gitignore in
4/6 (Masahiro).
- A new file layout for handling all overlays for existing and new tests
5/6 (Frank).
- Include overlay.dts as well now in 6/6 (Frank).
V5:
- Don't reuse DTC_SOURCE for fdtoverlay.c in patch 1/5 (Frank).
- Update .gitignore and scripts/Makefile.dtbinst, drop dtbo-y syntax and
DTC_FLAGS += -@ in patch 4/5 (Masahiro).
- Remove the intermediate dtb, rename output to static_test.dtb, don't
use overlay.dtb and overlay_base.dtb for static builds, improved
layout/comments in Makefile for patch 5/5 (Frank).
--
Viresh
[1] https://github.com/dgibson/dtc/commit/163f0469bf2ed8b2fe5aa15bc796b93c70243ddc
[2] https://lore.kernel.org/lkml/74f8aa8f-ffab-3b0f-186f-31fb7395ebbb@gmail.com/
Viresh Kumar (6):
scripts: dtc: Fetch fdtoverlay.c from external DTC project
scripts: dtc: Build fdtoverlay tool
scripts: dtc: Remove the unused fdtdump.c file
kbuild: Add support to build overlays (%.dtbo)
of: unittest: Create overlay_common.dtsi and testcases_common.dtsi
of: unittest: Statically apply overlays using fdtoverlay
I've applied the first 4 patches and did a dtc sync after patch 1.
Rob