diff options
author | Patrick Rudolph <patrick.rudolph@9elements.com> | 2018-04-26 09:53:16 +0200 |
---|---|---|
committer | Philipp Deppenwiese <zaolin.daisuki@gmail.com> | 2018-06-19 14:28:01 +0000 |
commit | 59b8f275c21ccbd08019cc7d9f0b63671de6586a (patch) | |
tree | 62d5faf942ed7bc8da9016743f8d8390f7db46c7 /src/lib/selfboot.c | |
parent | 635e512be3cc0d805c9eb924a08528a39c0d6b1e (diff) |
lib/prog_loaders: Move argument selection into selfload
Set the payload argument in selfload, as other (non self) payloads, are
going to set a different argument.
Change-Id: I994f604fc4501e0e3b00165819f796b1b8275d8c
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/25861
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/lib/selfboot.c')
-rw-r--r-- | src/lib/selfboot.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c index 4046649522..a79f61d485 100644 --- a/src/lib/selfboot.c +++ b/src/lib/selfboot.c @@ -28,6 +28,7 @@ #include <bootmem.h> #include <program_loading.h> #include <timestamp.h> +#include <cbmem.h> static const unsigned long lb_start = (unsigned long)&_program; static const unsigned long lb_end = (unsigned long)&_eprogram; @@ -520,7 +521,7 @@ static int load_self_segments(struct segment *head, struct prog *payload, return 1; } -void *selfload(struct prog *payload, bool check_regions) +bool selfload(struct prog *payload, bool check_regions) { uintptr_t entry = 0; struct segment head; @@ -529,7 +530,7 @@ void *selfload(struct prog *payload, bool check_regions) data = rdev_mmap_full(prog_rdev(payload)); if (data == NULL) - return NULL; + return false; /* Preprocess the self segments */ if (!build_self_segment_list(&head, data, &entry)) @@ -546,9 +547,11 @@ void *selfload(struct prog *payload, bool check_regions) /* Update the payload's area with the bounce buffer information. */ prog_set_area(payload, (void *)(uintptr_t)bounce_buffer, bounce_size); - return (void *)entry; + /* Pass cbtables to payload if architecture desires it. */ + prog_set_entry(payload, (void *)entry, cbmem_find(CBMEM_ID_CBTABLE)); + return true; out: rdev_munmap(prog_rdev(payload), data); - return NULL; + return false; } |