feat(lib/optee): introduce optee_header_is_valid()

This new function optee_header_is_valid() allows platform to know
whether OP-TEE OS is loaded from multi-image (using OP-TEE header
image as BL32_IMAGE_ID) or from a single OP-TEE binary image.
The function tee_validate_header() is reworked to return a boolean,
and is now silent.

Change-Id: Idc7dde091f2ada8898f40d02e68c3834ca39d8e8
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
Signed-off-by: Yann Gautier <yann.gautier@foss.st.com>
This commit is contained in:
Etienne Carriere 2019-04-15 18:01:29 +02:00 committed by Yann Gautier
parent f465cc1659
commit b84a850864
2 changed files with 15 additions and 12 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -7,8 +7,12 @@
#ifndef OPTEE_UTILS_H #ifndef OPTEE_UTILS_H
#define OPTEE_UTILS_H #define OPTEE_UTILS_H
#include <stdbool.h>
#include <common/bl_common.h> #include <common/bl_common.h>
bool optee_header_is_valid(uintptr_t header_base);
int parse_optee_header(entry_point_info_t *header_ep, int parse_optee_header(entry_point_info_t *header_ep,
image_info_t *pager_image_info, image_info_t *pager_image_info,
image_info_t *paged_image_info); image_info_t *paged_image_info);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -47,25 +47,24 @@ typedef struct optee_header {
/******************************************************************************* /*******************************************************************************
* Check if it is a valid tee header * Check if it is a valid tee header
* Return 1 if valid * Return true if valid
* Return 0 if invalid * Return false if invalid
******************************************************************************/ ******************************************************************************/
static inline int tee_validate_header(optee_header_t *header) static bool tee_validate_header(optee_header_t *header)
{ {
int valid = 0;
if ((header->magic == TEE_MAGIC_NUM_OPTEE) && if ((header->magic == TEE_MAGIC_NUM_OPTEE) &&
(header->version == 2u) && (header->version == 2u) &&
(header->nb_images > 0u) && (header->nb_images > 0u) &&
(header->nb_images <= OPTEE_MAX_NUM_IMAGES)) { (header->nb_images <= OPTEE_MAX_NUM_IMAGES)) {
valid = 1; return true;
} }
else { return false;
WARN("Not a known TEE, use default loading options.\n"); }
}
return valid; bool optee_header_is_valid(uintptr_t header_base)
{
return tee_validate_header((optee_header_t *)header_base);
} }
/******************************************************************************* /*******************************************************************************