summaryrefslogtreecommitdiff
path: root/src/lib/selfboot.c
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2018-04-26 09:53:16 +0200
committerPhilipp Deppenwiese <zaolin.daisuki@gmail.com>2018-06-19 14:28:01 +0000
commit59b8f275c21ccbd08019cc7d9f0b63671de6586a (patch)
tree62d5faf942ed7bc8da9016743f8d8390f7db46c7 /src/lib/selfboot.c
parent635e512be3cc0d805c9eb924a08528a39c0d6b1e (diff)
downloadcoreboot-59b8f275c21ccbd08019cc7d9f0b63671de6586a.tar.xz
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.c11
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;
}