Hi Quentin, On 2025-02-05 17:43, Quentin Schulz wrote: > Hi Jonas, > > On 1/29/25 11:36 PM, Jonas Karlman wrote: >> The v2 image format can support up to 4 embedded images that can be >> loaded by the BootROM using the back-to-bootrom method. >> >> Currently two input files can be passed in using the datafile parameter, >> separated by a colon (":"). >> >> Extend the datafile parameter parsing to support up to 4 input files >> separated by a colon (":") for use with the v2 image format. >> >> Signed-off-by: Jonas Karlman <jo...@kwiboo.se> >> --- >> tools/rkcommon.c | 93 +++++++++++++++++++++++------------------------- >> 1 file changed, 44 insertions(+), 49 deletions(-) >> >> diff --git a/tools/rkcommon.c b/tools/rkcommon.c >> index 542aca931693..4ff48e81a636 100644 >> --- a/tools/rkcommon.c >> +++ b/tools/rkcommon.c >> @@ -148,17 +148,15 @@ static struct spl_info spl_infos[] = { >> /** >> * struct spl_params - spl params parsed in check_params() >> * >> - * @init_file: Init data file path >> - * @init_size: Aligned size of init data in bytes >> - * @boot_file: Boot data file path >> - * @boot_size: Aligned size of boot data in bytes >> + * @file: image file path >> + * @size: aligned size of image in bytes > > Not really matching reality though. Could make it easier maybe to have > an intermediary > > struct spl_params_image { > char *file; > uint32_t size; > }; > > and then have > > struct spl_params { > struct spl_params_image images[4]; > }; > > ?
Sound good, will use in v2. > >> */ >> >> struct spl_params { >> - char *init_file; >> - uint32_t init_size; >> - char *boot_file; >> - uint32_t boot_size; >> + struct { >> + char *file; >> + uint32_t size; >> + } images[4]; >> }; >> >> static struct spl_params spl_params = { 0 }; >> @@ -238,31 +236,32 @@ int rkcommon_check_params(struct image_tool_params >> *params) >> if (!rkcommon_get_spl_info(params->imagename)) >> goto err_spl_info; >> >> - spl_params.init_file = params->datafile; >> + spl_params.images[0].file = params->datafile; >> + for (i = 1; i < ARRAY_SIZE(spl_params.images); i++) { >> + spl_params.images[i].file = >> + strchr(spl_params.images[i - 1].file, ':'); >> + if (!spl_params.images[i].file) >> + break; >> >> - spl_params.boot_file = strchr(spl_params.init_file, ':'); >> - if (spl_params.boot_file) { >> - *spl_params.boot_file = '\0'; >> - spl_params.boot_file += 1; >> + *spl_params.images[i].file = '\0'; >> + spl_params.images[i].file += 1; >> } >> >> - size = rkcommon_get_aligned_filesize(params, spl_params.init_file); >> - if (size < 0) >> - return EXIT_FAILURE; >> - spl_params.init_size = size; >> + for (i = 0; i < ARRAY_SIZE(spl_params.images); i++) { >> + if (!spl_params.images[i].file) >> + break; >> >> - /* Boot file is optional, and only for back-to-bootrom functionality. */ >> - if (spl_params.boot_file) { >> - size = rkcommon_get_aligned_filesize(params, >> spl_params.boot_file); >> + size = rkcommon_get_aligned_filesize(params, >> + spl_params.images[i].file); >> if (size < 0) >> return EXIT_FAILURE; >> - spl_params.boot_size = size; >> + spl_params.images[i].size = size; >> } >> > > Can't we merge the two for-loops? Possible, suspect I kept it as two loops to avoid having to work on [i] and [i - 1] too much in same loop. Do you have any suggestion on how to merge the two for-loops to simplify this? Regards, Jonas > > The patch diff makes sense to me :) > > Cheers, > Quentin