generic_board: reduce the redundancy of gd_t struct members

This commit refactors common/board_f.c and common/board_r.c
in order to delete the dest_addr and dest_addr_sp from
gd_t struct.

As mentioned as follows in include/asm-generic/global_data.h,

  /* TODO: is this the same as relocaddr, or something else? */
  unsigned long dest_addr;        /* Post-relocation address of U-Boot */

dest_addr is the same as relocaddr.
Likewise, dest_addr_sp is the same as start_addr_sp.

It seemed dest_addr/dest_addr_sp was used only as a scratch variable
to calculate relocaddr/start_addr_sp, respectively.

With a little refactoring, we can delete dest_addr and dest_addr_sp.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Cc: Simon Glass <sjg@chromium.org>
master
Masahiro Yamada 11 years ago committed by Tom Rini
parent 12d7a47420
commit a0ba279ac6
  1. 98
      common/board_f.c
  2. 12
      common/board_r.c
  3. 3
      include/asm-generic/global_data.h

@ -421,19 +421,18 @@ static int setup_dest_addr(void)
#endif #endif
gd->ram_top += get_effective_memsize(); gd->ram_top += get_effective_memsize();
gd->ram_top = board_get_usable_ram_top(gd->mon_len); gd->ram_top = board_get_usable_ram_top(gd->mon_len);
gd->dest_addr = gd->ram_top; gd->relocaddr = gd->ram_top;
debug("Ram top: %08lX\n", (ulong)gd->ram_top); debug("Ram top: %08lX\n", (ulong)gd->ram_top);
#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500)) #if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
/* /*
* We need to make sure the location we intend to put secondary core * We need to make sure the location we intend to put secondary core
* boot code is reserved and not used by any part of u-boot * boot code is reserved and not used by any part of u-boot
*/ */
if (gd->dest_addr > determine_mp_bootpg(NULL)) { if (gd->relocaddr > determine_mp_bootpg(NULL)) {
gd->dest_addr = determine_mp_bootpg(NULL); gd->relocaddr = determine_mp_bootpg(NULL);
debug("Reserving MP boot page to %08lx\n", gd->dest_addr); debug("Reserving MP boot page to %08lx\n", gd->relocaddr);
} }
#endif #endif
gd->dest_addr_sp = gd->dest_addr;
return 0; return 0;
} }
@ -441,9 +440,9 @@ static int setup_dest_addr(void)
static int reserve_logbuffer(void) static int reserve_logbuffer(void)
{ {
/* reserve kernel log buffer */ /* reserve kernel log buffer */
gd->dest_addr -= LOGBUFF_RESERVE; gd->relocaddr -= LOGBUFF_RESERVE;
debug("Reserving %dk for kernel logbuffer at %08lx\n", LOGBUFF_LEN, debug("Reserving %dk for kernel logbuffer at %08lx\n", LOGBUFF_LEN,
gd->dest_addr); gd->relocaddr);
return 0; return 0;
} }
#endif #endif
@ -455,9 +454,9 @@ static int reserve_pram(void)
ulong reg; ulong reg;
reg = getenv_ulong("pram", 10, CONFIG_PRAM); reg = getenv_ulong("pram", 10, CONFIG_PRAM);
gd->dest_addr -= (reg << 10); /* size is in kB */ gd->relocaddr -= (reg << 10); /* size is in kB */
debug("Reserving %ldk for protected RAM at %08lx\n", reg, debug("Reserving %ldk for protected RAM at %08lx\n", reg,
gd->dest_addr); gd->relocaddr);
return 0; return 0;
} }
#endif /* CONFIG_PRAM */ #endif /* CONFIG_PRAM */
@ -465,7 +464,7 @@ static int reserve_pram(void)
/* Round memory pointer down to next 4 kB limit */ /* Round memory pointer down to next 4 kB limit */
static int reserve_round_4k(void) static int reserve_round_4k(void)
{ {
gd->dest_addr &= ~(4096 - 1); gd->relocaddr &= ~(4096 - 1);
return 0; return 0;
} }
@ -475,12 +474,12 @@ static int reserve_mmu(void)
{ {
/* reserve TLB table */ /* reserve TLB table */
gd->arch.tlb_size = 4096 * 4; gd->arch.tlb_size = 4096 * 4;
gd->dest_addr -= gd->arch.tlb_size; gd->relocaddr -= gd->arch.tlb_size;
/* round down to next 64 kB limit */ /* round down to next 64 kB limit */
gd->dest_addr &= ~(0x10000 - 1); gd->relocaddr &= ~(0x10000 - 1);
gd->arch.tlb_addr = gd->dest_addr; gd->arch.tlb_addr = gd->relocaddr;
debug("TLB table from %08lx to %08lx\n", gd->arch.tlb_addr, debug("TLB table from %08lx to %08lx\n", gd->arch.tlb_addr,
gd->arch.tlb_addr + gd->arch.tlb_size); gd->arch.tlb_addr + gd->arch.tlb_size);
return 0; return 0;
@ -494,8 +493,8 @@ static int reserve_lcd(void)
gd->fb_base = CONFIG_FB_ADDR; gd->fb_base = CONFIG_FB_ADDR;
#else #else
/* reserve memory for LCD display (always full pages) */ /* reserve memory for LCD display (always full pages) */
gd->dest_addr = lcd_setmem(gd->dest_addr); gd->relocaddr = lcd_setmem(gd->relocaddr);
gd->fb_base = gd->dest_addr; gd->fb_base = gd->relocaddr;
#endif /* CONFIG_FB_ADDR */ #endif /* CONFIG_FB_ADDR */
return 0; return 0;
} }
@ -506,8 +505,8 @@ static int reserve_lcd(void)
static int reserve_video(void) static int reserve_video(void)
{ {
/* reserve memory for video display (always full pages) */ /* reserve memory for video display (always full pages) */
gd->dest_addr = video_setmem(gd->dest_addr); gd->relocaddr = video_setmem(gd->relocaddr);
gd->fb_base = gd->dest_addr; gd->fb_base = gd->relocaddr;
return 0; return 0;
} }
@ -519,15 +518,18 @@ static int reserve_uboot(void)
* reserve memory for U-Boot code, data & bss * reserve memory for U-Boot code, data & bss
* round down to next 4 kB limit * round down to next 4 kB limit
*/ */
gd->dest_addr -= gd->mon_len; gd->relocaddr -= gd->mon_len;
gd->dest_addr &= ~(4096 - 1); gd->relocaddr &= ~(4096 - 1);
#ifdef CONFIG_E500 #ifdef CONFIG_E500
/* round down to next 64 kB limit so that IVPR stays aligned */ /* round down to next 64 kB limit so that IVPR stays aligned */
gd->dest_addr &= ~(65536 - 1); gd->relocaddr &= ~(65536 - 1);
#endif #endif
debug("Reserving %ldk for U-Boot at: %08lx\n", gd->mon_len >> 10, debug("Reserving %ldk for U-Boot at: %08lx\n", gd->mon_len >> 10,
gd->dest_addr); gd->relocaddr);
gd->start_addr_sp = gd->relocaddr;
return 0; return 0;
} }
@ -535,20 +537,20 @@ static int reserve_uboot(void)
/* reserve memory for malloc() area */ /* reserve memory for malloc() area */
static int reserve_malloc(void) static int reserve_malloc(void)
{ {
gd->dest_addr_sp = gd->dest_addr - TOTAL_MALLOC_LEN; gd->start_addr_sp = gd->start_addr_sp - TOTAL_MALLOC_LEN;
debug("Reserving %dk for malloc() at: %08lx\n", debug("Reserving %dk for malloc() at: %08lx\n",
TOTAL_MALLOC_LEN >> 10, gd->dest_addr_sp); TOTAL_MALLOC_LEN >> 10, gd->start_addr_sp);
return 0; return 0;
} }
/* (permanently) allocate a Board Info struct */ /* (permanently) allocate a Board Info struct */
static int reserve_board(void) static int reserve_board(void)
{ {
gd->dest_addr_sp -= sizeof(bd_t); gd->start_addr_sp -= sizeof(bd_t);
gd->bd = (bd_t *)map_sysmem(gd->dest_addr_sp, sizeof(bd_t)); gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t));
memset(gd->bd, '\0', sizeof(bd_t)); memset(gd->bd, '\0', sizeof(bd_t));
debug("Reserving %zu Bytes for Board Info at: %08lx\n", debug("Reserving %zu Bytes for Board Info at: %08lx\n",
sizeof(bd_t), gd->dest_addr_sp); sizeof(bd_t), gd->start_addr_sp);
return 0; return 0;
} }
#endif #endif
@ -563,10 +565,10 @@ static int setup_machine(void)
static int reserve_global_data(void) static int reserve_global_data(void)
{ {
gd->dest_addr_sp -= sizeof(gd_t); gd->start_addr_sp -= sizeof(gd_t);
gd->new_gd = (gd_t *)map_sysmem(gd->dest_addr_sp, sizeof(gd_t)); gd->new_gd = (gd_t *)map_sysmem(gd->start_addr_sp, sizeof(gd_t));
debug("Reserving %zu Bytes for Global Data at: %08lx\n", debug("Reserving %zu Bytes for Global Data at: %08lx\n",
sizeof(gd_t), gd->dest_addr_sp); sizeof(gd_t), gd->start_addr_sp);
return 0; return 0;
} }
@ -580,10 +582,10 @@ static int reserve_fdt(void)
if (gd->fdt_blob) { if (gd->fdt_blob) {
gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) + 0x1000, 32); gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) + 0x1000, 32);
gd->dest_addr_sp -= gd->fdt_size; gd->start_addr_sp -= gd->fdt_size;
gd->new_fdt = map_sysmem(gd->dest_addr_sp, gd->fdt_size); gd->new_fdt = map_sysmem(gd->start_addr_sp, gd->fdt_size);
debug("Reserving %lu Bytes for FDT at: %08lx\n", debug("Reserving %lu Bytes for FDT at: %08lx\n",
gd->fdt_size, gd->dest_addr_sp); gd->fdt_size, gd->start_addr_sp);
} }
return 0; return 0;
@ -593,8 +595,8 @@ static int reserve_stacks(void)
{ {
#ifdef CONFIG_SPL_BUILD #ifdef CONFIG_SPL_BUILD
# ifdef CONFIG_ARM # ifdef CONFIG_ARM
gd->dest_addr_sp -= 128; /* leave 32 words for abort-stack */ gd->start_addr_sp -= 128; /* leave 32 words for abort-stack */
gd->irq_sp = gd->dest_addr_sp; gd->irq_sp = gd->start_addr_sp;
# endif # endif
#else #else
# ifdef CONFIG_PPC # ifdef CONFIG_PPC
@ -602,9 +604,9 @@ static int reserve_stacks(void)
# endif # endif
/* setup stack pointer for exceptions */ /* setup stack pointer for exceptions */
gd->dest_addr_sp -= 16; gd->start_addr_sp -= 16;
gd->dest_addr_sp &= ~0xf; gd->start_addr_sp &= ~0xf;
gd->irq_sp = gd->dest_addr_sp; gd->irq_sp = gd->start_addr_sp;
/* /*
* Handle architecture-specific things here * Handle architecture-specific things here
@ -613,18 +615,18 @@ static int reserve_stacks(void)
*/ */
# ifdef CONFIG_ARM # ifdef CONFIG_ARM
# ifdef CONFIG_USE_IRQ # ifdef CONFIG_USE_IRQ
gd->dest_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ); gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ);
debug("Reserving %zu Bytes for IRQ stack at: %08lx\n", debug("Reserving %zu Bytes for IRQ stack at: %08lx\n",
CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->dest_addr_sp); CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->start_addr_sp);
/* 8-byte alignment for ARM ABI compliance */ /* 8-byte alignment for ARM ABI compliance */
gd->dest_addr_sp &= ~0x07; gd->start_addr_sp &= ~0x07;
# endif # endif
/* leave 3 words for abort-stack, plus 1 for alignment */ /* leave 3 words for abort-stack, plus 1 for alignment */
gd->dest_addr_sp -= 16; gd->start_addr_sp -= 16;
# elif defined(CONFIG_PPC) # elif defined(CONFIG_PPC)
/* Clear initial stack frame */ /* Clear initial stack frame */
s = (ulong *) gd->dest_addr_sp; s = (ulong *) gd->start_addr_sp;
*s = 0; /* Terminate back chain */ *s = 0; /* Terminate back chain */
*++s = 0; /* NULL return address */ *++s = 0; /* NULL return address */
# endif /* Architecture specific code */ # endif /* Architecture specific code */
@ -635,7 +637,7 @@ static int reserve_stacks(void)
static int display_new_sp(void) static int display_new_sp(void)
{ {
debug("New Stack Pointer is: %08lx\n", gd->dest_addr_sp); debug("New Stack Pointer is: %08lx\n", gd->start_addr_sp);
return 0; return 0;
} }
@ -757,15 +759,13 @@ static int reloc_fdt(void)
static int setup_reloc(void) static int setup_reloc(void)
{ {
gd->relocaddr = gd->dest_addr; gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE;
gd->start_addr_sp = gd->dest_addr_sp;
gd->reloc_off = gd->dest_addr - CONFIG_SYS_TEXT_BASE;
memcpy(gd->new_gd, (char *)gd, sizeof(gd_t)); memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));
debug("Relocation Offset is: %08lx\n", gd->reloc_off); debug("Relocation Offset is: %08lx\n", gd->reloc_off);
debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n", debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n",
gd->dest_addr, (ulong)map_to_sysmem(gd->new_gd), gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd),
gd->dest_addr_sp); gd->start_addr_sp);
return 0; return 0;
} }
@ -794,7 +794,7 @@ static int jump_to_copy(void)
#elif defined(CONFIG_SANDBOX) #elif defined(CONFIG_SANDBOX)
board_init_r(gd->new_gd, 0); board_init_r(gd->new_gd, 0);
#else #else
relocate_code(gd->dest_addr_sp, gd->new_gd, gd->dest_addr); relocate_code(gd->start_addr_sp, gd->new_gd, gd->relocaddr);
#endif #endif
return 0; return 0;

