x86: Support skipping relocation for EFI
authorSimon Glass <sjg@chromium.org>
Tue, 4 Aug 2015 18:33:44 +0000 (12:33 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 5 Aug 2015 14:44:05 +0000 (08:44 -0600)
When running as an EFI application we must skip relocation. Add support for
this in the x86 relocation code.

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

index 1a62142a1eec3cbef1d519606e3cee0e9d57a751..9e748d254fab884098f3503be215f8d13b32a6d7 100644 (file)
@@ -28,6 +28,8 @@ int copy_uboot_to_ram(void)
 {
        size_t len = (size_t)&__data_end - (size_t)&__text_start;
 
+       if (gd->flags & GD_FLG_SKIP_RELOC)
+               return 0;
        memcpy((void *)gd->relocaddr, (void *)&__text_start, len);
 
        return 0;
@@ -38,6 +40,8 @@ int clear_bss(void)
        ulong dst_addr = (ulong)&__bss_start + gd->reloc_off;
        size_t len = (size_t)&__bss_end - (size_t)&__bss_start;
 
+       if (gd->flags & GD_FLG_SKIP_RELOC)
+               return 0;
        memset((void *)dst_addr, 0x00, len);
 
        return 0;
@@ -58,6 +62,8 @@ int do_elf_reloc_fixups(void)
        /* The size of the region of u-boot that runs out of RAM. */
        uintptr_t size = (uintptr_t)&__bss_end - (uintptr_t)&__text_start;
 
+       if (gd->flags & GD_FLG_SKIP_RELOC)
+               return 0;
        if (re_src == re_end)
                panic("No relocation data");