From patchwork Fri Mar 31 22:31:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [U-Boot,v3,14/19] sunxi: 64-bit SoCs: introduce FIT generator script From: Andre Przywara X-Patchwork-Id: 745831 X-Patchwork-Delegate: jagannadh.teki@gmail.com Message-Id: <1490999491-14899-15-git-send-email-andre.przywara@arm.com> To: Maxime Ripard , Jagan Teki , Simon Glass , Tom Rini Cc: Philipp Tomsich , Michal Simek , u-boot@lists.denx.de, Icenowy Zheng Date: Fri, 31 Mar 2017 23:31:26 +0100 Now that the Makefile can call a generator script to build a more advanced FIT image, let's use this feature to address the needs of Allwinner boards with 64-bit SoCs (A64 and H5). The (DTB stripped) U-Boot binary and the ATF are static, but we allow an arbitrary number of supported device trees to be passed. The script enters both a DT entry in the /images node and the respective subnode in /configurations to support all listed DTBs. This requires to copy the ARM Trusted Firmware build (bl31.bin) into the U-Boot source directory (or to create a symlink to it). Signed-off-by: Andre Przywara Reviewed-by: Simon Glass Acked-by: Maxime Ripard --- board/sunxi/mksunxi_fit_atf.sh | 73 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 board/sunxi/mksunxi_fit_atf.sh diff --git a/board/sunxi/mksunxi_fit_atf.sh b/board/sunxi/mksunxi_fit_atf.sh new file mode 100755 index 0000000..afa22e8 --- /dev/null +++ b/board/sunxi/mksunxi_fit_atf.sh @@ -0,0 +1,73 @@ +#!/bin/sh +# +# script to generate FIT image source for 64-bit sunxi boards with +# ARM Trusted Firmware and multiple device trees (given on the command line) +# +# usage: $0 [ [; + + images { + uboot@1 { + description = "U-Boot (64-bit)"; + data = /incbin/("u-boot-nodtb.bin"); + type = "standalone"; + arch = "arm64"; + compression = "none"; + load = <0x4a000000>; + }; + atf@1 { + description = "ARM Trusted Firmware"; + data = /incbin/("bl31.bin"); + type = "firmware"; + arch = "arm64"; + compression = "none"; + load = <0x44000>; + entry = <0x44000>; + }; +__HEADER_EOF + +cnt=1 +for dtname in $* +do + cat << __FDT_IMAGE_EOF + fdt@$cnt { + description = "$(basename $dtname .dtb)"; + data = /incbin/("$dtname"); + type = "flat_dt"; + compression = "none"; + }; +__FDT_IMAGE_EOF + cnt=$((cnt+1)) +done + +cat << __CONF_HEADER_EOF + }; + configurations { + default = "config@1"; + +__CONF_HEADER_EOF + +cnt=1 +for dtname in $* +do + cat << __CONF_SECTION_EOF + config@$cnt { + description = "$(basename $dtname .dtb)"; + firmware = "uboot@1"; + loadables = "atf@1"; + fdt = "fdt@$cnt"; + }; +__CONF_SECTION_EOF + cnt=$((cnt+1)) +done + +cat << __ITS_EOF + }; +}; +__ITS_EOF From patchwork Fri Mar 31 22:31:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [U-Boot,v3,16/19] sunxi: enable automatic FIT build for 64-bit SoCs From: Andre Przywara X-Patchwork-Id: 745840 X-Patchwork-Delegate: jagannadh.teki@gmail.com Message-Id: <1490999491-14899-17-git-send-email-andre.przywara@arm.com> To: Maxime Ripard , Jagan Teki , Simon Glass , Tom Rini Cc: Philipp Tomsich , Michal Simek , u-boot@lists.denx.de, Icenowy Zheng Date: Fri, 31 Mar 2017 23:31:28 +0100 The Allwinner SoCs with 64-bit cores use an ARM Trusted Firmware binary, which needs to be loaded alongside U-Boot proper. Set the respective Kconfig options to let them select this feature and also automatically build the FIT image. Signed-off-by: Andre Przywara Acked-by: Maxime Ripard --- Kconfig | 1 + board/sunxi/Kconfig | 4 ++++ include/configs/sunxi-common.h | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/Kconfig b/Kconfig index 5c82788..ffea4c3 100644 --- a/Kconfig +++ b/Kconfig @@ -252,6 +252,7 @@ config SPL_FIT_SOURCE config SPL_FIT_GENERATOR string ".its file generator script for U-Boot FIT image" depends on SPL_FIT + default "board/sunxi/mksunxi_fit_atf.sh" if SPL_LOAD_FIT && ARCH_SUNXI help Specifies a (platform specific) script file to generate the FIT source file used to build the U-Boot FIT image file. This gets diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig index 3e0e262..b629f3b 100644 --- a/board/sunxi/Kconfig +++ b/board/sunxi/Kconfig @@ -145,12 +145,16 @@ config MACH_SUN50I select SUNXI_GEN_SUN6I select SUNXI_HIGH_SRAM select SUPPORT_SPL + select FIT + select SPL_LOAD_FIT config MACH_SUN50I_H5 bool "sun50i (Allwinner H5)" select ARM64 select MACH_SUNXI_H3_H5 select SUNXI_HIGH_SRAM + select FIT + select SPL_LOAD_FIT endchoice diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h index b7eb95e..1982063 100644 --- a/include/configs/sunxi-common.h +++ b/include/configs/sunxi-common.h @@ -32,6 +32,10 @@ # define CONFIG_MACH_TYPE_COMPAT_REV 1 #endif +#ifdef CONFIG_ARM64 +#define CONFIG_BUILD_TARGET "u-boot.itb" +#endif + /* Serial & console */ #define CONFIG_SYS_NS16550_SERIAL /* ns16550 reg in the low bits of cpu reg */