Re: [PATCH 2/7] rockchip: mkimage: Print image information for all embedded images
Quentin Schulz via U-Boot <[email protected]> Thu, 6 Aug 2026 13:32:35 +0200
| Newsgroups | gmane.comp.boot-loaders.u-boot.general,gmane.comp.boot-loaders.u-boot |
|---|---|
| Message-ID | <[email protected]> |
Hi Alexey, On 7/13/26 12:02 PM, Alexey Charkov wrote: > From: Jonas Karlman <[email protected]> > > 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 <[email protected]> > Signed-off-by: Alexey Charkov <[email protected]> > --- > tools/rkcommon.c | 41 +++++++++++++++++++++++++++++++---------- > 1 file changed, 31 insertions(+), 10 deletions(-) > > diff --git a/tools/rkcommon.c b/tools/rkcommon.c > index 034896d57f80..fe0afc5629b3 100644 > --- a/tools/rkcommon.c > +++ b/tools/rkcommon.c > @@ -350,8 +350,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)); > 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); > @@ -505,6 +503,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; Scope can be reduced by moving this into the for-loop below. > + 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) > + printf("- Load address: 0x%x\n", val); Why? Isn't it always useful info? > + > + val = le32_to_cpu(hdr->images[i].flag); > + if (val) > + printf("- Flag: 0x%x\n", val); Considering we never set the flag member, I don't think this makes sense until we add code that sets it. I see you also print something in the next commit that U-Boot does not set, so just make the flag printing its own commit and justify as coming from binaries generated by boot_merger. > + } > +} > + > void rkcommon_print_header(const void *buf, struct image_tool_params *params) > { > struct header0_info header0; > @@ -521,8 +542,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); > > @@ -540,15 +560,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, Please keep printing "Image Type: ", from a quick glance most other image types also print that prefix (same remark for v2). > (image_type == IH_TYPE_RKSD) ? "SD/MMC" : "SPI"); > - } > > - printf("Init Data Size: %d bytes\n", init_size); > + printf("Init Data: %d @ 0x%x\n", init_size, > + le16_to_cpu(header0.init_offset) * RK_BLK_SIZE); > > - if (boot_size != RK_MAX_BOOT_SIZE) > - printf("Boot Data Size: %d bytes\n", boot_size); > + if (boot_size != RK_MAX_BOOT_SIZE) > + printf("Boot Data: %d @ 0x%x\n", boot_size, init_size + > + le16_to_cpu(header0.init_offset) * RK_BLK_SIZE); > + } Just split the logic for v1 into a function like you did for v2 so we're consistent. A single commit for moving both Do *NOT* reword/capitalize/rephrase/change what's printed for the v1. Even though we don't specify this is stable or part of an API, I'm sure some people out there are parsing mkimage -l's output so let's not break them unless we have to. For v2 I guess it's fine since it'll be heavily modified and I never was a fan of the Init Data and Boot Data (what does this actually mean....). Cheers, Quentin