|
@@ -164,24 +164,23 @@ static int calculate_relocation_address(void)
|
|
ulong text_start = (ulong)&__text_start;
|
|
ulong text_start = (ulong)&__text_start;
|
|
ulong bss_end = (ulong)&__bss_end;
|
|
ulong bss_end = (ulong)&__bss_end;
|
|
ulong dest_addr;
|
|
ulong dest_addr;
|
|
- ulong rel_offset;
|
|
|
|
-
|
|
|
|
- /* Calculate destination RAM Address and relocation offset */
|
|
|
|
- dest_addr = gd->ram_size;
|
|
|
|
- dest_addr -= CONFIG_SYS_STACK_SIZE;
|
|
|
|
- dest_addr -= (bss_end - text_start);
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Round destination address down to 16-byte boundary to keep
|
|
|
|
- * IDT and GDT 16-byte aligned
|
|
|
|
|
|
+ * NOTE: All destination address are rounded down to 16-byte
|
|
|
|
+ * boundary to satisfy various worst-case alignment
|
|
|
|
+ * requirements
|
|
*/
|
|
*/
|
|
- dest_addr &= ~15;
|
|
|
|
|
|
|
|
- rel_offset = dest_addr - text_start;
|
|
|
|
|
|
+ /* Stack is at top of available memory */
|
|
|
|
+ dest_addr = gd->ram_size;
|
|
|
|
+ gd->start_addr_sp = dest_addr;
|
|
|
|
|
|
- gd->start_addr_sp = gd->ram_size;
|
|
|
|
|
|
+ /* U-Boot is below the stack */
|
|
|
|
+ dest_addr -= CONFIG_SYS_STACK_SIZE;
|
|
|
|
+ dest_addr -= (bss_end - text_start);
|
|
|
|
+ dest_addr &= ~15;
|
|
gd->relocaddr = dest_addr;
|
|
gd->relocaddr = dest_addr;
|
|
- gd->reloc_off = rel_offset;
|
|
|
|
|
|
+ gd->reloc_off = (dest_addr - text_start);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|