diff mbox

[U-Boot,12/17] Makefile: add rules to generate SPL FIT images

Message ID 1488335129-12363-13-git-send-email-andre.przywara@arm.com
State Accepted
Commit 1a12fdc461421b5a385ab5d7926e5425d429d48e
Delegated to: Jagannadha Sutradharudu Teki
Headers show

Commit Message

Andre Przywara March 1, 2017, 2:25 a.m. UTC
Some platforms require more complex U-Boot images than we can easily
generate via the mkimage command line, for instance to load additional
image files.
Introduce a CONFIG_SPL_FIT_SOURCE and CONFIG_SPL_FIT_GENERATOR symbol,
which can either hold an .its source file describing the image layout,
or, in the second case, a generator tool (script) to create such
a source file. This script gets passed the list of device tree files
from the CONFIG_OF_LIST variable.
A platform or board can define either of those in their defconfig file
to allow an easy building of such an image.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 Kconfig  | 17 +++++++++++++++++
 Makefile | 20 ++++++++++++++++++++
 2 files changed, 37 insertions(+)

Comments

Andrew Davis March 3, 2017, 4:58 p.m. UTC | #1
On 02/28/2017 08:25 PM, Andre Przywara wrote:
> Some platforms require more complex U-Boot images than we can easily
> generate via the mkimage command line, for instance to load additional
> image files.
> Introduce a CONFIG_SPL_FIT_SOURCE and CONFIG_SPL_FIT_GENERATOR symbol,
> which can either hold an .its source file describing the image layout,
> or, in the second case, a generator tool (script) to create such
> a source file. This script gets passed the list of device tree files
> from the CONFIG_OF_LIST variable.
> A platform or board can define either of those in their defconfig file
> to allow an easy building of such an image.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> ---

Acked-by: Andrew F. Davis <afd@ti.com>

