Program loading: Handoff cbmem_top via calling arguments

There are a lot of different implementations to pass information from
romstage to ramstage. These could all be unified by passing this
information via cbmem. Often however these methods exist for that very
purpose. This solves this by passing cbmem_top via the programs
arguments.

Change-Id: Id2031f7bb81ce65fc318313c270eb1fbae3b2114
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/36272
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Arthur Heymans 2019-10-23 17:07:15 +02:00 committed by Patrick Georgi
parent b7cc68ae6a
commit 5331a7cff9
3 changed files with 12 additions and 0 deletions

View File

@ -225,5 +225,7 @@ void run_postcar_phase(struct postcar_frame *pcf)
/* As postcar exist, it's end of romstage here */
timestamp_add_now(TS_END_ROMSTAGE);
prog_set_arg(&prog, cbmem_top());
prog_run(&prog);
}

View File

@ -137,6 +137,11 @@ static inline void prog_set_entry(struct prog *prog, void *e, void *arg)
prog->arg = arg;
}
static inline void prog_set_arg(struct prog *prog, void *arg)
{
prog->arg = arg;
}
/* Locate the identified program to run. Return 0 on success. < 0 on error. */
int prog_locate(struct prog *prog);
/* The prog_locate_hook() is called prior to CBFS traversal. The hook can be

View File

@ -96,6 +96,8 @@ static void run_ramstage_from_resume(struct prog *ramstage)
/* Load the cached ramstage to runtime location. */
stage_cache_load_stage(STAGE_RAMSTAGE, ramstage);
prog_set_arg(ramstage, cbmem_top());
if (prog_entry(ramstage) != NULL) {
printk(BIOS_DEBUG, "Jumping to image.\n");
prog_run(ramstage);
@ -148,6 +150,9 @@ void run_ramstage(void)
timestamp_add_now(TS_END_COPYRAM);
/* This overrides the arg fetched from the relocatable module */
prog_set_arg(&ramstage, cbmem_top());
prog_run(&ramstage);
fail: