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>
This commit is contained in:
Patrick Rudolph 2018-04-26 09:53:16 +02:00 committed by Philipp Deppenwiese
parent 635e512be3
commit 59b8f275c2
4 changed files with 13 additions and 11 deletions

View File

@ -51,9 +51,9 @@ void arm_tf_run_bl31(u64 payload_entry, u64 payload_arg0, u64 payload_spsr)
if (prog_locate(&bl31))
die("BL31 not found");
bl31_entry = selfload(&bl31, false);
if (!bl31_entry)
if (!selfload(&bl31, false))
die("BL31 load failed");
bl31_entry = prog_entry(&bl31);
SET_PARAM_HEAD(&bl31_params, PARAM_BL31, VERSION_1, 0);

View File

@ -202,10 +202,10 @@ void mirror_payload(struct prog *payload);
/*
* Set check_regions to true to check that the payload targets usable memory.
* With this flag set, if it does not, the load will fail and this function
* will return NULL.
* will return false. On successful payload loading this functions return true.
*
* Defined in src/lib/selfboot.c
*/
void *selfload(struct prog *payload, bool check_regions);
bool selfload(struct prog *payload, bool check_regions);
#endif /* PROGRAM_LOADING_H */

View File

@ -30,6 +30,7 @@
#include <stage_cache.h>
#include <symbols.h>
#include <timestamp.h>
#include <cbfs.h>
/* Only can represent up to 1 byte less than size_t. */
const struct mem_region_device addrspace_32bit =
@ -182,9 +183,7 @@ void payload_load(void)
mirror_payload(payload);
/* Pass cbtables to payload if architecture desires it. */
prog_set_entry(payload, selfload(payload, true),
cbmem_find(CBMEM_ID_CBTABLE));
selfload(payload, true);
out:
if (prog_entry(payload) == NULL)

View File

@ -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;
}