Patchwork [U-Boot,v2,06/17] x86: Rework relocation calculations

login
register
mail settings
Submitter Graeme Russ
Date Jan. 4, 2012, 7:59 p.m.
Message ID <1325707195-3218-6-git-send-email-graeme.russ@gmail.com>
Download mbox | patch
Permalink /patch/134343/
State Awaiting Upstream
Delegated to: Graeme Russ
Headers show

Comments

Graeme Russ - Jan. 4, 2012, 7:59 p.m.
This commit introduces no functional changes - It simply re-arranges the
calculations so that adding to them in future commits will be cleaner

Signed-off-by: Graeme Russ <graeme.russ@gmail.com>
---
Changes for v2:
 - Fixed typo in title
 - Added commit message

 arch/x86/lib/board.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

--
1.7.5.2.317.g391b14
Simon Glass - Jan. 12, 2012, 4:49 a.m.
On Wed, Jan 4, 2012 at 11:59 AM, Graeme Russ <graeme.russ@gmail.com> wrote:
> This commit introduces no functional changes - It simply re-arranges the
> calculations so that adding to them in future commits will be cleaner
>
> Signed-off-by: Graeme Russ <graeme.russ@gmail.com>

Acked-by: Simon Glass <sjg@chromium.org>

> ---
> Changes for v2:
>  - Fixed typo in title
>  - Added commit message
>
>  arch/x86/lib/board.c |   23 +++++++++++------------
>  1 files changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
> index 382ada7..6f075b7 100644
> --- a/arch/x86/lib/board.c
> +++ b/arch/x86/lib/board.c
> @@ -164,24 +164,23 @@ static int calculate_relocation_address(void)
>        ulong text_start = (ulong)&__text_start;
>        ulong bss_end = (ulong)&__bss_end;
>        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->reloc_off = rel_offset;
> +       gd->reloc_off = (dest_addr - text_start);
>
>        return 0;
>  }
> --
> 1.7.5.2.317.g391b14
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

Patch

diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
index 382ada7..6f075b7 100644
--- a/arch/x86/lib/board.c
+++ b/arch/x86/lib/board.c
@@ -164,24 +164,23 @@  static int calculate_relocation_address(void)
 	ulong text_start = (ulong)&__text_start;
 	ulong bss_end = (ulong)&__bss_end;
 	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->reloc_off = rel_offset;
+	gd->reloc_off = (dest_addr - text_start);

 	return 0;
 }