mkimage: allow zynqmpbif to use a register initialization file
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@gmail.com> Signed-off-by: Michal Simek <michal.simek@amd.com> Link: https://lore.kernel.org/r/20260612150454.2194375-1-erich.e.hoover@gmail.com
This commit is contained in:
committed by
Michal Simek
parent
71c54b9769
commit
cc0d3f5460
@@ -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)
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user