From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Fri, 31 Jan 2014 13:30:43 -0700 Subject: [U-Boot] [PATCH] dts: re-write dts/Makefile more simply with Kbuild In-Reply-To: <1391073459-5106-1-git-send-email-yamada.m@jp.panasonic.com> References: <1391073459-5106-1-git-send-email-yamada.m@jp.panasonic.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Masahiro, On 30 January 2014 02:17, Masahiro Yamada wrote: > Useful rules in scripts/Makefile.lib allows us to easily > generate a device tree blob and wrap it in assembly code. > > We do not need to parse a linker script to get output format and arch. > > Signed-off-by: Masahiro Yamada Great, another benefit from the Kbuild changes! > --- > > This patch uses my Kbuild series as a prerequisite. > "Switch over to real Kbuild" series must be applied beforehand. > > > .gitignore | 1 - > Makefile | 16 +++++----- > arch/arm/lib/board.c | 2 +- > arch/microblaze/lib/board.c | 2 +- > arch/x86/lib/init_helpers.c | 2 +- > common/board_f.c | 2 +- > dts/.gitignore | 2 ++ > dts/Makefile | 72 +++++++++++++-------------------------------- > include/common.h | 2 +- > scripts/Makefile.lib | 12 ++++---- > 10 files changed, 41 insertions(+), 72 deletions(-) > create mode 100644 dts/.gitignore > > diff --git a/.gitignore b/.gitignore > index 24019b3..5882ff5 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -48,7 +48,6 @@ > /u-boot.lds > /u-boot.ubl > /u-boot.ais > -/u-boot.dtb I think we should still generate this file in the root directory, since some build systems will need to use it. Ultimately we should support generating multiple .dtbs with the U-Boot build system. I will see if I have a patch for that somewhere... > /u-boot.sb > > # > diff --git a/Makefile b/Makefile > index 3bf759a..ab82ed4 100644 > --- a/Makefile > +++ b/Makefile > @@ -743,7 +743,7 @@ ALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl > ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin > ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img > ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin > -ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb u-boot-dtb.bin > +ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.bin > ifneq ($(CONFIG_SPL_TARGET),) > ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%) > endif > @@ -767,11 +767,11 @@ endif > > all: $(ALL-y) > > -u-boot.dtb: checkdtc u-boot > - $(MAKE) $(build)=dts binary > - mv dts/dt.dtb $@ > +PHONY += dtbs > +dtbs dts/dt.dtb: checkdtc u-boot > + $(Q)$(MAKE) $(build)=dts dtbs > > -u-boot-dtb.bin: u-boot.bin u-boot.dtb > +u-boot-dtb.bin: u-boot.bin dts/dt.dtb > cat $^ >$@ > > u-boot.hex: u-boot > @@ -898,8 +898,8 @@ u-boot-nodtb-tegra.bin: spl/u-boot-spl.bin u-boot.bin > rm spl/u-boot-spl-pad.bin > > ifeq ($(CONFIG_OF_SEPARATE),y) > -u-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin u-boot.dtb > - cat u-boot-nodtb-tegra.bin u-boot.dtb > $@ > +u-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin dts/dt.dtb > + cat $^ > $@ > endif > endif > > @@ -1184,7 +1184,7 @@ CLOBBER_DIRS += tpl \ > $(shell ls -1 --file-type spl 2>/dev/null)))) > CLOBBER_FILES += u-boot u-boot.elf u-boot.hex u-boot.img \ > u-boot.kwb u-boot.pbl u-boot.ldr \ > - u-boot.ubl u-boot.ais u-boot.dtb \ > + u-boot.ubl u-boot.ais \ > u-boot.sb u-boot.spr MLO MLO.byteswap SPL \ > $(patsubst %,spl/%, $(filter-out Makefile %/, \ > $(shell ls -1 --file-type spl 2>/dev/null))) \ > diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c > index b770e25..c8cb049 100644 > --- a/arch/arm/lib/board.c > +++ b/arch/arm/lib/board.c > @@ -280,7 +280,7 @@ void board_init_f(ulong bootflag) > gd->mon_len = _bss_end_ofs; > #ifdef CONFIG_OF_EMBED > /* Get a pointer to the FDT */ > - gd->fdt_blob = _binary_dt_dtb_start; > + gd->fdt_blob = __dtb_db_begin Needs ; on the end I think. > #elif defined CONFIG_OF_SEPARATE > /* FDT is at end of image */ > gd->fdt_blob = (void *)(_end_ofs + _TEXT_BASE); > diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c > index 896e73a..0f10c88 100644 > --- a/arch/microblaze/lib/board.c > +++ b/arch/microblaze/lib/board.c > @@ -76,7 +76,7 @@ void board_init_f(ulong not_used) > > #ifdef CONFIG_OF_EMBED > /* Get a pointer to the FDT */ > - gd->fdt_blob = _binary_dt_dtb_start; > + gd->fdt_blob = __dtb_dt_begin; > #elif defined CONFIG_OF_SEPARATE > /* FDT is at end of image */ > gd->fdt_blob = (void *)__end; > diff --git a/arch/x86/lib/init_helpers.c b/arch/x86/lib/init_helpers.c > index 582c0ff..b5d937f 100644 > --- a/arch/x86/lib/init_helpers.c > +++ b/arch/x86/lib/init_helpers.c > @@ -92,7 +92,7 @@ int find_fdt(void) > { > #ifdef CONFIG_OF_EMBED > /* Get a pointer to the FDT */ > - gd->fdt_blob = _binary_dt_dtb_start; > + gd->fdt_blob = __dtb_dt_begin; > #elif defined CONFIG_OF_SEPARATE > /* FDT is at end of image */ > gd->fdt_blob = (ulong *)&_end; > diff --git a/common/board_f.c b/common/board_f.c > index aa70c3e..d0ee6f7 100644 > --- a/common/board_f.c > +++ b/common/board_f.c > @@ -360,7 +360,7 @@ static int setup_fdt(void) > { > #ifdef CONFIG_OF_EMBED > /* Get a pointer to the FDT */ > - gd->fdt_blob = _binary_dt_dtb_start; > + gd->fdt_blob = __dtb_dt_begin; > #elif defined CONFIG_OF_SEPARATE > /* FDT is at end of image */ > # ifdef CONFIG_SYS_SYM_OFFSETS > diff --git a/dts/.gitignore b/dts/.gitignore > new file mode 100644 > index 0000000..1b37180 > --- /dev/null > +++ b/dts/.gitignore > @@ -0,0 +1,2 @@ > +*.dtb > +*.dtb.S > diff --git a/dts/Makefile b/dts/Makefile > index 1e7609a..c47fba7 100644 > --- a/dts/Makefile > +++ b/dts/Makefile > @@ -7,64 +7,32 @@ > # This Makefile builds the internal U-Boot fdt if CONFIG_OF_CONTROL is > # enabled. See doc/README.fdt-control for more details. > > -DTS_INCDIRS = $(SRCTREE)/board/$(VENDOR)/$(BOARD)/dts > -DTS_INCDIRS += $(SRCTREE)/board/$(VENDOR)/dts > -DTS_INCDIRS += $(SRCTREE)/arch/$(ARCH)/dts > +DEVICE_TREE ?= $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%) > +ifeq ($(DEVICE_TREE),) > +DEVICE_TREE := notfound > +endif > > -DTS_CPPFLAGS := -x assembler-with-cpp -undef -D__DTS__ \ > - -nostdinc $(addprefix -I,$(DTS_INCDIRS)) > +DTS := $(srctree)/board/$(VENDOR)/dts/$(DEVICE_TREE).dts > > -DTC_FLAGS := -R 4 -p 0x1000 \ > - $(addprefix -i ,$(DTS_INCDIRS)) > +DTC_FLAGS += -i $(srctree)/arch/$(ARCH)/dts -R 4 -p 0x1000 > > -# Use a constant name for this so we can access it from C code. > -# objcopy doesn't seem to allow us to set the symbol name independently of > -# the filename. > -DT_BIN := $(obj)/dt.dtb > +$(obj)/dt.dtb: $(DTS) FORCE > + $(call if_changed_dep,dtc) > > -DEVICE_TREE ?= $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%) > -ifeq ($(DEVICE_TREE),) > -$(DT_BIN): FORCE > - echo >&2 "Please define CONFIG_DEFAULT_DEVICE_TREE in your board header file" > -else > -$(DT_BIN): $(TOPDIR)/board/$(VENDOR)/dts/$(DEVICE_TREE).dts > - $(CPP) $(DTS_CPPFLAGS) $< -o $(DT_BIN).dts.tmp > - $(DTC) $(DTC_FLAGS) -O dtb -o ${DT_BIN} $(DT_BIN).dts.tmp > -endif > +targets += dt.dtb > > -process_lds = \ > - $(1) | sed -r -n 's/^OUTPUT_$(2)[ ("]*([^")]*).*/\1/p' > +$(DTS): > + @echo >&2 > + @echo >&2 "Device Tree Source is not specified." > + @echo >&2 "Please define 'CONFIG_DEFAULT_DEVICE_TREE'" > + @echo >&2 "or build with 'DEVICE_TREE=' argument" > + @/bin/false > > -# Run the compiler and get the link script from the linker > -GET_LDS = $(CC) $(c_flags) $(ld_flags) -Wl,--verbose 2>&1 > +.SECONDARY: $(obj)/dt.dtb.S > > -$(obj)/dt.o: $(DT_BIN) > - # We want the output format and arch. > - # We also hope to win a prize for ugliest Makefile / shell interaction > - # We look in the LDSCRIPT first. > - # Then try the linker which should give us the answer. > - # Then check it worked. > - [ -n "$(LDSCRIPT)" ] && \ > - oformat=`$(call process_lds,cat $(LDSCRIPT),FORMAT)` && \ > - oarch=`$(call process_lds,cat $(LDSCRIPT),ARCH)` ;\ > - \ > - [ -z $${oformat} ] && \ > - oformat=`$(call process_lds,$(GET_LDS),FORMAT)` ;\ > - [ -z $${oarch} ] && \ > - oarch=`$(call process_lds,$(GET_LDS),ARCH)` ;\ > - \ > - [ -z $${oformat} ] && \ > - echo "Cannot read OUTPUT_FORMAT from lds file $(LDSCRIPT)" && \ > - exit 1 || true ;\ > - [ -z $${oarch} ] && \ > - echo "Cannot read OUTPUT_ARCH from lds file $(LDSCRIPT)" && \ > - exit 1 || true ;\ > - \ > - cd $(dir ${DT_BIN}) && \ > - $(OBJCOPY) -I binary -O $${oformat} -B $${oarch} \ > - $(notdir ${DT_BIN}) $(notdir $@) > - rm $(DT_BIN) > +obj-$(CONFIG_OF_EMBED) := dt.dtb.o > > -obj-$(CONFIG_OF_EMBED) := dt.o > +dtbs: $(obj)/dt.dtb > + @: > > -binary: $(DT_BIN) > +clean-files := dt.dtb.S > diff --git a/include/common.h b/include/common.h > index c15e5a4..b590f3a 100644 > --- a/include/common.h > +++ b/include/common.h > @@ -302,7 +302,7 @@ int checkdram (void); > int last_stage_init(void); > extern ulong monitor_flash_len; > int mac_read_from_eeprom(void); > -extern u8 _binary_dt_dtb_start[]; /* embedded device tree blob */ > +extern u8 __dtb_dt_begin[]; /* embedded device tree blob */ > int set_cpu_clk_info(void); > int print_cpuinfo(void); > int update_flash_size(int flash_size); > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index d4b5cb5..ee3ceac 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -151,9 +151,10 @@ cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(UBOOTINCLUDE) \ > > ld_flags = $(LDFLAGS) $(ldflags-y) > > +# Modified for U-Boot > dtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \ > - -I$(srctree)/arch/$(SRCARCH)/boot/dts \ > - -I$(srctree)/arch/$(SRCARCH)/boot/dts/include \ > + -I$(srctree)/board/$(VENDOR)/dts/ \ > + -I$(srctree)/arch/$(ARCH)/dts \ > -undef -D__DTS__ > > # Finds the multi-part object the current object will be linked into > @@ -247,25 +248,24 @@ cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \ > > # Generate an assembly file to wrap the output of the device tree compiler > quiet_cmd_dt_S_dtb= DTB $@ > +# Modified for U-Boot > cmd_dt_S_dtb= \ > ( \ > - echo '\#include '; \ > echo '.section .dtb.init.rodata,"a"'; \ > - echo '.balign STRUCT_ALIGNMENT'; \ > echo '.global __dtb_$(*F)_begin'; \ > echo '__dtb_$(*F)_begin:'; \ > echo '.incbin "$<" '; \ > echo '__dtb_$(*F)_end:'; \ > echo '.global __dtb_$(*F)_end'; \ > - echo '.balign STRUCT_ALIGNMENT'; \ > ) > $@ > > $(obj)/%.dtb.S: $(obj)/%.dtb > $(call cmd,dt_S_dtb) > > quiet_cmd_dtc = DTC $@ > +# Modified for U-Boot > cmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ > - $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 \ > + dtc -O dtb -o $@ -b 0 \ > -i $(dir $<) $(DTC_FLAGS) \ > -d $(depfile).dtc.tmp $(dtc-tmp) ; \ > cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) > -- > 1.8.3.2 > Regards, Simon