]> git.sur5r.net Git - u-boot/commitdiff
board_f: fix calculation of reloc_off
authorLothar Waßmann <LW@KARO-electronics.de>
Thu, 8 Jun 2017 08:18:25 +0000 (10:18 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 12 Jun 2017 12:38:41 +0000 (08:38 -0400)
relocate_code() calculates the relocation offset wrt. the symbol
__image_copy_start which happens to have the same value as
CONFIG_TEXT_BASE on most systems.
When creating an i.MX boot image with an integrated IVT it is
convenient to have CONFIG_TEXT_BASE point to the start of the IVT
that is prepended to the actual code. Thus CONFIG_TEXT_BASE will
differ from __image_copy_start, while the calculation
'gd->relocaddr - __image_copy_start' still gives the right relocation
offset.

Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
common/board_f.c

index f5054985d012ea1295d4c6166d727cae173f0637..8bf9acca48b4e9eaf7e8172c17558b48096cfe79 100644 (file)
@@ -644,13 +644,16 @@ static int setup_reloc(void)
        }
 
 #ifdef CONFIG_SYS_TEXT_BASE
-       gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE;
-#ifdef CONFIG_M68K
+#ifdef ARM
+       gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start;
+#elif defined(CONFIG_M68K)
        /*
         * On all ColdFire arch cpu, monitor code starts always
         * just after the default vector table location, so at 0x400
         */
        gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + 0x400);
+#else
+       gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE;
 #endif
 #endif
        memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));