Commit 10c66958 authored by Etienne Carriere's avatar Etienne Carriere
Browse files

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: default avatarEtienne Carriere <etienne.carriere@linaro.org>
parent 3fe81dcf
...@@ -87,8 +87,10 @@ entry_point_info_t *bl2_load_images(void) ...@@ -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->h.version >= VERSION_2);
assert(bl2_to_next_bl_params->head->ep_info); assert(bl2_to_next_bl_params->head->ep_info);
/* Populate arg0 for the next BL image */ /* Populate arg0 for the next BL image if not already provided */
bl2_to_next_bl_params->head->ep_info->args.arg0 = (u_register_t)bl2_to_next_bl_params; 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 */ /* Flush the parameters to be passed to next image */
plat_flush_next_bl_params(); plat_flush_next_bl_params();
......
#
# 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)
...@@ -158,9 +158,12 @@ int parse_optee_header(entry_point_info_t *header_ep, ...@@ -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. * and BL32_EXTRA2_IMAGE_ID to load pager and paged bin.
*/ */
if (!tee_validate_header(optee_header)) { if (!tee_validate_header(optee_header)) {
INFO("Invalid OPTEE header, legacy mode.\n"); INFO("Invalid OPTEE header, set legacy mode.\n");
/* Set legacy OPTEE runtime arch - aarch64 */ #ifdef AARCH64
header_ep->args.arg0 = MODE_RW_64; header_ep->args.arg0 = MODE_RW_64;
#else
header_ep->args.arg0 = MODE_RW_32;
#endif
return 0; return 0;
} }
...@@ -208,10 +211,16 @@ int parse_optee_header(entry_point_info_t *header_ep, ...@@ -208,10 +211,16 @@ int parse_optee_header(entry_point_info_t *header_ep,
header_ep->args.arg2 = paged_image_info->image_size; header_ep->args.arg2 = paged_image_info->image_size;
/* Set OPTEE runtime arch - aarch32/aarch64 */ /* Set OPTEE runtime arch - aarch32/aarch64 */
if (optee_header->arch == 0) if (optee_header->arch == 0) {
header_ep->args.arg0 = MODE_RW_32; header_ep->args.arg0 = MODE_RW_32;
else } else {
#ifdef AARCH64
header_ep->args.arg0 = MODE_RW_64; header_ep->args.arg0 = MODE_RW_64;
#else
ERROR("Cannot boot an AArch64 OP-TEE\n");
return -1;
#endif
}
return 0; return 0;
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment