[U-Boot-Users] [PATCH] Blackfin: implement go/boote wrappers

Mike Frysinger vapier at gentoo.org
Sat Apr 19 07:45:50 CEST 2008


Override the default go/boote handlers as we want to disable both data and
instruction cache before executing external programs (since Blackfin cache
handling requires a software handler in U-Boot which may be overwritten).

Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
 lib_blackfin/Makefile            |    2 +-
 lib_blackfin/{bootm.c => boot.c} |   20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletions(-)
 rename lib_blackfin/{bootm.c => boot.c} (80%)

diff --git a/lib_blackfin/Makefile b/lib_blackfin/Makefile
index 3617104..879c37f 100644
--- a/lib_blackfin/Makefile
+++ b/lib_blackfin/Makefile
@@ -37,7 +37,7 @@ SOBJS-y	+= memmove.o
 SOBJS-y	+= memset.o
 
 COBJS-y	+= board.o
-COBJS-y	+= bootm.o
+COBJS-y	+= boot.o
 COBJS-y	+= cache.o
 COBJS-y	+= muldi3.o
 COBJS-y	+= post.o
diff --git a/lib_blackfin/bootm.c b/lib_blackfin/boot.c
similarity index 80%
rename from lib_blackfin/bootm.c
rename to lib_blackfin/boot.c
index ef4b112..5ea4afb 100644
--- a/lib_blackfin/bootm.c
+++ b/lib_blackfin/boot.c
@@ -77,3 +77,23 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
 	if (images->autostart)
 		do_reset (cmdtp, flag, argc, argv);
 }
+
+unsigned long do_go_exec(ulong (*entry)(int, char *[]), int argc, char *argv[])
+{
+	int d = dcache_status();
+	int i = icache_status();
+
+	dcache_disable();
+	icache_disable();
+
+	int ret = entry(argc, argv);
+
+	if (d) dcache_enable();
+	if (i) icache_enable();
+
+	return ret;
+}
+unsigned long do_bootelf_exec(ulong (*entry)(int, char *[]), int argc, char *argv[])
+{
+	return do_go_exec(entry, argc, argv);
+}
-- 
1.5.5





More information about the U-Boot mailing list