From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bin Meng Date: Thu, 20 Aug 2015 06:40:19 -0700 Subject: [U-Boot] [PATCH v2 03/12] x86: fsp: Enlarge the size of malloc() pool before relocation In-Reply-To: <1440078028-29464-1-git-send-email-bmeng.cn@gmail.com> References: <1440078028-29464-1-git-send-email-bmeng.cn@gmail.com> Message-ID: <1440078028-29464-4-git-send-email-bmeng.cn@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- Changes in v2: - Add some comments in x86_fsp_init() for malloc() adjustment arch/x86/Kconfig | 7 +++++++ arch/x86/cpu/start.S | 8 ++++++++ arch/x86/lib/fsp/fsp_common.c | 16 +++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 065bbe4..687208f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -232,6 +232,13 @@ config FSP_TEMP_RAM_ADDR Stack top address which is used in FspInit after DRAM is ready and 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 bool "Enable Symmetric Multiprocessing" default n diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S index e94ddc4..e2b5ef4 100644 --- a/arch/x86/cpu/start.S +++ b/arch/x86/cpu/start.S @@ -141,6 +141,14 @@ car_init_ret: jz skip_hob 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: #else /* Store table pointer */ diff --git a/arch/x86/lib/fsp/fsp_common.c b/arch/x86/lib/fsp/fsp_common.c index d564cb9..658f32d 100644 --- a/arch/x86/lib/fsp/fsp_common.c +++ b/arch/x86/lib/fsp/fsp_common.c @@ -56,8 +56,22 @@ void board_final_cleanup(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); + } 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; } -- 1.8.2.1