Aaron Durbin (adurbin@google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9143
-gerrit
commit a48c96a762560bdbac12c484f50e1b71166483a5 Author: Aaron Durbin adurbin@chromium.org Date: Fri Mar 27 21:17:22 2015 -0500
rmodule: use struct prog while loading rmodules
The rmod_stage_load structure contained the same fields as struct prog. In order to more closely integrate with the rest of program loading use struct prog.
Change-Id: Ib7f45d0b3573e6d518864deacc4002802b11aa9c Signed-off-by: Aaron Durbin adurbin@chromium.org --- src/include/rmodule.h | 8 ++------ src/lib/loaders/cbfs_ramstage_loader.c | 6 +----- src/lib/rmodule.c | 10 +++++----- src/soc/intel/baytrail/refcode.c | 20 ++++++++++++-------- src/soc/intel/broadwell/refcode.c | 20 ++++++++++++-------- 5 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/src/include/rmodule.h b/src/include/rmodule.h index 76b855a..242ed91 100644 --- a/src/include/rmodule.h +++ b/src/include/rmodule.h @@ -55,15 +55,11 @@ int rmodule_calc_region(unsigned int region_alignment, size_t rmodule_size, * using dynamic cbmem because it uses the dynamic cbmem API to obtain * the backing store region for the stage. */ struct cbfs_stage; -struct cbmem_entry; +struct prog;
struct rmod_stage_load { - /* Inputs */ uint32_t cbmem_id; - const char *name; - /* Outputs */ - const struct cbmem_entry *cbmem_entry; - void *entry; + struct prog *prog; };
/* Both of the following functions return 0 on success, -1 on error. */ diff --git a/src/lib/loaders/cbfs_ramstage_loader.c b/src/lib/loaders/cbfs_ramstage_loader.c index e565329..c460653 100644 --- a/src/lib/loaders/cbfs_ramstage_loader.c +++ b/src/lib/loaders/cbfs_ramstage_loader.c @@ -29,7 +29,7 @@ static int cbfs_load_ramstage(struct prog *ramstage) { struct rmod_stage_load rmod_ram = { .cbmem_id = CBMEM_ID_RAMSTAGE, - .name = ramstage->name, + .prog = ramstage, };
if (rmodule_stage_load_from_cbfs(&rmod_ram)) { @@ -37,10 +37,6 @@ static int cbfs_load_ramstage(struct prog *ramstage) return -1; }
- prog_set_area(ramstage, cbmem_entry_start(rmod_ram.cbmem_entry), - cbmem_entry_size(rmod_ram.cbmem_entry)); - prog_set_entry(ramstage, rmod_ram.entry, NULL); - return 0; }
diff --git a/src/lib/rmodule.c b/src/lib/rmodule.c index d06409f..d7dc969 100644 --- a/src/lib/rmodule.c +++ b/src/lib/rmodule.c @@ -261,7 +261,7 @@ int rmodule_stage_load(struct rmod_stage_load *rsl, struct cbfs_stage *stage) int load_offset; const struct cbmem_entry *cbmem_entry;
- if (stage == NULL || rsl->name == NULL) + if (stage == NULL || rsl->prog == NULL || rsl->prog->name == NULL) return -1;
rmodule_offset = @@ -276,7 +276,7 @@ int rmodule_stage_load(struct rmod_stage_load *rsl, struct cbfs_stage *stage) stage_region = cbmem_entry_start(cbmem_entry);
printk(BIOS_INFO, "Decompressing stage %s @ 0x%p (%d bytes)\n", - rsl->name, &stage_region[rmodule_offset], stage->memlen); + rsl->prog->name, &stage_region[rmodule_offset], stage->memlen);
if (!cbfs_decompress(stage->compression, &stage[1], &stage_region[rmodule_offset], stage->len)) @@ -288,8 +288,8 @@ int rmodule_stage_load(struct rmod_stage_load *rsl, struct cbfs_stage *stage) if (rmodule_load(&stage_region[load_offset], &rmod_stage)) return -1;
- rsl->cbmem_entry = cbmem_entry; - rsl->entry = rmodule_entry(&rmod_stage); + prog_set_area(rsl->prog, stage_region, cbmem_entry_size(cbmem_entry)); + prog_set_entry(rsl->prog, rmodule_entry(&rmod_stage), NULL);
return 0; } @@ -299,7 +299,7 @@ int rmodule_stage_load_from_cbfs(struct rmod_stage_load *rsl) struct cbfs_stage *stage;
stage = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, - rsl->name, CBFS_TYPE_STAGE, NULL); + rsl->prog->name, CBFS_TYPE_STAGE, NULL);
if (stage == NULL) return -1; diff --git a/src/soc/intel/baytrail/refcode.c b/src/soc/intel/baytrail/refcode.c index 059639b..45771e0 100644 --- a/src/soc/intel/baytrail/refcode.c +++ b/src/soc/intel/baytrail/refcode.c @@ -23,6 +23,7 @@ #include <console/console.h> #include <console/streams.h> #include <cpu/x86/tsc.h> +#include <program_loading.h> #include <rmodule.h> #include <ramstage_cache.h> #if IS_ENABLED(CONFIG_CHROMEOS) @@ -84,16 +85,16 @@ static void cache_refcode(const struct rmod_stage_load *rsl) /* Determine how much remaining cache available. */ cache_size -= c->size + sizeof(*c);
- if (cache_size < (sizeof(*c) + cbmem_entry_size(rsl->cbmem_entry))) { + if (cache_size < (sizeof(*c) + prog_size(rsl->prog))) { printk(BIOS_DEBUG, "Not enough cache space for ref code.\n"); return; }
c = next_cache(c); c->magic = RAMSTAGE_CACHE_MAGIC; - c->entry_point = (uint32_t)rsl->entry; - c->load_address = (uint32_t)cbmem_entry_start(rsl->cbmem_entry); - c->size = cbmem_entry_size(rsl->cbmem_entry); + c->entry_point = (uint32_t)(uintptr_t)prog_entry(rsl->prog); + c->load_address = (uint32_t)(uintptr_t)prog_start(rsl->prog); + c->size = prog_size(rsl->prog);
printk(BIOS_DEBUG, "Caching refcode at 0x%p(%x)\n", &c->program[0], c->size); @@ -119,7 +120,7 @@ static int load_refcode_from_vboot(struct rmod_stage_load *refcode) printk(BIOS_DEBUG, "refcode loading from vboot rw area.\n"); stage = (void *)(uintptr_t)fwc->address;
- if (rmodule_stage_load(refcode, stage) || refcode->entry == NULL) { + if (rmodule_stage_load(refcode, stage)) { printk(BIOS_DEBUG, "Error loading reference code.\n"); return -1; } @@ -136,7 +137,7 @@ static int load_refcode_from_cbfs(struct rmod_stage_load *refcode) { printk(BIOS_DEBUG, "refcode loading from cbfs.\n");
- if (rmodule_stage_load_from_cbfs(refcode) || refcode->entry == NULL) { + if (rmodule_stage_load_from_cbfs(refcode)) { printk(BIOS_DEBUG, "Error loading reference code.\n"); return -1; } @@ -146,9 +147,12 @@ static int load_refcode_from_cbfs(struct rmod_stage_load *refcode)
static efi_wrapper_entry_t load_reference_code(void) { + struct prog prog = { + .name = CONFIG_CBFS_PREFIX "/refcode", + }; struct rmod_stage_load refcode = { .cbmem_id = CBMEM_ID_REFCODE, - .name = CONFIG_CBFS_PREFIX "/refcode", + .prog = &prog, };
if (acpi_is_wakeup_s3()) { @@ -162,7 +166,7 @@ static efi_wrapper_entry_t load_reference_code(void) /* Cache loaded reference code. */ cache_refcode(&refcode);
- return refcode.entry; + return prog_entry(&prog); }
void baytrail_run_reference_code(void) diff --git a/src/soc/intel/broadwell/refcode.c b/src/soc/intel/broadwell/refcode.c index 1328f1a..36ce97d 100644 --- a/src/soc/intel/broadwell/refcode.c +++ b/src/soc/intel/broadwell/refcode.c @@ -23,6 +23,7 @@ #include <console/console.h> #include <console/streams.h> #include <cpu/x86/tsc.h> +#include <program_loading.h> #include <rmodule.h> #include <ramstage_cache.h> #include <string.h> @@ -80,16 +81,16 @@ static void cache_refcode(const struct rmod_stage_load *rsl) /* Determine how much remaining cache available. */ cache_size -= c->size + sizeof(*c);
- if (cache_size < (sizeof(*c) + cbmem_entry_size(rsl->cbmem_entry))) { + if (cache_size < (sizeof(*c) + prog_size(rsl->prog))) { printk(BIOS_DEBUG, "Not enough cache space for ref code.\n"); return; }
c = next_cache(c); c->magic = RAMSTAGE_CACHE_MAGIC; - c->entry_point = (uint32_t)rsl->entry; - c->load_address = (uint32_t)cbmem_entry_start(rsl->cbmem_entry); - c->size = cbmem_entry_size(rsl->cbmem_entry); + c->entry_point = (uint32_t)(uintptr_t)prog_entry(rsl->prog); + c->load_address = (uint32_t)(uintptr_t)prog_start(rsl->prog); + c->size = prog_size(rsl->prog);
printk(BIOS_DEBUG, "Caching refcode at 0x%p(%x)\n", &c->program[0], c->size); @@ -115,7 +116,7 @@ static int load_refcode_from_vboot(struct rmod_stage_load *refcode) printk(BIOS_DEBUG, "refcode loading from vboot rw area.\n"); stage = (void *)(uintptr_t)fwc->address;
- if (rmodule_stage_load(refcode, stage) || refcode->entry == NULL) { + if (rmodule_stage_load(refcode, stage)) { printk(BIOS_DEBUG, "Error loading reference code.\n"); return -1; } @@ -132,7 +133,7 @@ static int load_refcode_from_cbfs(struct rmod_stage_load *refcode) { printk(BIOS_DEBUG, "refcode loading from cbfs.\n");
- if (rmodule_stage_load_from_cbfs(refcode) || refcode->entry == NULL) { + if (rmodule_stage_load_from_cbfs(refcode)) { printk(BIOS_DEBUG, "Error loading reference code.\n"); return -1; } @@ -142,9 +143,12 @@ static int load_refcode_from_cbfs(struct rmod_stage_load *refcode)
static pei_wrapper_entry_t load_reference_code(void) { + struct prog prog = { + .name = CONFIG_CBFS_PREFIX "/refcode", + }; struct rmod_stage_load refcode = { .cbmem_id = CBMEM_ID_REFCODE, - .name = CONFIG_CBFS_PREFIX "/refcode", + .prog = &prog, };
if (acpi_is_wakeup_s3()) { @@ -158,7 +162,7 @@ static pei_wrapper_entry_t load_reference_code(void) /* Cache loaded reference code. */ cache_refcode(&refcode);
- return refcode.entry; + return prog_entry(&prog); }
void broadwell_run_reference_code(void)