diff options
author | Etienne Carriere <etienne.carriere@linaro.org> | 2018-02-05 10:42:42 +0100 |
---|---|---|
committer | Etienne Carriere <etienne.carriere@linaro.org> | 2018-02-05 10:42:42 +0100 |
commit | 10c669585456bc9122bb86c1710e80599f5eae89 (patch) | |
tree | b93f6173cdaa7fb9e16b442701fc0efe748d8452 | |
parent | 3fe81dcf5db35bd6afe8dd9f6b9ebdd06e9f1369 (diff) |
aarch32: optee: define the OP-TEE secure payload
AArch32 only platforms can boot the OP-TEE secure firmware as
a BL32 secure payload. Such configuration can be defined through
AARCH32_SP=optee.
The source files can rely on AARCH32_SP_OPTEE to condition
OP-TEE boot specific instruction sequences.
OP-TEE does not expect ARM Trusted Firmware formatted structure
as boot argument. Load sequence is expected to have already loaded
to OP-TEE boot arguments into the bl32 entrypoint info structure.
Last, AArch32 platform can only boot AArch32 OP-TEE images.
Change-Id: Ic28eec5004315fc9111051add6bb1a1d607fc815
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
-rw-r--r-- | bl2/bl2_image_load_v2.c | 6 | ||||
-rw-r--r-- | bl32/optee/optee.mk | 15 | ||||
-rw-r--r-- | lib/optee/optee_utils.c | 17 |
3 files changed, 32 insertions, 6 deletions
diff --git a/bl2/bl2_image_load_v2.c b/bl2/bl2_image_load_v2.c index 6517703d..198b65e4 100644 --- a/bl2/bl2_image_load_v2.c +++ b/bl2/bl2_image_load_v2.c @@ -87,8 +87,10 @@ entry_point_info_t *bl2_load_images(void) assert(bl2_to_next_bl_params->h.version >= VERSION_2); assert(bl2_to_next_bl_params->head->ep_info); - /* Populate arg0 for the next BL image */ - bl2_to_next_bl_params->head->ep_info->args.arg0 = (u_register_t)bl2_to_next_bl_params; + /* Populate arg0 for the next BL image if not already provided */ + if (bl2_to_next_bl_params->head->ep_info->args.arg0 == 0) + bl2_to_next_bl_params->head->ep_info->args.arg0 = + (u_register_t)bl2_to_next_bl_params; /* Flush the parameters to be passed to next image */ plat_flush_next_bl_params(); diff --git a/bl32/optee/optee.mk b/bl32/optee/optee.mk new file mode 100644 index 00000000..462020f5 --- /dev/null +++ b/bl32/optee/optee.mk @@ -0,0 +1,15 @@ +# +# Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# This makefile only aims at complying with ARM Trusted Firmware build process so +# that "optee" is a valid ARM Trusted Firmware AArch32 Secure Playload identifier. + +ifneq ($(ARCH),aarch32) +$(error This directory targets AArch32 support) +endif + +$(eval $(call add_define,AARCH32_SP_OPTEE)) + +$(info ARM Trusted Firmware built for OP-TEE payload support) diff --git a/lib/optee/optee_utils.c b/lib/optee/optee_utils.c index deb948c2..87e52bd1 100644 --- a/lib/optee/optee_utils.c +++ b/lib/optee/optee_utils.c @@ -158,9 +158,12 @@ int parse_optee_header(entry_point_info_t *header_ep, * and BL32_EXTRA2_IMAGE_ID to load pager and paged bin. */ if (!tee_validate_header(optee_header)) { - INFO("Invalid OPTEE header, legacy mode.\n"); - /* Set legacy OPTEE runtime arch - aarch64 */ + INFO("Invalid OPTEE header, set legacy mode.\n"); +#ifdef AARCH64 header_ep->args.arg0 = MODE_RW_64; +#else + header_ep->args.arg0 = MODE_RW_32; +#endif return 0; } @@ -208,10 +211,16 @@ int parse_optee_header(entry_point_info_t *header_ep, header_ep->args.arg2 = paged_image_info->image_size; /* Set OPTEE runtime arch - aarch32/aarch64 */ - if (optee_header->arch == 0) + if (optee_header->arch == 0) { header_ep->args.arg0 = MODE_RW_32; - else + } else { +#ifdef AARCH64 header_ep->args.arg0 = MODE_RW_64; +#else + ERROR("Cannot boot an AArch64 OP-TEE\n"); + return -1; +#endif + } return 0; } |