@ -137,7 +137,7 @@ static int initr_reloc_global_data(void)
#ifdef CONFIG_SYS_SYM_OFFSETS #ifdef CONFIG_SYS_SYM_OFFSETS
monitor_flash_len = _end_ofs; monitor_flash_len = _end_ofs;
#elif !defined(CONFIG_SANDBOX) #elif !defined(CONFIG_SANDBOX)
monitor_flash_len = (ulong)&__init_end - gd->dest_addr; monitor_flash_len = (ulong)&__init_end - gd->relocaddr;
#endif #endif
#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
/* /*
@ -145,7 +145,7 @@ static int initr_reloc_global_data(void)
* We need to update it to point to the same CPU entry in RAM. * We need to update it to point to the same CPU entry in RAM.
* TODO: why not just add gd->reloc_ofs? * TODO: why not just add gd->reloc_ofs?
*/ */
gd->arch.cpu += gd->dest_addr - CONFIG_SYS_MONITOR_BASE; gd->arch.cpu += gd->relocaddr - CONFIG_SYS_MONITOR_BASE;
/* /*
* If we didn't know the cpu mask & # cores, we can save them of * If we didn't know the cpu mask & # cores, we can save them of
@ -161,7 +161,7 @@ static int initr_reloc_global_data(void)
* in SRAM mode and initialize that cache from SRAM mode back to being * in SRAM mode and initialize that cache from SRAM mode back to being
* a cache in cpu_init_r. * a cache in cpu_init_r.
*/ */
gd->env_addr += gd->dest_addr - CONFIG_SYS_MONITOR_BASE; gd->env_addr += gd->relocaddr - CONFIG_SYS_MONITOR_BASE;
#endif #endif
return 0; return 0;
} }
@ -178,7 +178,7 @@ static int initr_trap(void)
/* /*
* Setup trap handlers * Setup trap handlers
*/ */
trap_init(gd->dest_addr); trap_init(gd->relocaddr);
return 0; return 0;
} }
@ -263,7 +263,7 @@ static int initr_malloc(void)
ulong malloc_start; ulong malloc_start;
/* The malloc area is immediately below the monitor copy in DRAM */ /* The malloc area is immediately below the monitor copy in DRAM */
malloc_start = gd->dest_addr - TOTAL_MALLOC_LEN; malloc_start = gd->relocaddr - TOTAL_MALLOC_LEN;
mem_malloc_init((ulong)map_sysmem(malloc_start, TOTAL_MALLOC_LEN), mem_malloc_init((ulong)map_sysmem(malloc_start, TOTAL_MALLOC_LEN),
TOTAL_MALLOC_LEN); TOTAL_MALLOC_LEN);
return 0; return 0;
@ -276,7 +276,7 @@ __weak int power_init_board(void)
static int initr_announce(void) static int initr_announce(void)
{ {
debug("Now running in RAM - U-Boot at: %08lx\n", gd->dest_addr); debug("Now running in RAM - U-Boot at: %08lx\n", gd->relocaddr);
return 0; return 0;
} }

@ -68,9 +68,6 @@ typedef struct global_data {
unsigned long env_addr; /* Address of Environment struct */ unsigned long env_addr; /* Address of Environment struct */
unsigned long env_valid; /* Checksum of Environment valid? */ unsigned long env_valid; /* Checksum of Environment valid? */
/* TODO: is this the same as relocaddr, or something else? */
unsigned long dest_addr; /* Post-relocation address of U-Boot */
unsigned long dest_addr_sp;
unsigned long ram_top; /* Top address of RAM used by U-Boot */ unsigned long ram_top; /* Top address of RAM used by U-Boot */
unsigned long relocaddr; /* Start address of U-Boot in RAM */ unsigned long relocaddr; /* Start address of U-Boot in RAM */

Loading…
Cancel
Save