bootm: qnx: Disable data cache before booting QNX image
authorEmmanuel Vadot <manu@bidouilliste.com>
Thu, 19 Jan 2017 09:23:56 +0000 (10:23 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 20 Jan 2017 20:38:05 +0000 (15:38 -0500)
Instead of disabling the data cache in the bootelf command, disabling
it in the do_bootm_qnxelf function.
Some ELF binary might want the cache enabled.

Signed-off-by: Emmanuel Vadot <manu@bidouilliste.com>
cmd/elf.c
common/bootm_os.c

index 5190cc6c0fe0a11fba99985681f08526bf449606..e4c65351118a5f5144e7b8debee93ea7dc21592a 100644 (file)
--- a/cmd/elf.c
+++ b/cmd/elf.c
@@ -109,23 +109,12 @@ static unsigned long do_bootelf_exec(ulong (*entry)(int, char * const[]),
 {
        unsigned long ret;
 
-       /*
-        * QNX images require the data cache is disabled.
-        * Data cache is already flushed, so just turn it off.
-        */
-       int dcache = dcache_status();
-       if (dcache)
-               dcache_disable();
-
        /*
         * pass address parameter as argv[0] (aka command name),
         * and all remaining args
         */
        ret = entry(argc, argv);
 
-       if (dcache)
-               dcache_enable();
-
        return ret;
 }
 
index e3f5a4641207e41a387cbf941fb1d23afde0fdc0..6e463c317e84356e1c4b0cab9336f3b35abd9a8a 100644 (file)
@@ -353,6 +353,7 @@ static int do_bootm_qnxelf(int flag, int argc, char * const argv[],
 {
        char *local_args[2];
        char str[16];
+       int dcache;
 
        if (flag != BOOTM_STATE_OS_GO)
                return 0;
@@ -367,8 +368,19 @@ static int do_bootm_qnxelf(int flag, int argc, char * const argv[],
        sprintf(str, "%lx", images->ep); /* write entry-point into string */
        local_args[0] = argv[0];
        local_args[1] = str;    /* and provide it via the arguments */
+
+       /*
+        * QNX images require the data cache is disabled.
+        */
+       dcache = dcache_status();
+       if (dcache)
+               dcache_disable();
+
        do_bootelf(NULL, 0, 2, local_args);
 
+       if (dcache)
+               dcache_enable();
+
        return 1;
 }
 #endif