Devicetree build consolidation
Subsystems (11)
Rob Herring
maintainerv3 cover Devicetree build consolidation
This series addresses a couple of issues I have with building dts files.
First, the ability to build all the dts files in the tree. This has been supported on most arches for some time with powerpc being the main exception. The reason powerpc wasn't supported was it needed a change in the location built dtb files are put.
Secondly, it's a pain to acquire all the cross-compilers needed to build dtbs for each arch. There's no reason to build with the cross compiler and the host compiler is perfectly fine as we only need the pre-processor.
I started addressing just those 2 problems, but kept finding small differences such as target dependencies and dtbs_install support across architectures. Instead of trying to align all these, I've consolidated the build targets moving them out of the arch makefiles.
I'd like to take the series via the DT tree.
Rob
v3:
- Rework dtc dependency to avoid 2 entry paths to scripts/dtc/. Essentially, I copied 'scripts_basic'.
- Add missing scripts_basic dependency for dtc and missing PHONY tag.
- Drop the '|' order only from dependencies
- Drop %.dtb.S and %.dtb.o as top-level targets
- PPC: remove duplicate mpc5200 dtbs from image-y targets
v2:
- Fix $arch/boot/dts path check for out of tree builds
- Fix dtc dependency for building built-in dtbs
- Fix microblaze built-in dtb building
- Add dtbs target for microblaze
Rob Herring (9):
powerpc: build .dtb files in dts directory
nios2: build .dtb files in dts directory
nios2: use common rules to build built-in dtb
nios2: fix building all dtbs
c6x: use common built-in dtb support
kbuild: consolidate Devicetree dtb build rules
powerpc: enable building all dtbs
c6x: enable building all dtbs
microblaze: enable building all dtbs
Makefile | 35 ++++++++++++++++++- arch/arc/Makefile | 6 ---- arch/arm/Makefile | 20 +---------- arch/arm64/Makefile | 17 +-------- arch/c6x/Makefile | 2 -- arch/c6x/boot/dts/Makefile | 17 ++++----- arch/c6x/boot/dts/linked_dtb.S | 2 -- arch/c6x/include/asm/sections.h | 1 - arch/c6x/kernel/setup.c | 4 +-- arch/c6x/kernel/vmlinux.lds.S | 10 ------ arch/h8300/Makefile | 11 +----- arch/microblaze/Makefile | 4 +-- arch/microblaze/boot/dts/Makefile | 4 +++ arch/mips/Makefile | 15 +------- arch/nds32/Makefile | 2 +- arch/nios2/Makefile | 11 +----- arch/nios2/boot/Makefile | 22 ------------ arch/nios2/boot/dts/Makefile | 6 ++++ arch/nios2/boot/linked_dtb.S | 19 ----------- arch/powerpc/Makefile | 3 -- arch/powerpc/boot/Makefile | 55 ++++++++++++++---------------- arch/powerpc/boot/dts/Makefile | 6 ++++ arch/powerpc/boot/dts/fsl/Makefile | 4 +++ arch/xtensa/Makefile | 12 +------ scripts/Makefile | 3 +- scripts/Makefile.lib | 2 +- scripts/dtc/Makefile | 2 +- 27 files changed, 100 insertions(+), 195 deletions(-) delete mode 100644 arch/c6x/boot/dts/linked_dtb.S create mode 100644 arch/nios2/boot/dts/Makefile delete mode 100644 arch/nios2/boot/linked_dtb.S create mode 100644 arch/powerpc/boot/dts/Makefile create mode 100644 arch/powerpc/boot/dts/fsl/Makefile
--
2.17.1
Rob Herring
maintainerPATCH v3 1/9 powerpc: build .dtb files in dts directory
Align powerpc with other architectures which build the dtb files in the same directory as the dts files. This is also in line with most other build targets which are located in the same directory as the source. This move will help enable the 'dtbs' target which builds all the dtbs regardless of kernel config.
This transition could break some scripts if they expect dtb files in the old location.
---
v3:
- Remove duplicate mpc5200 dtbs from image-y targets. The dtb target already comes from the cuImage.<platform> target.
arch/powerpc/Makefile | 2 +- arch/powerpc/boot/Makefile | 55 ++++++++++++++++------------------ arch/powerpc/boot/dts/Makefile | 1 + 3 files changed, 28 insertions(+), 30 deletions(-) create mode 100644 arch/powerpc/boot/dts/Makefile
arch/powerpc/Makefile +1 -1
@@ -294,7 +294,7 @@ bootwrapper_install: $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) %.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) + $(Q)$(MAKE) $(build)=$(boot)/dts $(patsubst %,$(boot)/dts/%,$@) # Used to create 'merged defconfigs' # To use it $(call) it with the first argument as the base defconfig
arch/powerpc/boot/Makefile +26 -29
82 lines not on this page · raw message
arch/powerpc/boot/dts/Makefile new file +1 -0
@@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0
--
2.17.1
Rob Herring
maintainerRe: [PATCH v3 1/9] powerpc: build .dtb files in dts directory
Quoted 15 lines · Rob Herring
Align powerpc with other architectures which build the dtb files in the same directory as the dts files. This is also in line with most other build targets which are located in the same directory as the source. This move will help enable the 'dtbs' target which builds all the dtbs regardless of kernel config.
This transition could break some scripts if they expect dtb files in the old location.
Cc Benjamin Herrenschmidt <[email protected]>Cc Paul Mackerras <[email protected]>Cc Michael Ellerman <[email protected]>Signed-off-by Rob Herring <[email protected]>
Quoted 4 lines
---
v3:
- Remove duplicate mpc5200 dtbs from image-y targets. The dtb target already comes from the cuImage.<platform> target.
Do the PPC folks have any comments on this?
Rob
Quoted 118 lines
arch/powerpc/Makefile | 2 +- arch/powerpc/boot/Makefile | 55 ++++++++++++++++------------------ arch/powerpc/boot/dts/Makefile | 1 + 3 files changed, 28 insertions(+), 30 deletions(-) create mode 100644 arch/powerpc/boot/dts/Makefilearch/powerpc/Makefile +1
-1@@ -294,7 +294,7 @@ bootwrapper_install: $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) %.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) + $(Q)$(MAKE) $(build)=$(boot)/dts $(patsubst %,$(boot)/dts/%,$@) # Used to create 'merged defconfigs' # To use it $(call) it with the first argument as the base defconfigarch/powerpc/boot/Makefile +26
-29@@ -304,9 +304,9 @@ image-$(CONFIG_PPC_ADDER875) += cuImage.adder875-uboot \ dtbImage.adder875-redboot # Board ports in arch/powerpc/platform/52xx/Kconfig -image-$(CONFIG_PPC_LITE5200) += cuImage.lite5200 lite5200.dtb -image-$(CONFIG_PPC_LITE5200) += cuImage.lite5200b lite5200b.dtb -image-$(CONFIG_PPC_MEDIA5200) += cuImage.media5200 media5200.dtb +image-$(CONFIG_PPC_LITE5200) += cuImage.lite5200 +image-$(CONFIG_PPC_LITE5200) += cuImage.lite5200b +image-$(CONFIG_PPC_MEDIA5200) += cuImage.media5200 # Board ports in arch/powerpc/platform/82xx/Kconfig image-$(CONFIG_MPC8272_ADS) += cuImage.mpc8272ads@@ -381,11 +381,11 @@ $(addprefix $(obj)/, $(sort $(filter zImage.%, $(image-y)))): vmlinux $(wrapperb $(call if_changed,wrap,$(subst $(obj)/zImage.,,$@)) # dtbImage% - a dtbImage is a zImage with an embedded device tree blob -$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb FORCE - $(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) +$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/dts/%.dtb FORCE + $(call if_changed,wrap,$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) -$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb FORCE - $(call if_changed,wrap,$*,,$(obj)/$*.dtb) +$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/dts/%.dtb FORCE + $(call if_changed,wrap,$*,,$(obj)/dts/$*.dtb) # This cannot be in the root of $(src) as the zImage rule always adds a $(obj) # prefix@@ -395,36 +395,33 @@ $(obj)/vmlinux.strip: vmlinux $(obj)/uImage: vmlinux $(wrapperbits) FORCE $(call if_changed,wrap,uboot) -$(obj)/uImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,uboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) +$(obj)/uImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,uboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) -$(obj)/uImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,uboot-$*,,$(obj)/$*.dtb) +$(obj)/uImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,uboot-$*,,$(obj)/dts/$*.dtb) -$(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) +$(obj)/cuImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,cuboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) -$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb) +$(obj)/cuImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,cuboot-$*,,$(obj)/dts/$*.dtb) -$(obj)/simpleImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) +$(obj)/simpleImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,simpleboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) -$(obj)/simpleImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb) +$(obj)/simpleImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,simpleboot-$*,,$(obj)/dts/$*.dtb) -$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) +$(obj)/treeImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,treeboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) -$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE - $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb) +$(obj)/treeImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,treeboot-$*,,$(obj)/dts/$*.dtb) -# Rule to build device tree blobs -$(obj)/%.dtb: $(src)/dts/%.dts FORCE - $(call if_changed_dep,dtc) - -$(obj)/%.dtb: $(src)/dts/fsl/%.dts FORCE - $(call if_changed_dep,dtc) +# Needed for the above targets to work with dts/fsl/ files +$(obj)/dts/%.dtb: $(obj)/dts/fsl/%.dtb + @cp $< $@ # If there isn't a platform selected then just strip the vmlinux. ifeq (,$(image-y))arch/powerpc/boot/dts/Makefile new file +1
-1@@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0 --2.17.1
Rob Herring
maintainerPATCH v3 2/9 nios2: build .dtb files in dts directory
In reply to Rob HerringAlign nios2 with other architectures which build the dtb files in the same directory as the dts files. This is also in line with most other build targets which are located in the same directory as the source. This move will help enable the 'dtbs' target which builds all the dtbs regardless of kernel config.
This transition could break some scripts if they expect dtb files in the old location.
--- arch/nios2/Makefile | 4 ++-- arch/nios2/boot/Makefile | 4 ---- arch/nios2/boot/dts/Makefile | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) create mode 100644 arch/nios2/boot/dts/Makefile
arch/nios2/Makefile +2 -2
@@ -59,10 +59,10 @@ archclean: $(Q)$(MAKE) $(clean)=$(nios2-boot) %.dtb: | scripts - $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@ + $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@ dtbs: - $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@ + $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(BOOT_TARGETS): vmlinux $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@
arch/nios2/boot/Makefile +0 -4
@@ -47,10 +47,6 @@ obj-$(CONFIG_NIOS2_DTB_SOURCE_BOOL) += linked_dtb.o targets += $(dtb-y) -# Rule to build device tree blobs with make command -$(obj)/%.dtb: $(src)/dts/%.dts FORCE - $(call if_changed_dep,dtc) - $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) install:
arch/nios2/boot/dts/Makefile new file +1 -0
@@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0
Signature · 1 line
2.17.1
Rob Herring
maintainerPATCH v3 3/9 nios2: use common rules to build built-in dtb
In reply to Rob HerringUsing the common build support for built-in dtb files just requires adding a .dtb.o target to obj-y.
This has the side effect that CONFIG_NIOS2_DTB_SOURCE should now be just the dts filename in arch/nios2/boot/dts/ directory. Before any path was supported, but if you want to build in your dtb to the kernel, it should be in the kernel tree.
--- arch/nios2/Makefile | 6 ++---- arch/nios2/boot/Makefile | 14 -------------- arch/nios2/boot/dts/Makefile | 2 ++ arch/nios2/boot/linked_dtb.S | 19 ------------------- 4 files changed, 4 insertions(+), 37 deletions(-) delete mode 100644 arch/nios2/boot/linked_dtb.S
arch/nios2/Makefile +2 -4
@@ -49,16 +49,14 @@ BOOT_TARGETS = vmImage zImage PHONY += $(BOOT_TARGETS) install KBUILD_IMAGE := $(nios2-boot)/vmImage -ifneq ($(CONFIG_NIOS2_DTB_SOURCE),"") - core-y += $(nios2-boot)/ -endif +core-y += $(nios2-boot)/dts/ all: vmImage archclean: $(Q)$(MAKE) $(clean)=$(nios2-boot) -%.dtb: | scripts +%.dtb %.dtb.S %.dtb.o: | scripts $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@ dtbs:
arch/nios2/boot/Makefile +0 -14
@@ -31,20 +31,6 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE $(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE $(Q)$(MAKE) $(build)=$(obj)/compressed $@ -# Rule to build device tree blobs -DTB_SRC := $(patsubst "%",%,$(CONFIG_NIOS2_DTB_SOURCE)) - -# Make sure the generated dtb gets removed during clean -extra-$(CONFIG_NIOS2_DTB_SOURCE_BOOL) += system.dtb - -$(obj)/system.dtb: $(DTB_SRC) FORCE - $(call cmd,dtc) - -# Ensure system.dtb exists -$(obj)/linked_dtb.o: $(obj)/system.dtb - -obj-$(CONFIG_NIOS2_DTB_SOURCE_BOOL) += linked_dtb.o - targets += $(dtb-y) $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
arch/nios2/boot/dts/Makefile +2 -0
@@ -1 +1,3 @@ # SPDX-License-Identifier: GPL-2.0 + +obj-y := $(patsubst "%.dts",%.dtb.o,$(CONFIG_NIOS2_DTB_SOURCE))
arch/nios2/boot/linked_dtb.S deleted +0 -19
@@ -1,19 +0,0 @@ -/* - * Copyright (C) 2011 Thomas Chou <[email protected]> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -.section .dtb.init.rodata,"a" -.incbin "arch/nios2/boot/system.dtb"
Signature · 1 line
2.17.1
Rob Herring
maintainerPATCH v3 4/9 nios2: fix building all dtbs
In reply to Rob Herringnios2 has a 'dtbs' target, but nothing is added to 'dtb-*' targets and no dtbs were getting built. This enables building all the dts files in arch/nios2/boot/dts/ when COMPILE_TEST and OF_ALL_DTBS are enabled.
--- arch/nios2/boot/dts/Makefile | 3 +++ 1 file changed, 3 insertions(+)
arch/nios2/boot/dts/Makefile +3 -0
@@ -1,3 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 obj-y := $(patsubst "%.dts",%.dtb.o,$(CONFIG_NIOS2_DTB_SOURCE)) + +dtstree := $(srctree)/$(src) +dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
Signature · 1 line
2.17.1
Rob Herring
maintainerPATCH v3 5/9 c6x: use common built-in dtb support
In reply to Rob HerringUsing the common build support for built-in dtb files just requires adding a .dtb.o target to obj-y.
The dtb now needs to be copied when unflattened because an init section is used now.
--- arch/c6x/boot/dts/Makefile | 11 +---------- arch/c6x/boot/dts/linked_dtb.S | 2 -- arch/c6x/include/asm/sections.h | 1 - arch/c6x/kernel/setup.c | 4 ++-- arch/c6x/kernel/vmlinux.lds.S | 10 ---------- 5 files changed, 3 insertions(+), 25 deletions(-) delete mode 100644 arch/c6x/boot/dts/linked_dtb.S
arch/c6x/boot/dts/Makefile +1 -10
@@ -6,14 +6,5 @@ DTC_FLAGS ?= -p 1024 ifneq ($(DTB),) -obj-y += linked_dtb.o +obj-y += $(DTB).dtb.o endif - -quiet_cmd_cp = CP $< $@$2 - cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) - -# Generate builtin.dtb from $(DTB).dtb -$(obj)/builtin.dtb: $(obj)/$(DTB).dtb - $(call if_changed,cp) - -$(obj)/linked_dtb.o: $(obj)/builtin.dtb
arch/c6x/boot/dts/linked_dtb.S deleted +0 -2
@@ -1,2 +0,0 @@ -.section __fdt_blob,"a" -.incbin "arch/c6x/boot/dts/builtin.dtb"
arch/c6x/include/asm/sections.h +0 -1
@@ -8,6 +8,5 @@ extern char _vectors_start[];extern char _vectors_end[];extern char _data_lma[]; -extern char _fdt_start[], _fdt_end[];#endif /* _ASM_C6X_SECTIONS_H */
arch/c6x/kernel/setup.c +2 -2
@@ -270,7 +270,7 @@ int __init c6x_add_memory(phys_addr_t start, unsigned long size) notrace void __init machine_init(unsigned long dt_ptr) {void *dtb =__va (dt_ptr); -void *fdt = _fdt_start; +void *fdt = __dtb_start;/* interrupts must be masked */ set_creg (IER ,2 );
@@ -363,7 +363,7 @@ void __init setup_arch(char **cmdline_p) memory_end >> PAGE_SHIFT);memblock_reserve (memory_start, bootmap_size); -unflatten_device_tree (); +unflatten_and_copy_device_tree ();c6x_cache_init ();
arch/c6x/kernel/vmlinux.lds.S +0 -10
@@ -90,16 +90,6 @@ SECTIONS *(.switch) } - . = ALIGN (8) ; - __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) - { - _fdt_start = . ; /* place for fdt blob */ - *(__fdt_blob) ; /* Any link-placed DTB */ - BYTE(0); /* section always has contents */ - . = _fdt_start + 0x4000; /* Pad up to 16kbyte */ - _fdt_end = . ; - } - _etext = .; /*
Signature · 1 line
2.17.1
Rob Herring
maintainerPATCH v3 6/9 kbuild: consolidate Devicetree dtb build rules
In reply to Rob HerringThere is nothing arch specific about building dtb files other than their location under /arch/*/boot/dts/. Keeping each arch aligned is a pain. The dependencies and supported targets are all slightly different. Also, a cross-compiler for each arch is needed, but really the host compiler preprocessor is perfectly fine for building dtbs. Move the build rules to a common location and remove the arch specific ones. This is done in a single step to avoid warnings about overriding rules.
The build dependencies had been a mixture of 'scripts' and/or 'prepare'. These pull in several dependencies some of which need a target compiler (specifically devicetable-offsets.h) and aren't needed to build dtbs. All that is really needed is dtc, so adjust the dependencies to only be dtc.
This change enables support 'dtbs_install' on some arches which were missing the target.
--- Makefile | 35 ++++++++++++++++++++++++++++++- arch/arc/Makefile | 6 ------ arch/arm/Makefile | 20 +----------------- arch/arm64/Makefile | 17 +-------------- arch/c6x/Makefile | 2 -- arch/h8300/Makefile | 11 +--------- arch/microblaze/Makefile | 4 +--- arch/microblaze/boot/dts/Makefile | 2 ++ arch/mips/Makefile | 15 +------------ arch/nds32/Makefile | 2 +- arch/nios2/Makefile | 7 ------- arch/nios2/boot/Makefile | 4 ---- arch/powerpc/Makefile | 3 --- arch/xtensa/Makefile | 12 +---------- scripts/Makefile | 3 +-- scripts/Makefile.lib | 2 +- scripts/dtc/Makefile | 2 +- 17 files changed, 46 insertions(+), 101 deletions(-)
Makefile +34 -1
@@ -1071,7 +1071,7 @@ include/config/kernel.release: $(srctree)/Makefile FORCE # Carefully list dependencies so we do not try to build scripts twice # in parallel PHONY += scripts -scripts: scripts_basic asm-generic gcc-plugins $(autoksyms_h) +scripts: scripts_basic scripts_dtc asm-generic gcc-plugins $(autoksyms_h) $(Q)$(MAKE) $(build)=$(@) # Things we need to do before we recursively start building the kernel
@@ -1215,6 +1215,33 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifdef CONFIG_OF_EARLY_FLATTREE + +%.dtb : scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + +PHONY += dtbs dtbs_install +dtbs: scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +endif + +PHONY += scripts_dtc +scripts_dtc: scripts_basic + $(Q)$(MAKE) $(build)=scripts/dtc + # --------------------------------------------------------------------------- # Modules
@@ -1424,6 +1451,12 @@ help: @echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing' @echo ' .config.' @echo '' + @$(if $(dtstree), \ + echo 'Devicetree:'; \ + echo '* dtbs - Build device tree blobs for enabled boards'; \ + echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \ + echo '') + @echo 'Userspace tools targets:' @echo ' use "make tools/help"' @echo ' or "cd tools; make help"'
arch/arc/Makefile +0 -6
@@ -132,11 +132,5 @@ boot_targets += uImage uImage.bin uImage.gz $(boot_targets): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ -%.dtb %.dtb.S %.dtb.o: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ - -dtbs: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - archclean: $(Q)$(MAKE) $(clean)=$(boot)
arch/arm/Makefile +1 -19
@@ -307,12 +307,7 @@ else KBUILD_IMAGE := $(boot)/zImage endif -# Build the DT binary blobs if we have OF configured -ifeq ($(CONFIG_USE_OF),y) -KBUILD_DTBS := dtbs -endif - -all: $(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS) +all: $(notdir $(KBUILD_IMAGE)) archheaders:
@@ -339,17 +334,6 @@ $(BOOT_TARGETS): vmlinux $(INSTALL_TARGETS): $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ -%.dtb: | scripts - $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ - -PHONY += dtbs dtbs_install - -dtbs: prepare scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - -dtbs_install: - $(Q)$(MAKE) $(dtbinst)=$(boot)/dts - PHONY += vdso_install vdso_install: ifeq ($(CONFIG_VDSO),y)
@@ -371,8 +355,6 @@ define archhelp echo ' uImage - U-Boot wrapped zImage' echo ' bootpImage - Combined zImage and initial RAM disk' echo ' (supply initrd image via make variable INITRD=<path>)' - echo '* dtbs - Build device tree blobs for enabled boards' - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' echo ' install - Install uncompressed kernel' echo ' zinstall - Install compressed kernel' echo ' uinstall - Install U-Boot wrapped compressed kernel'
arch/arm64/Makefile +1 -16
@@ -113,9 +113,8 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a # Default target when executing plain make boot := arch/arm64/boot KBUILD_IMAGE := $(boot)/Image.gz -KBUILD_DTBS := dtbs -all: Image.gz $(KBUILD_DTBS) +all: Image.gz Image: vmlinux
@@ -127,17 +126,6 @@ Image.%: Image zinstall install: $(Q)$(MAKE) $(build)=$(boot) $@ -%.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ - -PHONY += dtbs dtbs_install - -dtbs: prepare scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - -dtbs_install: - $(Q)$(MAKE) $(dtbinst)=$(boot)/dts - PHONY += vdso_install vdso_install: $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@
@@ -145,7 +133,6 @@ vdso_install: # We use MRPROPER_FILES and CLEAN_FILES now archclean: $(Q)$(MAKE) $(clean)=$(boot) - $(Q)$(MAKE) $(clean)=$(boot)/dts # We need to generate vdso-offsets.h before compiling certain files in kernel/. # In order to do that, we should use the archprepare target, but we can't since
@@ -160,8 +147,6 @@ vdso_prepare: prepare0 define archhelp echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' - echo '* dtbs - Build device tree blobs for enabled boards' - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' echo ' install - Install uncompressed kernel' echo ' zinstall - Install compressed kernel' echo ' Install using (your) ~/bin/installkernel or'
arch/c6x/Makefile +0 -2
@@ -40,9 +40,7 @@ boot := arch/$(ARCH)/boot DTB:=$(subst dtbImage.,,$(filter dtbImage.%, $(MAKECMDGOALS))) export DTB -ifneq ($(DTB),) core-y += $(boot)/dts/ -endif # With make 3.82 we cannot mix normal and wildcard targets
arch/h8300/Makefile +1 -10
@@ -31,21 +31,12 @@ CROSS_COMPILE := h8300-unknown-linux- endif core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ -ifneq '$(CONFIG_H8300_BUILTIN_DTB)' '""' -core-y += arch/h8300/boot/dts/ -endif +core-y += arch/$(ARCH)/boot/dts/ libs-y += arch/$(ARCH)/lib/ boot := arch/h8300/boot -%.dtb %.dtb.S %.dtb.o: | scripts - $(Q)$(MAKE) $(build)=arch/h8300/boot/dts arch/h8300/boot/dts/$@ - -PHONY += dtbs -dtbs: scripts - $(Q)$(MAKE) $(build)=arch/h8300/boot/dts - archmrproper: archclean:
arch/microblaze/Makefile +1 -3
@@ -65,9 +65,7 @@ boot := arch/microblaze/boot # Are we making a simpleImage.<boardname> target? If so, crack out the boardname DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS))) -ifneq ($(DTB),) - core-y += $(boot)/dts/ -endif +core-y += $(boot)/dts/ # defines filename extension depending memory management type ifeq ($(CONFIG_MMU),)
arch/microblaze/boot/dts/Makefile +2 -0
@@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 # +ifneq ($(DTB),) obj-y += linked_dtb.o # Ensure system.dtb exists
@@ -11,6 +12,7 @@ ifneq ($(DTB),system) $(obj)/system.dtb: $(obj)/$(DTB).dtb $(call if_changed,cp) endif +endif quiet_cmd_cp = CP $< $@$2 cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false)
arch/mips/Makefile +1 -14
@@ -407,18 +407,7 @@ endif CLEAN_FILES += vmlinux.32 vmlinux.64 # device-trees -core-$(CONFIG_BUILTIN_DTB) += arch/mips/boot/dts/ - -%.dtb %.dtb.S %.dtb.o: | scripts - $(Q)$(MAKE) $(build)=arch/mips/boot/dts arch/mips/boot/dts/$@ - -PHONY += dtbs -dtbs: scripts - $(Q)$(MAKE) $(build)=arch/mips/boot/dts - -PHONY += dtbs_install -dtbs_install: - $(Q)$(MAKE) $(dtbinst)=arch/mips/boot/dts +core-y += arch/mips/boot/dts/ archprepare: ifdef CONFIG_MIPS32_N32
@@ -461,8 +450,6 @@ define archhelp echo ' uImage.lzma - U-Boot image (lzma)' echo ' uImage.lzo - U-Boot image (lzo)' echo ' uzImage.bin - U-Boot image (self-extracting)' - echo ' dtbs - Device-tree blobs for enabled boards' - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' echo echo ' These will be default as appropriate for a configured platform.' echo
arch/nds32/Makefile +1 -1
@@ -43,7 +43,7 @@ CHECKFLAGS += -D__NDS32_EB__ endif boot := arch/nds32/boot -core-$(BUILTIN_DTB) += $(boot)/dts/ +core-y += $(boot)/dts/ .PHONY: FORCE
arch/nios2/Makefile +0 -7
@@ -56,12 +56,6 @@ all: vmImage archclean: $(Q)$(MAKE) $(clean)=$(nios2-boot) -%.dtb %.dtb.S %.dtb.o: | scripts - $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@ - -dtbs: - $(Q)$(MAKE) $(build)=$(nios2-boot)/dts - $(BOOT_TARGETS): vmlinux $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@
@@ -74,5 +68,4 @@ define archhelp echo ' (your) ~/bin/$(INSTALLKERNEL) or' echo ' (distribution) /sbin/$(INSTALLKERNEL) or' echo ' install to $$(INSTALL_PATH)' - echo ' dtbs - Build device tree blobs for enabled boards' endef
arch/nios2/boot/Makefile +0 -4
@@ -31,9 +31,5 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE $(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE $(Q)$(MAKE) $(build)=$(obj)/compressed $@ -targets += $(dtb-y) - -$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) - install: sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
arch/powerpc/Makefile +0 -3
@@ -293,9 +293,6 @@ $(BOOT_TARGETS2): vmlinux bootwrapper_install: $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) -%.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts $(patsubst %,$(boot)/dts/%,$@) - # Used to create 'merged defconfigs' # To use it $(call) it with the first argument as the base defconfig # and the second argument as a space separated list of .config files to merge,
arch/xtensa/Makefile +1 -11
@@ -84,28 +84,18 @@ LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) head-y := arch/xtensa/kernel/head.o core-y += arch/xtensa/kernel/ arch/xtensa/mm/ core-y += $(buildvar) $(buildplf) +core-y += arch/xtensa/boot/dts/ libs-y += arch/xtensa/lib/ $(LIBGCC) drivers-$(CONFIG_OPROFILE) += arch/xtensa/oprofile/ -ifneq ($(CONFIG_BUILTIN_DTB),"") -core-$(CONFIG_OF) += arch/xtensa/boot/dts/ -endif - boot := arch/xtensa/boot all Image zImage uImage: vmlinux $(Q)$(MAKE) $(build)=$(boot) $@ -%.dtb: - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ - -dtbs: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - define archhelp @echo '* Image - Kernel ELF image with reset vector' @echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)' @echo '* uImage - U-Boot wrapped image' - @echo ' dtbs - Build device tree blobs for enabled boards' endef
scripts/Makefile +1 -2
@@ -39,8 +39,7 @@ build_unifdef: $(obj)/unifdef subdir-$(CONFIG_MODVERSIONS) += genksyms subdir-y += mod subdir-$(CONFIG_SECURITY_SELINUX) += selinux -subdir-$(CONFIG_DTC) += dtc subdir-$(CONFIG_GDB_SCRIPTS) += gdb # Let clean descend into subdirs -subdir- += basic kconfig package gcc-plugins +subdir- += basic dtc kconfig package gcc-plugins
scripts/Makefile.lib +1 -1
@@ -283,7 +283,7 @@ $(obj)/%.dtb.S: $(obj)/%.dtb FORCE quiet_cmd_dtc = DTC $@ cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \ - $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ + $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ $(DTC) -O dtb -o $@ -b 0 \ $(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \ -d $(depfile).dtc.tmp $(dtc-tmp) ; \
scripts/dtc/Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 # scripts/dtc makefile -hostprogs-y := dtc +hostprogs-$(CONFIG_DTC) := dtc always := $(hostprogs-y) dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
Signature · 1 line
2.17.1
Rob Herring
maintainerRe: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Quoted 17 lines · Rob Herring
There is nothing arch specific about building dtb files other than their location under /arch/*/boot/dts/. Keeping each arch aligned is a pain. The dependencies and supported targets are all slightly different. Also, a cross-compiler for each arch is needed, but really the host compiler preprocessor is perfectly fine for building dtbs. Move the build rules to a common location and remove the arch specific ones. This is done in a single step to avoid warnings about overriding rules.
The build dependencies had been a mixture of 'scripts' and/or 'prepare'. These pull in several dependencies some of which need a target compiler (specifically
devicetable-offsets.h) and aren't needed to build dtbs. All that is really needed is dtc, so adjust the dependencies to only be dtc.This change enables support '
dtbs_install' on some arches which were missing the target.
[...]
Makefile kselftest-merge: · line 1225
Quoted 12 lines
Makefile +8
-0@@ -1215,6 +1215,33 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifdef CONFIG_OF_EARLY_FLATTREE
This can be true when dtstree is unset. So this line should be this instead to fix the 0-day reported error:
ifneq ($(dtstree),)
Quoted 14 lines
Makefile +14
-0+ +%.dtb : scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + +PHONY += dtbs dtbs_install +dtbs: scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +endif
Re: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
2018-09-12 0:40 GMT+09:00 Rob Herring <[email protected]>:
Quoted 39 lines · Rob Herring
Quoted 17 lines
There is nothing arch specific about building dtb files other than their location under /arch/*/boot/dts/. Keeping each arch aligned is a pain. The dependencies and supported targets are all slightly different. Also, a cross-compiler for each arch is needed, but really the host compiler preprocessor is perfectly fine for building dtbs. Move the build rules to a common location and remove the arch specific ones. This is done in a single step to avoid warnings about overriding rules.
The build dependencies had been a mixture of 'scripts' and/or 'prepare'. These pull in several dependencies some of which need a target compiler (specifically
devicetable-offsets.h) and aren't needed to build dtbs. All that is really needed is dtc, so adjust the dependencies to only be dtc.This change enables support '
dtbs_install' on some arches which were missing the target.[...]
Makefile kselftest-merge: · line 1225
Quoted 12 lines
Makefile +8
-0@@ -1215,6 +1215,33 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifdef CONFIG_OF_EARLY_FLATTREEThis can be true when dtstree is unset. So this line should be this instead to fix the 0-day reported error:
ifneq ($(dtstree),)
Quoted 14 lines
Quoted 4 lines
Makefile +4
-0+ +%.dtb : scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ +Makefile kselftest-merge: · line 1239
Quoted 10 lines
Makefile +10
-0+PHONY += dtbs dtbs_install +dtbs: scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +endif
Ah, right.
Even x86 can enable OF and OF_UNITTEST.
Another solution might be,
guard it by 'depends on ARCH_SUPPORTS_OF'.
This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends on ARCH_SUPPORTS_ACPI
...
Signature · 2 lines
Best Regards Masahiro Yamada
Re: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Hi Yamada-san,
Quoted 65 lines · Masahiro Yamada
2018-09-12 0:40 GMT+09:00 Rob Herring <[email protected]>:
Quoted 38 lines · Rob Herring
Quoted 16 lines
There is nothing arch specific about building dtb files other than their location under /arch/*/boot/dts/. Keeping each arch aligned is a pain. The dependencies and supported targets are all slightly different. Also, a cross-compiler for each arch is needed, but really the host compiler preprocessor is perfectly fine for building dtbs. Move the build rules to a common location and remove the arch specific ones. This is done in a single step to avoid warnings about overriding rules.
The build dependencies had been a mixture of 'scripts' and/or 'prepare'. These pull in several dependencies some of which need a target compiler (specifically
devicetable-offsets.h) and aren't needed to build dtbs. All that is really needed is dtc, so adjust the dependencies to only be dtc.This change enables support '
dtbs_install' on some arches which were missing the target.[...]
Makefile kselftest-merge: · line 1225
Quoted 12 lines
Makefile +8
-0@@ -1215,6 +1215,33 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifdef CONFIG_OF_EARLY_FLATTREEThis can be true when dtstree is unset. So this line should be this instead to fix the 0-day reported error:
ifneq ($(dtstree),)
Quoted 14 lines
Quoted 4 lines
Makefile +4
-0+ +%.dtb : scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ +Makefile kselftest-merge: · line 1239
Quoted 10 lines
Makefile +10
-0+PHONY += dtbs dtbs_install +dtbs: scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +endifAh, right.
Even x86 can enable OF andOF_UNITTEST.Another solution might be,
guard it by 'depends onARCH_SUPPORTS_OF'.
Quoted 6 lines
This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends onARCH_SUPPORTS_ACPI
...
ACPI is a real platform feature, as it depends on firmware.
CONFIG_OF can be enabled, and DT overlays can be loaded, on any platform, even if it has ACPI ;-)
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at 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 TorvaldsRe: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
2018-09-13 11:51 GMT-04:00 Geert Uytterhoeven <[email protected]>:
Quoted 76 lines
Hi Yamada-san,
Quoted 65 lines · Masahiro Yamada
2018-09-12 0:40 GMT+09:00 Rob Herring <[email protected]>:
Quoted 38 lines · Rob Herring
Quoted 16 lines
There is nothing arch specific about building dtb files other than their location under /arch/*/boot/dts/. Keeping each arch aligned is a pain. The dependencies and supported targets are all slightly different. Also, a cross-compiler for each arch is needed, but really the host compiler preprocessor is perfectly fine for building dtbs. Move the build rules to a common location and remove the arch specific ones. This is done in a single step to avoid warnings about overriding rules.
The build dependencies had been a mixture of 'scripts' and/or 'prepare'. These pull in several dependencies some of which need a target compiler (specifically
devicetable-offsets.h) and aren't needed to build dtbs. All that is really needed is dtc, so adjust the dependencies to only be dtc.This change enables support '
dtbs_install' on some arches which were missing the target.[...]
Makefile kselftest-merge: · line 1225
Quoted 12 lines
Makefile +8
-0@@ -1215,6 +1215,33 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifdef CONFIG_OF_EARLY_FLATTREEThis can be true when dtstree is unset. So this line should be this instead to fix the 0-day reported error:
ifneq ($(dtstree),)
Quoted 14 lines
Quoted 4 lines
Makefile +4
-0+ +%.dtb : scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ +Makefile kselftest-merge: · line 1239
Quoted 10 lines
Makefile +10
-0+PHONY += dtbs dtbs_install +dtbs: scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +endifAh, right.
Even x86 can enable OF andOF_UNITTEST.Another solution might be,
guard it by 'depends onARCH_SUPPORTS_OF'.Quoted 6 lines
This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends onARCH_SUPPORTS_ACPI
...
Quoted 5 lines
ACPI is a real platform feature, as it depends on firmware.
CONFIG_OFcan be enabled, and DT overlays can be loaded, on any platform, even if it has ACPI ;-)
OK, understood.
Thanks!
Signature · 2 lines
Best Regards Masahiro Yamada
Rob Herring
maintainerRe: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Quoted 77 lines · Masahiro Yamada
2018-09-13 11:51 GMT-04:00 Geert Uytterhoeven <[email protected]>:
Quoted 76 lines
Hi Yamada-san,
Quoted 71 lines · Masahiro Yamada
2018-09-12 0:40 GMT+09:00 Rob Herring <[email protected]>:
Quoted 38 lines · Rob Herring
Quoted 16 lines
There is nothing arch specific about building dtb files other than their location under /arch/*/boot/dts/. Keeping each arch aligned is a pain. The dependencies and supported targets are all slightly different. Also, a cross-compiler for each arch is needed, but really the host compiler preprocessor is perfectly fine for building dtbs. Move the build rules to a common location and remove the arch specific ones. This is done in a single step to avoid warnings about overriding rules.
The build dependencies had been a mixture of 'scripts' and/or 'prepare'. These pull in several dependencies some of which need a target compiler (specifically
devicetable-offsets.h) and aren't needed to build dtbs. All that is really needed is dtc, so adjust the dependencies to only be dtc.This change enables support '
dtbs_install' on some arches which were missing the target.[...]
Makefile kselftest-merge: · line 1225
Quoted 12 lines
Makefile +8
-0@@ -1215,6 +1215,33 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifdef CONFIG_OF_EARLY_FLATTREEThis can be true when dtstree is unset. So this line should be this instead to fix the 0-day reported error:
ifneq ($(dtstree),)
Quoted 14 lines
Quoted 4 lines
Makefile +4
-0+ +%.dtb : scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ +Makefile kselftest-merge: · line 1239
Quoted 10 lines
Makefile +10
-0+PHONY += dtbs dtbs_install +dtbs: scripts_dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +endifAh, right.
Even x86 can enable OF andOF_UNITTEST.Another solution might be,
guard it by 'depends onARCH_SUPPORTS_OF'.This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends onARCH_SUPPORTS_ACPI
...
Quoted 7 lines
Quoted 5 lines
ACPI is a real platform feature, as it depends on firmware.
CONFIG_OFcan be enabled, and DT overlays can be loaded, on any platform, even if it has ACPI ;-)OK, understood.
Any other comments on this? I'd like to get the series into linux-next soon.
There was one other problem 0-day reported when building with CONFIG_OF=n while setting CONFIG_OF_ALL_DTBS=y on the kernel command line. The problem is dtc is not built as setting options on the command line doesn't invoke kconfig select(s). This can be fixed by also adding CONFIG_DTC=y to the command line, always building dtc regardless of Kconfig, or making 'all' conditionally dependent on 'dtbs'. I've gone with the last option as that is how this problem was avoided before.
So the hunk in question with the 2 fixes now looks like this:
@@ -1215,6 +1215,35 @@ kselftest-merge:
$(srctree)/tools/testing/selftests/*/config
+$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig+#
---------------------------------------------------------------------------
+# Devicetree files
+
+ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts
+endif
+
+ifneq ($(dtstree),)
+
+%.dtb : scripts_dtc
+ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
+
+PHONY += dtbs dtbs_install
+dtbs: scripts_dtc
+ $(Q)$(MAKE) $(build)=$(dtstree)
+
+dtbs_install: dtbs
+ $(Q)$(MAKE) $(dtbinst)=$(dtstree)
+
+ifdef CONFIG_OF_EARLY_FLATTREE
+all: dtbs
+endif
+
+endif
+
+PHONY += scripts_dtc
+scripts_dtc: scripts_basic
+ $(Q)$(MAKE) $(build)=scripts/dtc
+
#
---------------------------------------------------------------------------
# Modules
Re: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Hi Rob,
2018?9?29?(?) 0:43 Rob Herring <[email protected]>:
Makefile kselftest-merge: · line 1227
Quoted 11 lines
Makefile +10
-1+# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifneq ($(dtstree),) + +%.dtb : scripts_dtc
%.dtb: prepare3 prepare
because we need to make sure KERNELRELEASE
is correctly defined before dtbs_install happens.
Makefile kselftest-merge: · line 1231
Quoted 4 lines
Makefile +4
-0+ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + +PHONY += dtbs dtbs_install +dtbs: scripts_dtc
dtbs: prepare3 scripts_dtc
Makefile kselftest-merge: · line 1234
Quoted 3 lines
Makefile +3
-0+ $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs
Please do not have dtbs_install to depend on dtbs.
No install targets should ever trigger building anything in the source tree.
For the background, see the commit log of19514fc665ffbce624785f76ee7ad0ea6378a527
Quoted 16 lines
Makefile +12
-1+ $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +ifdef CONFIG_OF_EARLY_FLATTREE +all: dtbs +endif + +endif + +PHONY += scripts_dtc +scripts_dtc: scripts_basic + $(Q)$(MAKE) $(build)=scripts/dtc + # --------------------------------------------------------------------------- # Modules
Signature · 2 lines
Best Regards Masahiro Yamada
Rob Herring
maintainerRe: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Quoted 6 lines · Masahiro Yamada
Hi Rob,
2018?9?29?(?) 0:43 Rob Herring <[email protected]>:
Quoted 13 lines
Review
Quoted 11 lines
(quoted diff) +10
-1+# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifneq ($(dtstree),) + +%.dtb : scripts_dtc%.dtb: prepare3 prepare
I assume you didn't mean to drop scripts_dtc as that doesn't work.
Why "prepare" here and not on dtbs?
Quoted 2 lines
because we need to make sure KERNELRELEASE
is correctly defined beforedtbs_installhappens.
Yes, indeed. With prepare3 added I get:
cp: cannot create regular file '/boot/dtbs/4.19.0-rc3-00009-g0afba9b7b2ea-dirty': No such file or directory
vs. with it:
cp: cannot create regular file '/boot/dtbs/': Not a directory
Quoted 19 lines
Review
Quoted 6 lines
(quoted diff) +4
-0+ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + +PHONY += dtbs dtbs_install +dtbs: scripts_dtcdtbs: prepare3
scripts_dtcReview
Quoted 3 lines
(quoted diff) +3
-0+ $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbsPlease do not have
dtbs_installto depend on dtbs.
Quoted 6 lines
No install targets should ever trigger building anything in the source tree.
For the background, see the commit log of
19514fc665ffbce624785f76ee7ad0ea6378a527
Okay, thanks.
Rob
Re: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Hi Rob,
2018?10?1?(?) 22:26 Rob Herring <[email protected]>:
Quoted 23 lines
Quoted 6 lines · Masahiro Yamada
Hi Rob,
2018?9?29?(?) 0:43 Rob Herring <[email protected]>:
Quoted 13 lines
Review
Quoted 11 lines
(quoted diff) +10
-1+# --------------------------------------------------------------------------- +# Devicetree files + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) +dtstree := arch/$(SRCARCH)/boot/dts +endif + +ifneq ($(dtstree),) + +%.dtb : scripts_dtc%.dtb: prepare3 prepare
Quoted 3 lines
I assume you didn't mean to drop
scripts_dtcas that doesn't work.Why "prepare" here and not on dtbs?
Sorry, my mistake.
%.dtb: prepare3 scripts_dtc
is the correct one.
Quoted 42 lines
Quoted 2 lines
because we need to make sure KERNELRELEASE
is correctly defined beforedtbs_installhappens.Yes, indeed. With prepare3 added I get:
cp: cannot create regular file '
/boot/dtbs/4.19.0-rc3-00009-g0afba9b7b2ea-dirty': No such file or directoryvs. with it:
cp: cannot create regular file '
/boot/dtbs/': Not a directoryQuoted 19 lines
Review
Quoted 6 lines
(quoted diff) +4
-0+ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + +PHONY += dtbs dtbs_install +dtbs: scripts_dtcdtbs: prepare3
scripts_dtcReview
Quoted 3 lines
(quoted diff) +3
-0+ $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbsPlease do not have
dtbs_installto depend on dtbs.Quoted 6 lines
No install targets should ever trigger building anything in the source tree.
For the background, see the commit log of
19514fc665ffbce624785f76ee7ad0ea6378a527Okay, thanks.
Rob
Signature · 2 lines
Best Regards Masahiro Yamada
Re: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
In reply to Geert UytterhoevenHi Geert,
Am 13.09.18 um 17:51 schrieb Geert Uytterhoeven:
Quoted 14 lines
Quoted 11 lines · Masahiro Yamada
Even x86 can enable OF and
OF_UNITTEST.Another solution might be,
guard it by 'depends onARCH_SUPPORTS_OF'.This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends onARCH_SUPPORTS_ACPI
...
Quoted 4 lines
ACPI is a real platform feature, as it depends on firmware.
CONFIG_OFcan be enabled, and DT overlays can be loaded, on any platform, even if it has ACPI ;-)
How would loading a DT overlay work on an ACPI platform? I.e., what would it overlay against and how to practically load such a file?
I wonder whether that could be helpful for USB devices and serdev...
Cheers,
Andreas
Signature · 3 lines
SUSE Linux GmbH, Maxfeldstr. 5, 90409 N?rnberg, Germany GF: Felix Imend?rffer, Jane Smithard, Graham Norton HRB 21284 (AG N?rnberg)
Rob Herring
maintainerRe: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Quoted 18 lines · Andreas F?rber
Hi Geert,
Am 13.09.18 um 17:51 schrieb Geert Uytterhoeven:
Quoted 14 lines
Quoted 11 lines · Masahiro Yamada
Even x86 can enable OF and
OF_UNITTEST.Another solution might be,
guard it by 'depends onARCH_SUPPORTS_OF'.This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends onARCH_SUPPORTS_ACPI
...
Quoted 7 lines
Quoted 4 lines
ACPI is a real platform feature, as it depends on firmware.
CONFIG_OFcan be enabled, and DT overlays can be loaded, on any platform, even if it has ACPI ;-)How would loading a DT overlay work on an ACPI platform? I.e., what would it overlay against and how to practically load such a file?
The DT unittests do just that. I run them on x86 and UM builds. In this case, the loading source is built-in.
Quoted 1 line
I wonder whether that could be helpful for USB devices and serdev...
How to load the overlays is pretty orthogonal to the issues to be solved here. It would certainly be possible to move forward with prototyping this and just have the overlay built-in. It may not even need to be an overlay if we can support multiple root nodes.
Rob
Re: [PATCH v3 6/9] kbuild: consolidate Devicetree dtb build rules
Quoted 27 lines · Rob Herring
Quoted 15 lines · Andreas F?rber
Am 13.09.18 um 17:51 schrieb Geert Uytterhoeven:
Quoted 14 lines
Quoted 11 lines · Masahiro Yamada
Even x86 can enable OF and
OF_UNITTEST.Another solution might be,
guard it by 'depends onARCH_SUPPORTS_OF'.This is actually what ACPI does.
menuconfig ACPI
bool "ACPI (Advanced Configuration and Power Interface) Support" depends onARCH_SUPPORTS_ACPI
...Quoted 7 lines
Quoted 4 lines
ACPI is a real platform feature, as it depends on firmware.
CONFIG_OFcan be enabled, and DT overlays can be loaded, on any platform, even if it has ACPI ;-)How would loading a DT overlay work on an ACPI platform? I.e., what would it overlay against and how to practically load such a file?
The DT unittests do just that. I run them on x86 and UM builds. In this case, the loading source is built-in.
Quoted 6 lines
Quoted 1 line
I wonder whether that could be helpful for USB devices and serdev...
How to load the overlays is pretty orthogonal to the issues to be solved here. It would certainly be possible to move forward with prototyping this and just have the overlay built-in. It may not even need to be an overlay if we can support multiple root nodes.
You indeed need to refer to some anchors for most use cases, although a simple MMIO device could just be anchored to the root node.
Topologies hanging off a USB device would be my first use case, too, for serdev, or for e.g. the mcp2210 USB-SPI bridge.
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at 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 TorvaldsRob Herring
maintainerPATCH v3 7/9 powerpc: enable building all dtbs
In reply to Rob HerringEnable the 'dtbs' target for powerpc. This allows building all the dts files in arch/powerpc/boot/dts/ when COMPILE_TEST and OF_ALL_DTBS are enabled.
--- arch/powerpc/boot/dts/Makefile | 5 +++++ arch/powerpc/boot/dts/fsl/Makefile | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 arch/powerpc/boot/dts/fsl/Makefile
arch/powerpc/boot/dts/Makefile +5 -0
@@ -1 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 + +subdir-y += fsl + +dtstree := $(srctree)/$(src) +dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
arch/powerpc/boot/dts/fsl/Makefile new file +4 -0
@@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 + +dtstree := $(srctree)/$(src) +dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
Signature · 1 line
2.17.1
Rob Herring
maintainerPATCH v3 8/9 c6x: enable building all dtbs
In reply to Rob HerringEnable the 'dtbs' target for c6x. This allows building all the dts files in arch/c6x/boot/dts/ for enabled platforms or when COMPILE_TEST and OF_ALL_DTBS are enabled.
--- arch/c6x/boot/dts/Makefile | 6 ++++++ 1 file changed, 6 insertions(+)
arch/c6x/boot/dts/Makefile +6 -0
@@ -5,6 +5,12 @@ DTC_FLAGS ?= -p 1024 +dtb-$(CONFIG_SOC_TMS320C6455) += dsk6455.dtb +dtb-$(CONFIG_SOC_TMS320C6457) += evmc6457.dtb +dtb-$(CONFIG_SOC_TMS320C6472) += evmc6472.dtb +dtb-$(CONFIG_SOC_TMS320C6474) += evmc6474.dtb +dtb-$(CONFIG_SOC_TMS320C6678) += evmc6678.dtb + ifneq ($(DTB),) obj-y += $(DTB).dtb.o endif
Signature · 1 line
2.17.1
Rob Herring
maintainerPATCH v3 9/9 microblaze: enable building all dtbs
In reply to Rob HerringEnable the 'dtbs' target for microblaze. As microblaze only has one dts file, always enable it.
--- arch/microblaze/boot/dts/Makefile | 2 ++ 1 file changed, 2 insertions(+)
arch/microblaze/boot/dts/Makefile +2 -0
@@ -1,6 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 # +dtb-y := system.dtb + ifneq ($(DTB),) obj-y += linked_dtb.o
Signature · 1 line
2.17.1