diff options
author | Jens Wiklander <jens.wiklander@linaro.org> | 2017-08-24 13:16:26 +0200 |
---|---|---|
committer | Jens Wiklander <jens.wiklander@linaro.org> | 2017-08-24 16:00:20 +0200 |
commit | e2af1cadf7cbbb04caa74bbbb0e61578bc446a3a (patch) | |
tree | 267fb61658e24afe3e9ec615e18a41309e708c2f /plat/qemu/qemu_bl2_setup.c | |
parent | 19911aa6feda9f10998de44d8853ecd28417f45d (diff) |
qemu: Add OP-TEE extra image parsing support
OP-TEE may have extra images to be loaded. Load them one by one and do
the parsing. In this patch, ARM TF need to load up to 3 images for
OP-TEE: header, pager and pages images. Header image is the info about
optee os and images. Pager image include pager code and data. Paged
image include the paging parts using virtual memory.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Diffstat (limited to 'plat/qemu/qemu_bl2_setup.c')
-rw-r--r-- | plat/qemu/qemu_bl2_setup.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/plat/qemu/qemu_bl2_setup.c b/plat/qemu/qemu_bl2_setup.c index 1306f34b..60d96233 100644 --- a/plat/qemu/qemu_bl2_setup.c +++ b/plat/qemu/qemu_bl2_setup.c @@ -9,6 +9,9 @@ #include <console.h> #include <debug.h> #include <desc_image_load.h> +#ifdef SPD_opteed +#include <optee_utils.h> +#endif #include <libfdt.h> #include <platform_def.h> #include <string.h> @@ -225,12 +228,36 @@ static int qemu_bl2_handle_post_image_load(unsigned int image_id) { int err = 0; bl_mem_params_node_t *bl_mem_params = get_bl_mem_params_node(image_id); +#ifdef SPD_opteed + bl_mem_params_node_t *pager_mem_params = NULL; + bl_mem_params_node_t *paged_mem_params = NULL; +#endif assert(bl_mem_params); switch (image_id) { # ifdef AARCH64 case BL32_IMAGE_ID: +#ifdef SPD_opteed + pager_mem_params = get_bl_mem_params_node(BL32_EXTRA1_IMAGE_ID); + assert(pager_mem_params); + + paged_mem_params = get_bl_mem_params_node(BL32_EXTRA2_IMAGE_ID); + assert(paged_mem_params); + + err = parse_optee_header(&bl_mem_params->ep_info, + &pager_mem_params->image_info, + &paged_mem_params->image_info); + if (err != 0) { + WARN("OPTEE header parse error.\n"); + } + + /* + * OP-TEE expect to receive DTB address in x2. + * This will be copied into x2 by dispatcher. + */ + bl_mem_params->ep_info.args.arg3 = PLAT_QEMU_DT_BASE; +#endif bl_mem_params->ep_info.spsr = qemu_get_spsr_for_bl32_entry(); break; # endif |