On 9/1/20 6:14 AM, Simon Glass wrote: > At present 64-bit sunxi boards use the Makefile to create a FIT, using > USE_SPL_FIT_GENERATOR. This is deprecated. > > Update sunxi to use binman instead. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > (no changes since v2) > > Changes in v2: > - Add a 'fit-fdt-list' property > - Fix 'board' typo in commit message > > Kconfig | 3 +- > Makefile | 18 ++-------- > arch/arm/dts/sunxi-u-boot.dtsi | 61 +++++++++++++++++++++++++++++++++- > 3 files changed, 63 insertions(+), 19 deletions(-) > > diff --git a/Kconfig b/Kconfig > index 883e3f71d01..837b2f517ae 100644 > --- a/Kconfig > +++ b/Kconfig > @@ -659,12 +659,11 @@ config SPL_FIT_SOURCE > > config USE_SPL_FIT_GENERATOR > bool "Use a script to generate the .its script" > - default y if SPL_FIT > + default y if SPL_FIT && !ARCH_SUNXI
Now `make u-boot.itb` doesn't work. u-boot.itb is helpful to have because, with CONFIG_OF_LIST, it can be shared across all boards of a platform. Only SPL is board-specific (on arm64 sunxi, at least). Is there a way to make binman also write the FIT without the SPL? Would that require duplicating the whole binman node? > config SPL_FIT_GENERATOR > string ".its file generator script for U-Boot FIT image" > depends on USE_SPL_FIT_GENERATOR > - default "board/sunxi/mksunxi_fit_atf.sh" if SPL_LOAD_FIT && ARCH_SUNXI > default "arch/arm/mach-rockchip/make_fit_atf.py" if SPL_LOAD_FIT && > ARCH_ROCKCHIP > default "arch/arm/mach-zynqmp/mkimage_fit_atf.sh" if SPL_LOAD_FIT && > ARCH_ZYNQMP > default "arch/riscv/lib/mkimage_fit_opensbi.sh" if SPL_LOAD_FIT && RISCV > diff --git a/Makefile b/Makefile > index 5b4e60496d6..65024c74089 100644 > --- a/Makefile > +++ b/Makefile > @@ -923,11 +923,6 @@ INPUTS-$(CONFIG_REMAKE_ELF) += u-boot.elf > INPUTS-$(CONFIG_EFI_APP) += u-boot-app.efi > INPUTS-$(CONFIG_EFI_STUB) += u-boot-payload.efi > > -# Build a combined spl + u-boot image for sunxi > -ifeq ($(CONFIG_ARCH_SUNXI)$(CONFIG_ARM64)$(CONFIG_SPL),yyy) > -INPUTS-y += u-boot-sunxi-with-spl.bin > -endif > - > # Generate this input file for binman > ifeq ($(CONFIG_SPL),) > INPUTS-$(CONFIG_ARCH_MEDIATEK) += u-boot-mtk.bin > @@ -1024,13 +1019,9 @@ PHONY += inputs > inputs: $(INPUTS-y) > > all: .binman_stamp inputs > -# Hack for sunxi which doesn't have a proper binman definition for > -# 64-bit boards > -ifneq ($(CONFIG_ARCH_SUNXI)$(CONFIG_ARM64),yy) > ifeq ($(CONFIG_BINMAN),y) > $(call if_changed,binman) > endif > -endif > > # Timestamp file to make sure that binman always runs > .binman_stamp: FORCE > @@ -1336,6 +1327,8 @@ cmd_binman = $(srctree)/tools/binman/binman $(if > $(BINMAN_DEBUG),-D) \ > $(if $(BINMAN_VERBOSE),-v$(BINMAN_VERBOSE)) \ > build -u -d u-boot.dtb -O . -m --allow-missing \ > -I . -I $(srctree) -I $(srctree)/board/$(BOARDDIR) \ > + -I arch/$(ARCH)/dts -a of-list=$(CONFIG_OF_LIST) \ > + -a atf-bl31-path=${BL31} \ > $(BINMAN_$(@F)) > > OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex > @@ -1625,13 +1618,6 @@ u-boot-x86-reset16.bin: u-boot FORCE > > endif # CONFIG_X86 > > -ifneq ($(CONFIG_ARCH_SUNXI),) > -ifeq ($(CONFIG_ARM64),y) > -u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE > - $(call if_changed,cat) > -endif > -endif > - Now `make u-boot-sunxi-with-spl.bin` doesn't work. This is less of an issue, but still probably breaks some scripts. It breaks mine, at least. > OBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI) > u-boot-app.efi: u-boot FORCE > $(call if_changed,zobjcopy) > diff --git a/arch/arm/dts/sunxi-u-boot.dtsi b/arch/arm/dts/sunxi-u-boot.dtsi > index fdd4c80aa46..1d1c3691099 100644 > --- a/arch/arm/dts/sunxi-u-boot.dtsi > +++ b/arch/arm/dts/sunxi-u-boot.dtsi > @@ -5,14 +5,73 @@ > mmc1 = &mmc2; > }; > > - binman { > + binman: binman { > + multiple-images; > + }; > +}; > + > +&binman { > + u-boot-sunxi-with-spl { > filename = "u-boot-sunxi-with-spl.bin"; > pad-byte = <0xff>; style: blank line here (and above "atf" and "@config-SEQ" below). > blob { > filename = "spl/sunxi-spl.bin"; > }; > +#ifdef CONFIG_ARM64 > + fit { > + description = "Configuration to load ATF before U-Boot"; > + #address-cells = <1>; > + fit,fdt-list = "of-list"; > + > + images { > + uboot { > + description = "U-Boot (64-bit)"; > + type = "standalone"; > + arch = "arm64"; > + compression = "none"; > + load = <0x4a000000>; > + > + u-boot-nodtb { > + }; > + }; > + atf { > + description = "ARM Trusted Firmware"; > + type = "firmware"; > + arch = "arm64"; > + compression = "none"; > +/* TODO: Do this with an overwrite in this board's dtb? */ This address is determined by the physical SRAM layout, so it is per-SoC, not per-board. I would suggest omitting load/entry here entirely, and putting them in the $SOC-u-boot.dtsi. > +#ifdef CONFIG_MACH_SUN50I_H6 > + load = <0x104000>; > + entry = <0x104000>; > +#else > + load = <0x44000>; > + entry = <0x44000>; > +#endif > + atf-bl31 { > + }; > + }; > + > + @fdt-SEQ { > + description = "NAME"; > + type = "flat_dt"; > + compression = "none"; > + }; > + }; > + > + configurations { > + default = "config-1"; I would expect @DEFAULT-SEQ here. > + @config-SEQ { > + description = "NAME"; > + firmware = "uboot"; > + loadables = "atf"; > + fdt = "fdt-SEQ"; > + }; > + }; > + }; > +#else > u-boot-img { > offset = <CONFIG_SPL_PAD_TO>; > }; > +#endif > }; > }; >