[PATCH v3] mkimage: allow zynqmpbif to use a register initialization file

Michal Simek michal.simek at amd.com
Tue Jun 23 10:06:23 CEST 2026



On 6/12/26 17:04, Erich E. Hoover wrote:
> The ZynqMP Boot Image Format allows specifying the register
> initialization file with the "[init]" attribute.  Since this
> feature is already supported by the "zynqmpimage" backend, this
> commit leverages that existing capability to add support for the
> "[init]" attribute in the zynqmpbif backend:
> https://docs.amd.com/r/en-US/ug1283-bootgen-user-guide/init
> 
> This currently uses the same register initialization file format as
> zynqmpimage (ASCII text hex values with each line composed of a pair
> of register address and value), for example:
> ===
> 0xff003248 0x12345678
> ===
> It is not, yet, compatible with the format used by bootgen:
> https://docs.amd.com/r/en-US/ug1283-bootgen-user-guide/Initialization-Pairs-and-INT-File-Attribute
> 
> Use this feature, with other zynqmpbif options, like so:
> ===
> image : {
>       [init] reginit.int
>       [bootloader] fsbl.elf
>       [pmufw_image] pmufw.elf
>       [destination_cpu=a53-0, exception_level=el-3] bl31.elf
>       [destination_cpu=a53-0, exception_level=el-2, load=0x08000000,
> startup=0x08000000] u-boot.bin
> }
> ===
> 
> Signed-off-by: Erich E. Hoover <erich.e.hoover at gmail.com>
> ---
>   tools/zynqmpbif.c   | 12 ++++++++++++
>   tools/zynqmpimage.c |  4 ++--
>   tools/zynqmpimage.h |  2 ++
>   3 files changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/zynqmpbif.c b/tools/zynqmpbif.c
> index 82ce0ac1a52..50d76b03476 100644
> --- a/tools/zynqmpbif.c
> +++ b/tools/zynqmpbif.c
> @@ -191,6 +191,7 @@ static char *parse_partition_owner(char *line, struct bif_entry *bf)
>   }
>   
>   static const struct bif_flags bif_flags[] = {
> +	{ "init", BIF_FLAG_INIT },
>   	{ "fsbl_config", BIF_FLAG_FSBL_CONFIG },
>   	{ "trustzone", BIF_FLAG_TZ },
>   	{ "pmufw_image", BIF_FLAG_PMUFW_IMAGE },
> @@ -316,6 +317,15 @@ static int bif_add_pmufw(struct bif_entry *bf, const char *data, size_t len)
>   	return 0;
>   }
>   
> +static int bif_add_reginit(struct bif_entry *init)
> +{
> +	/* User can pass in text file with init list */
> +	if (strlen(init->filename))
> +		zynqmpimage_parse_initparams(bif_output.header, init->filename);
> +
> +	return 0;
> +}
> +
>   static int bif_add_part(struct bif_entry *bf, const char *data, size_t len)
>   {
>   	size_t parthdr_offset = 0;
> @@ -340,6 +350,8 @@ static int bif_add_part(struct bif_entry *bf, const char *data, size_t len)
>   
>   	if (bf->flags & (1ULL << BIF_FLAG_PMUFW_IMAGE))
>   		return bif_add_pmufw(bf, data, len);
> +	else if (bf->flags & (1ULL << BIF_FLAG_INIT))
> +		return bif_add_reginit(bf);
>   
>   	r = bif_add_blob(data, len, &bf->offset);
>   	if (r)
> diff --git a/tools/zynqmpimage.c b/tools/zynqmpimage.c
> index 4db9877127e..eb79c0696cc 100644
> --- a/tools/zynqmpimage.c
> +++ b/tools/zynqmpimage.c
> @@ -400,8 +400,8 @@ static void zynqmpimage_pmufw(struct zynqmp_header *zynqhdr,
>   	fclose(fpmu);
>   }
>   
> -static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr,
> -	const char *filename)
> +void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr,
> +				  const char *filename)
>   {
>   	FILE *fp;
>   	struct zynqmp_reginit reginit;
> diff --git a/tools/zynqmpimage.h b/tools/zynqmpimage.h
> index 7c47dc0763b..867fc5294a3 100644
> --- a/tools/zynqmpimage.h
> +++ b/tools/zynqmpimage.h
> @@ -142,6 +142,8 @@ struct zynqmp_header {
>   
>   void zynqmpimage_default_header(struct zynqmp_header *ptr);
>   void zynqmpimage_print_header(const void *ptr, struct image_tool_params *params);
> +void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr,
> +				  const char *filename);
>   
>   static inline struct image_header_table *
>   zynqmp_get_iht(const struct zynqmp_header *zynqhdr)

Applied.
M


More information about the U-Boot mailing list