Hi Quentin,

On 2025-02-05 17:48, Quentin Schulz wrote:
> Hi Jonas,
> 
> On 2/5/25 5:42 PM, Jonas Karlman wrote:
>> Hi Quentin,
>>
>> On 2025-02-05 17:04, Quentin Schulz wrote:
>>> Hi Jonas,
>>>
>>> On 1/29/25 11:36 PM, Jonas Karlman wrote:
>>>> The v2 image format embeds boot0 and boot1 parameters, the vendor tool
>>>> boot_merger may write these parameters based on the rkboot miniall.ini
>>>> files.
>>>>
>>>> E.g. a RK3576 boot image may contain a boot1 parameter that signals
>>>> BootROM or vendor blobs to use 1 GHz instead of the regular 24 MHz rate
>>>> for the high precision timer.
>>>>
>>>> Add support for printing boot0 and boot1 parameters, e.g.:
>>>>
>>>>     > tools/mkimage -l rk3576_idblock_v1.09.107.img
>>>>     Rockchip Boot Image (v2)
>>>>     Boot1 2: 0x100
>>>>     Image 1: 4096 @ 0x1000
>>>>     - Load address: 0x3ffc0000
>>>>     Image 2: 77824 @ 0x2000
>>>>     - Load address: 0x3ff81000
>>>>     Image 3: 262144 @ 0x15000
>>>>
>>>> Signed-off-by: Jonas Karlman <jo...@kwiboo.se>
>>>> ---
>>>>    tools/rkcommon.c | 18 +++++++++++++++++-
>>>>    1 file changed, 17 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/tools/rkcommon.c b/tools/rkcommon.c
>>>> index ad239917d2bd..324820717663 100644
>>>> --- a/tools/rkcommon.c
>>>> +++ b/tools/rkcommon.c
>>>> @@ -62,6 +62,8 @@ struct image_entry {
>>>>     * @boot_flag:  [3:0] hash type (0:none, 1:sha256, 2:sha512)
>>>>     * @images:     images
>>>>     * @hash:       hash or signature for header info
>>>> + *
>>>> + * Other fields are not used by U-Boot
>>>>     */
>>>>    struct header0_info_v2 {
>>>>            uint32_t magic;
>>>> @@ -69,7 +71,9 @@ struct header0_info_v2 {
>>>>            uint16_t size;
>>>>            uint16_t num_images;
>>>>            uint32_t boot_flag;
>>>> -  uint8_t reserved1[104];
>>>> +  uint8_t reserved1[32];
>>>> +  uint32_t boot0_param[10];
>>>> +  uint32_t boot1_param[8];
>>>>            struct image_entry images[4];
>>>>            uint8_t reserved2[1064];
>>>>            uint8_t hash[512];
>>>> @@ -491,6 +495,18 @@ static void rkcommon_print_header_v2(const struct 
>>>> header0_info_v2 *hdr)
>>>>    
>>>>            printf("Rockchip Boot Image (v2)\n");
>>>>    
>>>> +  for (i = 0; i < ARRAY_SIZE(hdr->boot0_param); i++) {
>>>> +          val = le32_to_cpu(hdr->boot0_param[i]);
>>>> +          if (val)
>>>> +                  printf("Boot0 %d: 0x%x\n", i, val);
>>>> +  }
>>>> +
>>>
>>> This seems to indicate that there are 10 4B params for boot0, is that
>>> correct? If that's the case I would at least add "param" before %d, the
>>> output looked odd to me at first glance.
>>
>> That should be correct and is what boot_merger can embed based on the
>> [BOOT0_PARAM] section and WORD_n (n=0-9) values from MINIALL.ini.
>>
>> The only reason I skipped "param" was because I thought it looked
>> prettier to align the "BootX %d" and "Image %d" in the output, can
>> change to include "param" :-)
>>
> 
> Hehe, could have seen:
> Boot1:
> - param2: 0x100
> - param3: 0x500
> 
> as well. I am no UX expert so whatever works best for you :)

I will see what I can do for v2.

> 
>>>
>>> If they aren't guaranteed to be individual 4B params, what about just
>>> printing the whole boot0_param in hex format?
>>
>> There is only very few WORD_ values in use in linux-6.1-stan-rkr5 rkbin
>> MINIALL.ini files. So I opted to only print out the params that have a
>> value different from the default 0x0.
>>
>>>
>>>> +  for (i = 0; i < ARRAY_SIZE(hdr->boot1_param); i++) {
>>>> +          val = le32_to_cpu(hdr->boot1_param[i]);
>>>> +          if (val)
>>>> +                  printf("Boot1 %d: 0x%x\n", i, val);
>>>> +  }
>>>> +
>>>
>>> Same remark as for boot0 params instead with 8 4B params for boot1.
>>
>> Correct, boot_merger embed WORD_n (n=0-7) from the [BOOT1_PARAM] section
>> and also only very few are in use.
>>
>> My main test to validate this was to add different values to WORD_n
>> under BOOT0/BOOT1_PARAM and then compare with the generated idblock.img.
>>
> 
> Cool. Do you know if there's some public sources with appropriate 
> licensing for boot_merger for RK35xx? There used to be code in the 
> U-Boot fork from Rockchip but they stopped updating boot_merger source a 
> few years ago last time I checked.

Unfortunately I do not, only started looking into these extra parameters
while experimenting with RK3576 because I found following in
RK3576MINIALL.ini:

  [BOOT1_PARAM]
  WORD_2=0x100

Turned out that this value is used to signal that BootROM, TPL or SPL
should use 1 GHz rate for the high-precision timer. This did not work
well with mainline U-Boot because mainline expect a hard-coded value of
24 MHz or you start seeing a lot of quick timeouts.

Including them in output at least meant is was not fully a waste of time.

Regards,
Jonas

> 
> Could be nice to have it in U-Boot too :)
> 
> Reviewed-by: Quentin Schulz <quentin.sch...@cherry.de>
> 
> Thanks!
> Quentin

Reply via email to