[U-Boot] [PATCH v4 3/5] api: bootelf: go: flush cache before starting
Emmanuel Vadot
manu at bidouilliste.com
Tue Jan 31 12:17:06 CET 2017
From: Warner Losh <imp at freebsd.org>
Some application might load some code at location that contain stale
cache entries. Before running a elf or raw binary, flush the caches
if they are enabled.
Reviewed-by: Tom Rini <trini at konsulko.com>
Signed-off-by: Emmanuel Vadot <manu at bidouilliste.com>
---
api/api.c | 5 +++++
cmd/boot.c | 4 ++++
cmd/elf.c | 5 +++++
3 files changed, 14 insertions(+)
diff --git a/api/api.c b/api/api.c
index c368511704..88b5df77c0 100644
--- a/api/api.c
+++ b/api/api.c
@@ -290,6 +290,11 @@ static int API_dev_close(va_list ap)
if (!err)
di->state = DEV_STA_CLOSED;
+ if (dcache_status())
+ flush_dcache_all();
+ if (icache_status())
+ invalidate_icache_all();
+
return err;
}
diff --git a/cmd/boot.c b/cmd/boot.c
index 72f2cf362d..b66ae67fcb 100644
--- a/cmd/boot.c
+++ b/cmd/boot.c
@@ -19,6 +19,10 @@ __attribute__((weak))
unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
char * const argv[])
{
+ if (dcache_status())
+ flush_dcache_all();
+ if (icache_status())
+ invalidate_icache_all();
return entry (argc, argv);
}
diff --git a/cmd/elf.c b/cmd/elf.c
index e4c6535111..e98a798203 100644
--- a/cmd/elf.c
+++ b/cmd/elf.c
@@ -109,6 +109,11 @@ static unsigned long do_bootelf_exec(ulong (*entry)(int, char * const[]),
{
unsigned long ret;
+ if (dcache_status())
+ flush_dcache_all();
+ if (icache_status())
+ invalidate_icache_all();
+
/*
* pass address parameter as argv[0] (aka command name),
* and all remaining args
--
2.11.0
More information about the U-Boot
mailing list