[U-Boot] [PATCH v2] cmd_boot: cleanup for 'go' command

Kuo-Jung Su dantesu at gmail.com
Mon Apr 29 04:53:08 CEST 2013


From: Kuo-Jung Su <dantesu at faraday-tech.com>

With MMU/D-Cache enabled, data might be retained at d-cache
rather than at DRAM when we execute 'go' command, and some
of the bare-metal softwares would always invalidate the entire
data cache at start-up, and then leads to a data lost issue.
Furthermore, the U-Boot not only relocates itself but also
updates symbol table at start-up, which means the i-cache
might also be dirty, so it would be better to invalidates the
i-cache alone with d-cache flush.

This patch is designed to fix the issues above.
It has been verified at ARM based systems, and should also work
at other platforms.

Signed-off-by: Kuo-Jung Su <dantesu at faraday-tech.com>
CC: Wolfgang Denk <wd at denx.de>
---
Changes for v2:
   - Update the commit log to state that i-cache is also invalidated.
   - DO NOT disable interrupts.

 common/cmd_boot.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/common/cmd_boot.c b/common/cmd_boot.c
index d3836fd..9e66364 100644
--- a/common/cmd_boot.c
+++ b/common/cmd_boot.c
@@ -50,6 +50,13 @@ static int do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

 	printf ("## Starting application at 0x%08lX ...\n", addr);

+#ifndef CONFIG_SYS_DCACHE_OFF
+	flush_dcache_all();
+#endif
+#ifndef CONFIG_SYS_ICACHE_OFF
+	invalidate_icache_all();
+#endif
+
 	/*
 	 * pass address parameter as argv[0] (aka command name),
 	 * and all remaining args
--
1.7.9.5



More information about the U-Boot mailing list