>  Kconfig  | 17 +++++++++++++++++
>  Makefile | 20 ++++++++++++++++++++
>  2 files changed, 37 insertions(+)
> 
> diff --git a/Kconfig b/Kconfig
> index 81b4226..f3e4243 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -238,6 +238,23 @@ config SPL_FIT_IMAGE_POST_PROCESS
>  	  injected into the FIT creation (i.e. the blobs would have been pre-
>  	  processed before being added to the FIT image).
>  
> +config SPL_FIT_SOURCE
> +	string ".its source file for U-Boot FIT image"
> +	depends on SPL_FIT
> +	help
> +	  Specifies a (platform specific) FIT source file to generate the
> +	  U-Boot FIT image. This could specify further image to load and/or
> +	  execute.
> +
> +config SPL_FIT_GENERATOR
> +	string ".its file generator script for U-Boot FIT image"
> +	depends on SPL_FIT
> +	help
> +	  Specifies a (platform specific) script file to generate the FIT
> +	  source file used to build the U-Boot FIT image file. This gets
> +	  passed a list of supported device tree file stub names to
> +	  include in the generated image.
> +
>  endif # FIT
>  
>  config OF_BOARD_SETUP
> diff --git a/Makefile b/Makefile
> index 38b42da..e09b0d9 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -826,6 +826,10 @@ quiet_cmd_mkimage = MKIMAGE $@
>  cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
>  	$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
>  
> +quiet_cmd_mkfitimage = MKIMAGE $@
> +cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ \
> +	$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
> +
>  quiet_cmd_cat = CAT     $@
>  cmd_cat = cat $(filter-out $(PHONY), $^) > $@
>  
> @@ -945,6 +949,19 @@ quiet_cmd_cpp_cfg = CFG     $@
>  cmd_cpp_cfg = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \
>  	-DDO_DEPS_ONLY -D__ASSEMBLY__ -x assembler-with-cpp -P -dM -E -o $@ $<
>  
> +# Boards with more complex image requirments can provide an .its source file
> +# or a generator script
> +ifneq ($(CONFIG_SPL_FIT_SOURCE),"")
> +U_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
> +else
> +ifneq ($(CONFIG_SPL_FIT_GENERATOR),"")
> +U_BOOT_ITS := u-boot.its
> +$(U_BOOT_ITS): FORCE
> +	$(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
> +	$(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
> +endif
> +endif
> +
>  ifdef CONFIG_SPL_LOAD_FIT
>  MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
>  	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
> @@ -977,6 +994,9 @@ u-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
>  		$(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin dts/dt.dtb,u-boot.bin) FORCE
>  	$(call if_changed,mkimage)
>  
> +u-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE
> +	$(call if_changed,mkfitimage)
> +
>  u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
>  	$(call if_changed,mkimage)
>  
>
Simon Glass March 8, 2017, 9:01 p.m. UTC | #2
On 28 February 2017 at 19:25, Andre Przywara <andre.przywara@arm.com> wrote:
> Some platforms require more complex U-Boot images than we can easily
> generate via the mkimage command line, for instance to load additional
> image files.
> Introduce a CONFIG_SPL_FIT_SOURCE and CONFIG_SPL_FIT_GENERATOR symbol,
> which can either hold an .its source file describing the image layout,
> or, in the second case, a generator tool (script) to create such
> a source file. This script gets passed the list of device tree files
> from the CONFIG_OF_LIST variable.
> A platform or board can define either of those in their defconfig file
> to allow an easy building of such an image.
>
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> ---
>  Kconfig  | 17 +++++++++++++++++
>  Makefile | 20 ++++++++++++++++++++
>  2 files changed, 37 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>

But please can you mention this in the documentation at doc/uImage.FIT?
diff mbox

Patch

diff --git a/Kconfig b/Kconfig
index 81b4226..f3e4243 100644
--- a/Kconfig
+++ b/Kconfig
@@ -238,6 +238,23 @@  config SPL_FIT_IMAGE_POST_PROCESS
 	  injected into the FIT creation (i.e. the blobs would have been pre-
 	  processed before being added to the FIT image).
 
+config SPL_FIT_SOURCE
+	string ".its source file for U-Boot FIT image"
+	depends on SPL_FIT
+	help
+	  Specifies a (platform specific) FIT source file to generate the
+	  U-Boot FIT image. This could specify further image to load and/or
+	  execute.
+
+config SPL_FIT_GENERATOR
+	string ".its file generator script for U-Boot FIT image"
+	depends on SPL_FIT
+	help
+	  Specifies a (platform specific) script file to generate the FIT
+	  source file used to build the U-Boot FIT image file. This gets
+	  passed a list of supported device tree file stub names to
+	  include in the generated image.
+
 endif # FIT
 
 config OF_BOARD_SETUP
diff --git a/Makefile b/Makefile
index 38b42da..e09b0d9 100644
--- a/Makefile
+++ b/Makefile
@@ -826,6 +826,10 @@  quiet_cmd_mkimage = MKIMAGE $@
 cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
 	$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
 
+quiet_cmd_mkfitimage = MKIMAGE $@
+cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ \
+	$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
+
 quiet_cmd_cat = CAT     $@
 cmd_cat = cat $(filter-out $(PHONY), $^) > $@
 
@@ -945,6 +949,19 @@  quiet_cmd_cpp_cfg = CFG     $@
 cmd_cpp_cfg = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \
 	-DDO_DEPS_ONLY -D__ASSEMBLY__ -x assembler-with-cpp -P -dM -E -o $@ $<
 
+# Boards with more complex image requirments can provide an .its source file
+# or a generator script
+ifneq ($(CONFIG_SPL_FIT_SOURCE),"")
+U_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
+else
+ifneq ($(CONFIG_SPL_FIT_GENERATOR),"")
+U_BOOT_ITS := u-boot.its
+$(U_BOOT_ITS): FORCE
+	$(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
+	$(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
+endif
+endif
+
 ifdef CONFIG_SPL_LOAD_FIT
 MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
 	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
@@ -977,6 +994,9 @@  u-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
 		$(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin dts/dt.dtb,u-boot.bin) FORCE
 	$(call if_changed,mkimage)
 
+u-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE
+	$(call if_changed,mkfitimage)
+
 u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
 	$(call if_changed,mkimage)