Alexandru Gagniuc (mr.nuke.me@gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13349
-gerrit
commit aac7367f0ce56685e7488491cd3fa7f5beb04371 Author: Alexandru Gagniuc alexandrux.gagniuc@intel.com Date: Mon Nov 9 15:37:28 2015 -0800
drivers/intel/fsp2_0: Return memory_init HOB list to caller
FspMemoryInit creates a list of hand-off-blocks (HOBs) which it returns to the caller. One of the HOBs describes an area of memory reserved for FSP. If that area is overwritten, FSP will Crash'n'Burn (TM), so in a future patch, we will parse the HOB list and mark the FSP memory area as reserved.
Change-Id: I5ecbb536ac73245aa1b5a433d3dd8ac6eb4b5411 Signed-off-by: Alexandru Gagniuc alexandrux.gagniuc@intel.com --- src/drivers/intel/fsp2_0/include/fsp/api.h | 2 +- src/drivers/intel/fsp2_0/memory_init.c | 10 +++++----- src/soc/intel/apollolake/romstage/romstage.c | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/drivers/intel/fsp2_0/include/fsp/api.h b/src/drivers/intel/fsp2_0/include/fsp/api.h index e51b854..f51174f 100644 --- a/src/drivers/intel/fsp2_0/include/fsp/api.h +++ b/src/drivers/intel/fsp2_0/include/fsp/api.h @@ -33,7 +33,7 @@ enum fsp_status { };
/* Main FSP stages */ -enum fsp_status fsp_memory_init(void); +enum fsp_status fsp_memory_init(void **hob_list); enum fsp_status fsp_silicon_init(void); enum fsp_status fsp_notify(void);
diff --git a/src/drivers/intel/fsp2_0/memory_init.c b/src/drivers/intel/fsp2_0/memory_init.c index c05c286..92c30b4 100644 --- a/src/drivers/intel/fsp2_0/memory_init.c +++ b/src/drivers/intel/fsp2_0/memory_init.c @@ -58,13 +58,13 @@ void platform_fsp_memory_init_params_cb(struct MEMORY_INIT_UPD *memupd) printk(BIOS_DEBUG, "WEAK: %s called\n", __func__); }
-static enum fsp_status do_fsp_memory_init(struct fsp_header *hdr) +static enum fsp_status do_fsp_memory_init(void **hob_list_ptr, + struct fsp_header *hdr) { enum fsp_status status; fsp_memory_init_fn fsp_raminit; struct fsp_memory_init_params raminit_params; struct fsp_init_rt_common_buffer rt_buffer; - void *hob_list_ptr; struct MEMORY_INIT_UPD raminit_upd; struct UPD_DATA_REGION *upd_region;
@@ -81,7 +81,7 @@ static enum fsp_status do_fsp_memory_init(struct fsp_header *hdr) /* Get any board specific changes */ raminit_params.nvs_buffer = NULL; raminit_params.rt_buffer = &rt_buffer; - raminit_params.hob_list = &hob_list_ptr; + raminit_params.hob_list = hob_list_ptr;
/* Update the UPD data */ raminit_upd.GpioPadInitTablePtr = NULL; @@ -116,12 +116,12 @@ static void relocate_fit(void) memcpy((void*)CONFIG_FIT_CAR_ADDR, (void*)fit_loc, FIT_SIZE); }
-enum fsp_status fsp_memory_init(void) +enum fsp_status fsp_memory_init(void **hob_list) { struct fsp_header hdr;
if (fsp_load_binary(&hdr, "blobs/fsp-m.bin") != CB_SUCCESS) return FSP_NOT_FOUND; relocate_fit(); - return do_fsp_memory_init(&hdr); + return do_fsp_memory_init(hob_list, &hdr); } diff --git a/src/soc/intel/apollolake/romstage/romstage.c b/src/soc/intel/apollolake/romstage/romstage.c index 6efbdd5..88d872e 100644 --- a/src/soc/intel/apollolake/romstage/romstage.c +++ b/src/soc/intel/apollolake/romstage/romstage.c @@ -73,6 +73,7 @@ static void *alloc_stack_in_ram(void)
asmlinkage void* romstage_entry(void) { + void *hob_list_ptr; /* Be careful. Bootblock might already have initialized the console */ if (!IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE)) { lpss_console_uart_init(); @@ -83,7 +84,7 @@ asmlinkage void* romstage_entry(void)
soc_early_romstage_init();
- fsp_memory_init(); + fsp_memory_init(&hob_list_ptr);
cbmem_initialize_empty(); return alloc_stack_in_ram();