[PATCH v3] mips: cmd: go: Flush cache before jumping to app/image

Stefan Roese sr at denx.de
Mon Apr 6 12:06:21 CEST 2020


Hi Daniel,

On 13.02.20 07:04, Stefan Roese 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 occurred (e.g. output corrupted etc).
> 
> This patch adds a cache flush for the complete SDRAM area to the go cmd
> before jumping to the entry point for the MIPS architecture. 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>
> Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
> Tested-by: Mauro Condarelli <mc5686 at mclink.it>
> Cc: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
> Cc: Mauro Condarelli <mc5686 at mclink.it>
> Cc: Weijie Gao <weijie.gao at mediatek.com>

Just checking. What is the status of this patch? I don't see it in your
"next" branch.

Thanks,
Stefan

> ---
> v3:
> - Use gd->ram_top instead of gd->bd->bi_memsize for memory size
>    calculation as suggested by Daniel
>    
> v2:
> - Moved cache flush into weak do_go_exec() to make this changed
>    mips only
> 
>   arch/mips/lib/Makefile |  1 +
>   arch/mips/lib/boot.c   | 23 +++++++++++++++++++++++
>   2 files changed, 24 insertions(+)
>   create mode 100644 arch/mips/lib/boot.c
> 
> diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
> index 589bc651f9..24a72d9c97 100644
> --- a/arch/mips/lib/Makefile
> +++ b/arch/mips/lib/Makefile
> @@ -11,5 +11,6 @@ obj-y	+= stack.o
>   obj-y	+= traps.o
>   
>   obj-$(CONFIG_CMD_BOOTM) += bootm.o
> +obj-$(CONFIG_CMD_GO) += boot.o
>   
>   lib-$(CONFIG_USE_PRIVATE_LIBGCC) += ashldi3.o ashrdi3.o lshrdi3.o
> diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
> new file mode 100644
> index 0000000000..db862f6379
> --- /dev/null
> +++ b/arch/mips/lib/boot.c
> @@ -0,0 +1,23 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2020 Stefan Roese <sr at denx.de>
> + */
> +
> +#include <common.h>
> +#include <command.h>
> +#include <cpu_func.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +unsigned long do_go_exec(ulong (*entry)(int, char * const []),
> +			 int argc, char * const argv[])
> +{
> +	/*
> +	 * 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->ram_top - gd->bd->bi_memstart);
> +
> +	return entry(argc, argv);
> +}
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list