Hi Quentin, On 2025-02-05 16:57, Quentin Schulz wrote: > Hi Jonas, > > On 1/29/25 11:36 PM, Jonas Karlman wrote: >> The v2 image format can embed up to 4 data files compared to the two >> init and boot data files using the older image format. >> >> Add support for displaying more of the image header information that >> exists in the v2 image format, e.g. image load address and flag. >> >> Example for v2 image format: >> >> > tools/mkimage -l rk3576_idblock_v1.09.107.img >> Rockchip Boot Image (v2) >> Image 1: 4096 @ 0x1000 >> - Load address: 0x3ffc0000 >> Image 2: 77824 @ 0x2000 >> - Load address: 0x3ff81000 >> Image 3: 262144 @ 0x15000 >> >> Example for older image format: >> >> > tools/mkimage -l u-boot-rockchip.bin >> Rockchip RK32 (SD/MMC) Boot Image >> Init Data: 20480 @ 0x800 >> Boot Data: 112640 @ 0x5800 >> >> Signed-off-by: Jonas Karlman <jo...@kwiboo.se> >> --- >> tools/rkcommon.c | 41 +++++++++++++++++++++++++++++++---------- >> 1 file changed, 31 insertions(+), 10 deletions(-) >> >> diff --git a/tools/rkcommon.c b/tools/rkcommon.c >> index de3fd2d3f3c2..ad239917d2bd 100644 >> --- a/tools/rkcommon.c >> +++ b/tools/rkcommon.c >> @@ -331,8 +331,6 @@ static void rkcommon_set_header0_v2(void *buf, struct >> image_tool_params *params) >> uint8_t *image_ptr = NULL; >> int i; >> >> - printf("Image Type: Rockchip %s boot image\n", >> - rkcommon_get_spl_hdr(params)); > > Not sure this change is related? It's also not replaced by anything if > I'm not mistaken, hence why I'm wondering why it's in this patch.
Following was meant as a replacement for this, in rkcommon_print_header_v2(): printf("Rockchip Boot Image (v2)\n"); The old printf() was incorrectly done at set_header, not in print_header, that is called after set_header or when you try to "mkimage -l <file>". > >> memset(buf, '\0', RK_INIT_OFFSET * RK_BLK_SIZE); >> hdr->magic = cpu_to_le32(RK_MAGIC_V2); >> hdr->boot_flag = cpu_to_le32(HASH_SHA256); >> @@ -486,6 +484,29 @@ int rkcommon_verify_header(unsigned char *buf, int size, >> return -ENOENT; >> } >> >> +static void rkcommon_print_header_v2(const struct header0_info_v2 *hdr) >> +{ >> + uint32_t val; >> + int i; >> + >> + printf("Rockchip Boot Image (v2)\n"); >> + >> + for (i = 0; i < le16_to_cpu(hdr->num_images); i++) { >> + printf("Image %u: %u @ 0x%x\n", >> + le32_to_cpu(hdr->images[i].counter), >> + le16_to_cpu(hdr->images[i].size) * RK_BLK_SIZE, >> + le16_to_cpu(hdr->images[i].offset) * RK_BLK_SIZE); >> + >> + val = le32_to_cpu(hdr->images[i].address); >> + if (val != 0xFFFFFFFF) > > Can you explain why this value is explicitly excluded? I know this is > the 4GiB boundary but why does it matter? It is used as the default value, unknown why, see: @address: load address (default as 0xFFFFFFFF) Can probably add a code comment here as well. > >> + printf("- Load address: 0x%x\n", val); >> + >> + val = le32_to_cpu(hdr->images[i].flag); >> + if (val) >> + printf("- Flag: 0x%x\n", val); > > Matter of taste but the dashes were bothering me when parsing the output > with my eyes, two spaces could work better. In any case, not a big deal > to me. Will see what I can do, initially I indented to align with the size @ offset and changed to the dash just before sending. > >> + } >> +} >> + >> void rkcommon_print_header(const void *buf, struct image_tool_params >> *params) >> { >> struct header0_info header0; >> @@ -502,8 +523,7 @@ void rkcommon_print_header(const void *buf, struct >> image_tool_params *params) >> return; >> } >> >> - init_size = le16_to_cpu(header0_v2.images[0].size) * >> RK_BLK_SIZE; >> - boot_size = le16_to_cpu(header0_v2.images[1].size) * >> RK_BLK_SIZE; >> + rkcommon_print_header_v2(&header0_v2); >> } else { >> ret = rkcommon_parse_header(buf, &header0, &spl_info); >> >> @@ -521,15 +541,16 @@ void rkcommon_print_header(const void *buf, struct >> image_tool_params *params) >> boot_size = le16_to_cpu(header0.init_boot_size) * RK_BLK_SIZE - >> init_size; >> >> - printf("Image Type: Rockchip %s (%s) boot image\n", >> - spl_info->spl_hdr, >> + printf("Rockchip %s (%s) Boot Image\n", spl_info->spl_hdr, >> (image_type == IH_TYPE_RKSD) ? "SD/MMC" : "SPI"); > > Please keep "Image Type:" this is what's used for other SoC vendors > also, I assume some tooling could be parsing it. Sure, will restore the "Image Type:" prefix here and for "Rockchip Boot Image (v2)" above. Should probably also adjust "tools: mkimage: Add Amlogic Boot Image type" [1] to do the same. [1] https://patchwork.ozlabs.org/project/uboot/patch/20250103215904.2590769-2-jo...@kwiboo.se/ Regards, Jonas > > Looking good otherwise, > Cheers, > Quentin