summaryrefslogtreecommitdiff
path: root/src/arch/arm64/arm_tf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm64/arm_tf.c')
-rw-r--r--src/arch/arm64/arm_tf.c48
1 files changed, 11 insertions, 37 deletions
diff --git a/src/arch/arm64/arm_tf.c b/src/arch/arm64/arm_tf.c
index 1bdf522a2c..3e0892ec34 100644
--- a/src/arch/arm64/arm_tf.c
+++ b/src/arch/arm64/arm_tf.c
@@ -22,7 +22,7 @@
#include <assert.h>
#include <cbfs.h>
#include <cbmem.h>
-#include <vendorcode/google/chromeos/vboot_handoff.h>
+#include <program_loading.h>
/*
* TODO: Many of these structures are currently unused. Better not fill them out
@@ -37,34 +37,6 @@ static entry_point_info_t bl32_ep_info;
static entry_point_info_t bl33_ep_info;
static bl31_params_t bl31_params;
-/* TODO: Replace with glorious new CBFSv1 solution when it's available. */
-static void *vboot_get_bl31(void)
-{
- void *bl31_entry;
- struct cbfs_media *media;
- struct firmware_component *component;
- struct vboot_handoff *handoff = cbmem_find(CBMEM_ID_VBOOT_HANDOFF);
-
- if (!handoff)
- return NULL;
-
- assert(CONFIG_VBOOT_BL31_INDEX < MAX_PARSED_FW_COMPONENTS);
- component = &handoff->components[CONFIG_VBOOT_BL31_INDEX];
-
- /* components[] is zeroed out before filling, so size == 0 -> missing */
- if (!component->size)
- return NULL;
-
- init_default_cbfs_media(media);
- bl31_entry = cbfs_load_stage_by_offset(media, component->address);
- if (bl31_entry == CBFS_LOAD_ERROR)
- return NULL;
-
- printk(BIOS_INFO, "Loaded %u bytes verified BL31 from %#.8x to EP %p\n",
- component->size, component->address, bl31_entry);
- return bl31_entry;
-}
-
void __attribute__((weak)) *soc_get_bl31_plat_params(bl31_params_t *params)
{
/* Default weak implementation. */
@@ -73,17 +45,19 @@ void __attribute__((weak)) *soc_get_bl31_plat_params(bl31_params_t *params)
void arm_tf_run_bl31(u64 payload_entry, u64 payload_arg0, u64 payload_spsr)
{
- const char *bl31_filename = CONFIG_CBFS_PREFIX"/bl31";
+ struct prog bl31 = {
+ .type = PROG_BL31,
+ .name = CONFIG_CBFS_PREFIX"/bl31",
+ };
void (*bl31_entry)(bl31_params_t *params, void *plat_params) = NULL;
- if (IS_ENABLED(CONFIG_VBOOT2_VERIFY_FIRMWARE))
- bl31_entry = vboot_get_bl31();
+ if (prog_locate(&bl31))
+ die("BL31 not found");
+
+ if (cbfs_prog_stage_load(&bl31))
+ die("BL31 load failed");
- if (!bl31_entry) {
- bl31_entry = cbfs_load_stage(CBFS_DEFAULT_MEDIA, bl31_filename);
- if (bl31_entry == CBFS_LOAD_ERROR)
- die("BL31 not found in CBFS");
- }
+ bl31_entry = prog_entry(&bl31);
SET_PARAM_HEAD(&bl31_params, PARAM_BL31, VERSION_1, 0);
bl31_params.bl33_ep_info = &bl33_ep_info;