x86: Move work-around out of cpu_jump_to_64bit_uboot()
authorSimon Glass <sjg@chromium.org>
Fri, 1 May 2020 03:21:41 +0000 (21:21 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 4 May 2020 07:28:28 +0000 (15:28 +0800)
At present this function copies U-Boot from the last 1MB of ROM. This is
not the right way to do it. Instead, the binman symbol should provide the
location.

But in any case the code should live in the caller,
spl_board_load_image(), so that the 64-bit jump function can be used
elsewhere. Move it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/i386/cpu.c
arch/x86/lib/spl.c

index facd4f58a69670acc0e98bcacc669d73c87c5f2b..435e50edada7d368613c00a92442bb36a63c534b 100644 (file)
@@ -614,16 +614,6 @@ int cpu_jump_to_64bit_uboot(ulong target)
 
        func = (func_t)ptr;
 
-       /*
-        * Copy U-Boot from ROM
-        * TODO(sjg@chromium.org): Figure out a way to get the text base
-        * correctly here, and in the device-tree binman definition.
-        *
-        * Also consider using FIT so we get the correct image length and
-        * parameters.
-        */
-       memcpy((char *)target, (char *)0xfff00000, 0x100000);
-
        /* Jump to U-Boot */
        func((ulong)pgtable, 0, (ulong)target);
 
index 90baec2a175e3de4100764606db64b368104ac8b..95a89c072d5e471f7a0b20f88517df630fc50106 100644 (file)
@@ -207,6 +207,19 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
        spl_image->os = IH_OS_U_BOOT;
        spl_image->name = "U-Boot";
 
+       if (!IS_ENABLED(CONFIG_SYS_COREBOOT)) {
+               /*
+                * Copy U-Boot from ROM
+                * TODO(sjg@chromium.org): Figure out a way to get the text base
+                * correctly here, and in the device-tree binman definition.
+                *
+                * Also consider using FIT so we get the correct image length
+                * and parameters.
+                */
+               memcpy((char *)spl_image->load_addr, (char *)0xfff00000,
+                      0x100000);
+       }
+
        debug("Loading to %lx\n", spl_image->load_addr);
 
        return 0;