x86: fsp: Enlarge the size of malloc() pool before relocation

After fsp_init() returns, the stack has already been switched to a
place within system memory as defined by CONFIG_FSP_TEMP_RAM_ADDR.
Enlarge the size of malloc() pool before relocation since we have
plenty of memory now.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
master
Bin Meng 10 years ago committed by Simon Glass
parent a52a068eb1
commit 57b10f59b7
  1. 7
      arch/x86/Kconfig
  2. 8
      arch/x86/cpu/start.S
  3. 16
      arch/x86/lib/fsp/fsp_common.c

@ -232,6 +232,13 @@ config FSP_TEMP_RAM_ADDR
Stack top address which is used in FspInit after DRAM is ready and Stack top address which is used in FspInit after DRAM is ready and
CAR is disabled. CAR is disabled.
config FSP_SYS_MALLOC_F_LEN
hex
depends on HAVE_FSP
default 0x100000
help
Additional size of malloc() pool before relocation.
config SMP config SMP
bool "Enable Symmetric Multiprocessing" bool "Enable Symmetric Multiprocessing"
default n default n

@ -141,6 +141,14 @@ car_init_ret:
jz skip_hob jz skip_hob
movl %esi, GD_HOB_LIST(%edx) movl %esi, GD_HOB_LIST(%edx)
/*
* After fsp_init() returns, the stack has already been switched to a
* place within system memory as defined by CONFIG_FSP_TEMP_RAM_ADDR.
* Enlarge the size of malloc() pool before relocation since we have
* plenty of memory now.
*/
subl $CONFIG_FSP_SYS_MALLOC_F_LEN, %esp
movl %esp, GD_MALLOC_BASE(%edx)
skip_hob: skip_hob:
#else #else
/* Store table pointer */ /* Store table pointer */

@ -56,8 +56,22 @@ void board_final_cleanup(void)
int x86_fsp_init(void) int x86_fsp_init(void)
{ {
if (!gd->arch.hob_list) if (!gd->arch.hob_list) {
/*
* The first time we enter here, call fsp_init().
* Note the execution does not return to this function,
* instead it jumps to fsp_continue().
*/
fsp_init(CONFIG_FSP_TEMP_RAM_ADDR, BOOT_FULL_CONFIG, NULL); fsp_init(CONFIG_FSP_TEMP_RAM_ADDR, BOOT_FULL_CONFIG, NULL);
} else {
/*
* The second time we enter here, adjust the size of malloc()
* pool before relocation. Given gd->malloc_base was adjusted
* after the call to board_init_f_mem() in arch/x86/cpu/start.S,
* we should fix up gd->malloc_limit here.
*/
gd->malloc_limit += CONFIG_FSP_SYS_MALLOC_F_LEN;
}
return 0; return 0;
} }

Loading…
Cancel
Save