diff options
author | Graeme Russ <graeme.russ@gmail.com> | 2009-02-24 21:14:56 +1100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2009-03-20 22:39:13 +0100 |
commit | e17ee157ca9ff0d4cc5841d06c4b70c1603df29c (patch) | |
tree | b86269e5e8d1b944250fdf4b98d3bed066ba7f92 /lib_i386/board.c | |
parent | 8c63d47651f77d9fb887cad433370b866eb0a193 (diff) | |
download | u-boot-e17ee157ca9ff0d4cc5841d06c4b70c1603df29c.zip u-boot-e17ee157ca9ff0d4cc5841d06c4b70c1603df29c.tar.gz u-boot-e17ee157ca9ff0d4cc5841d06c4b70c1603df29c.tar.bz2 |
Add basic relocation to i386 port
Signed-off-by: Graeme Russ <graeme.russ@gmail.com>
Diffstat (limited to 'lib_i386/board.c')
-rw-r--r-- | lib_i386/board.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib_i386/board.c b/lib_i386/board.c index 29683ee..e18dfa5 100644 --- a/lib_i386/board.c +++ b/lib_i386/board.c @@ -225,6 +225,9 @@ void start_i386boot (void) static bd_t bd_data; init_fnc_t **init_fnc_ptr; +#ifndef CONFIG_SKIP_RELOCATE_UBOOT + cmd_tbl_t *p; +#endif show_boot_progress(0x21); gd = &gd_data; @@ -238,6 +241,10 @@ void start_i386boot (void) gd->baudrate = CONFIG_BAUDRATE; +#ifndef CONFIG_SKIP_RELOCATE_UBOOT + /* Need to set relocation offset here for interrupt initialization */ + gd->reloc_off = CONFIG_SYS_BL_START_RAM - TEXT_BASE; +#endif for (init_fnc_ptr = init_sequence, i=0; *init_fnc_ptr; ++init_fnc_ptr, i++) { show_boot_progress(0xa130|i); @@ -247,6 +254,26 @@ void start_i386boot (void) } show_boot_progress(0x23); +#ifndef CONFIG_SKIP_RELOCATE_UBOOT + for (p = &__u_boot_cmd_start; p != &__u_boot_cmd_end; p++) { + ulong addr; + addr = (ulong) (p->cmd) + gd->reloc_off; + p->cmd = (int (*)(struct cmd_tbl_s *, int, int, char *[]))addr; + addr = (ulong)(p->name) + gd->reloc_off; + p->name = (char *)addr; + + if (p->usage != NULL) { + addr = (ulong)(p->usage) + gd->reloc_off; + p->usage = (char *)addr; + } + #ifdef CONFIG_SYS_LONGHELP + if (p->help != NULL) { + addr = (ulong)(p->help) + gd->reloc_off; + p->help = (char *)addr; + } + #endif + } +#endif /* configure available FLASH banks */ size = flash_init(); display_flash_config(size); |