[RFC] Expected behavior of the go command

Kumar, Udit u-kumar1 at ti.com
Fri Apr 25 14:43:06 CEST 2025


Hi Ahmad

On 4/25/2025 4:28 PM, Ahmad Fatoum wrote:
> Hi Udit,
>
> On 4/25/25 12:35, Kumar, Udit wrote:
>> On 4/25/2025 11:09 AM, Ahmad Fatoum wrote:
>>> Thinking about it, I am wondering whether U-Boot go is inherently broken,
>>> even for the jump-table use case, if caches are enabled:
>> Correct, this is what I think . Before jumping to new program go command
>> should make sure
>>
>> things are in correct order by cache flush. Kind of below
>>
>> diff --git a/cmd/boot.c b/cmd/boot.c
>> index 23496cafdf5..e6bb1d94a1c 100644
>> --- a/cmd/boot.c
>> +++ b/cmd/boot.c
>> @@ -18,6 +18,7 @@ __attribute__((weak))
>>   unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
>>                                   char *const argv[])
>>   {
>> +       flush_cache(...)
> yes, even with MMU left enabled, it looks like there should be an
> I-Cache invalidate and D-Cache flush/clean here[1].

Yes, correct . This should be extended with above

>
>> I see even ARM64, few board choose to over-ride default option (board/
>> xilinx/versal/board.c)
>>
>> do_go_exec does dcache_disable()
> I think __weak is a fundamental mistake and upstream boards abusing it
> to not have to fix things generally shows that.
>
>> Sorry I was not clear in previous message,
>>
>> Here OS take care of caching , irrespective of how boot is done through fit
> Yes, but with the assumption that MMU was disabled at start.
>
>> or kind of efi or other method.
> Interestingly, with EFI MMU should be left enabled. Linux even
> warns about the case that MMU was disabled when entering the stub.
>
> Cheers,
> Ahmad
>


More information about the U-Boot mailing list