[PATCH] cmd: go: Flush cache before jumping to app/image
Mauro Condarelli
mc5686 at mclink.it
Wed Feb 12 14:09:40 CET 2020
Hi Daniel,
Hi Stefan,
I'll test this ASAP, but, in the meantime, please have a look at the
strange (and perhaps related) code in arch/mips/mach-mtmips/cpu.c
Regards
Mauro
On 2/12/20 2:00 PM, Daniel Schwierzeck wrote:
> On Wed, Feb 12, 2020 at 1:21 PM Stefan Roese <sr at denx.de> wrote:
>> It has been noticed on MT7628/88 platforms, that booting the RAM image
>> does not work reliably. Sometimes it works and sometimes not. Debugging
>> showed that this "might" be a cache related issue as very strange
>> errors occured (output corrupted etc).
>>
>> This patch adds a cache flush for the complete SDRAM area to the go cmd
>> before jumping to the entry point. The complete area is flushed as we
>> don't know at this point, how big the area of the "application" really
>> is.
>>
>> Signed-off-by: Stefan Roese <sr at denx.de>
>> Cc: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
>> Cc: Mauro Condarelli <mc5686 at mclink.it>
>> Cc: Weijie Gao <weijie.gao at mediatek.com>
>> ---
>> cmd/boot.c | 10 ++++++++++
>> 1 file changed, 10 insertions(+)
>>
>> diff --git a/cmd/boot.c b/cmd/boot.c
>> index 9150fce80b..968522face 100644
>> --- a/cmd/boot.c
>> +++ b/cmd/boot.c
>> @@ -9,10 +9,13 @@
>> */
>> #include <common.h>
>> #include <command.h>
>> +#include <cpu_func.h>
>> #include <net.h>
>>
>> #ifdef CONFIG_CMD_GO
>>
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> /* Allow ports to override the default behavior */
>> __attribute__((weak))
>> unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
>> @@ -33,6 +36,13 @@ static int do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>
>> printf ("## Starting application at 0x%08lX ...\n", addr);
>>
>> + /*
>> + * Flush cache before jumping to application. Let's flush the
>> + * whole SDRAM area, since we don't know the size of the image
>> + * that was loaded.
>> + */
>> + flush_cache(gd->bd->bi_memstart, gd->bd->bi_memsize);
>> +
>> /*
>> * pass address parameter as argv[0] (aka command name),
>> * and all remaining args
>> --
>> 2.25.0
>>
> I think that's not right for all architectures or cache-coherent
> systems. It would be better
> to implement do_go_exec() in arch/mips/libs/bootm.c because this function is
> already annotated as weak.
>
More information about the U-Boot
mailing list