mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-15 00:54:22 +00:00
Mbed TLS: Remove weak heap implementation
The implementation of the heap function plat_get_mbedtls_heap() becomes mandatory for platforms supporting TRUSTED_BOARD_BOOT. The shared Mbed TLS heap default weak function implementation is converted to a helper function get_mbedtls_heap_helper() which can be used by the platforms for their own function implementation. Change-Id: Ic8f2994e25e3d9fcd371a21ac459fdcafe07433e Signed-off-by: Ambroise Vincent <ambroise.vincent@arm.com>
This commit is contained in:
parent
e5be1f95e5
commit
2374ab1799
10 changed files with 77 additions and 36 deletions
|
@ -841,6 +841,33 @@ utilize the C runtime environment. For further details about how TF-A
|
||||||
represents the power domain topology and how this relates to the linear CPU
|
represents the power domain topology and how this relates to the linear CPU
|
||||||
index, please refer `Power Domain Topology Design`_.
|
index, please refer `Power Domain Topology Design`_.
|
||||||
|
|
||||||
|
Function : plat_get_mbedtls_heap() [when TRUSTED_BOARD_BOOT == 1]
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Arguments : void **heap_addr, size_t *heap_size
|
||||||
|
Return : int
|
||||||
|
|
||||||
|
This function is invoked during Mbed TLS library initialisation to get a heap,
|
||||||
|
by means of a starting address and a size. This heap will then be used
|
||||||
|
internally by the Mbed TLS library. Hence, each BL stage that utilises Mbed TLS
|
||||||
|
must be able to provide a heap to it.
|
||||||
|
|
||||||
|
A helper function can be found in `drivers/auth/mbedtls/mbedtls_common.c` in
|
||||||
|
which a heap is statically reserved during compile time inside every image
|
||||||
|
(i.e. every BL stage) that utilises Mbed TLS. In this default implementation,
|
||||||
|
the function simply returns the address and size of this "pre-allocated" heap.
|
||||||
|
For a platform to use this default implementation, only a call to the helper
|
||||||
|
from inside plat_get_mbedtls_heap() body is enough and nothing else is needed.
|
||||||
|
|
||||||
|
However, by writting their own implementation, platforms have the potential to
|
||||||
|
optimise memory usage. For example, on some Arm platforms, the Mbed TLS heap is
|
||||||
|
shared between BL1 and BL2 stages and, thus, the necessary space is not reserved
|
||||||
|
twice.
|
||||||
|
|
||||||
|
On success the function should return 0 and a negative error code otherwise.
|
||||||
|
|
||||||
Common optional modifications
|
Common optional modifications
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
@ -1054,29 +1081,6 @@ can override the common implementation to define a different prefix string for
|
||||||
the log output. The implementation should be robust to future changes that
|
the log output. The implementation should be robust to future changes that
|
||||||
increase the number of log levels.
|
increase the number of log levels.
|
||||||
|
|
||||||
Function : plat_get_mbedtls_heap()
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Arguments : void **heap_addr, size_t *heap_size
|
|
||||||
Return : int
|
|
||||||
|
|
||||||
This function is invoked during Mbed TLS library initialisation to get
|
|
||||||
a heap, by means of a starting address and a size. This heap will then be used
|
|
||||||
internally by the Mbed TLS library. The heap is requested from the current BL
|
|
||||||
stage, i.e. the current BL image inside which Mbed TLS is used.
|
|
||||||
|
|
||||||
In the default implementation a heap is statically allocated inside every image
|
|
||||||
(i.e. every BL stage) that utilises Mbed TLS. So, in this case, the function
|
|
||||||
simply returns the address and size of this "pre-allocated" heap. However, by
|
|
||||||
overriding the default implementation, platforms have the potential to optimise
|
|
||||||
memory usage. For example, on some Arm platforms, the Mbed TLS heap is shared
|
|
||||||
between BL1 and BL2 stages and, thus, the necessary space is not reserved
|
|
||||||
twice.
|
|
||||||
|
|
||||||
On success the function should return 0 and a negative error code otherwise.
|
|
||||||
|
|
||||||
Modifications specific to a Boot Loader stage
|
Modifications specific to a Boot Loader stage
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
#include <drivers/auth/mbedtls/mbedtls_config.h>
|
#include <drivers/auth/mbedtls/mbedtls_config.h>
|
||||||
#include <plat/common/platform.h>
|
#include <plat/common/platform.h>
|
||||||
|
|
||||||
#pragma weak plat_get_mbedtls_heap
|
|
||||||
|
|
||||||
static void cleanup(void)
|
static void cleanup(void)
|
||||||
{
|
{
|
||||||
ERROR("EXIT from BL2\n");
|
ERROR("EXIT from BL2\n");
|
||||||
|
@ -58,10 +56,10 @@ void mbedtls_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following default implementation of the function simply returns the
|
* The following helper function simply returns the default allocated heap.
|
||||||
* by default allocated heap.
|
* It can be used by platforms for their plat_get_mbedtls_heap() implementation.
|
||||||
*/
|
*/
|
||||||
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
int get_mbedtls_heap_helper(void **heap_addr, size_t *heap_size)
|
||||||
{
|
{
|
||||||
static unsigned char heap[TF_MBEDTLS_HEAP_SIZE];
|
static unsigned char heap[TF_MBEDTLS_HEAP_SIZE];
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ int plat_get_image_source(unsigned int image_id,
|
||||||
uintptr_t plat_get_ns_image_entrypoint(void);
|
uintptr_t plat_get_ns_image_entrypoint(void);
|
||||||
unsigned int plat_my_core_pos(void);
|
unsigned int plat_my_core_pos(void);
|
||||||
int plat_core_pos_by_mpidr(u_register_t mpidr);
|
int plat_core_pos_by_mpidr(u_register_t mpidr);
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size);
|
||||||
|
|
||||||
#if STACK_PROTECTOR_ENABLED
|
#if STACK_PROTECTOR_ENABLED
|
||||||
/*
|
/*
|
||||||
|
@ -103,7 +104,6 @@ void plat_panic_handler(void) __dead2;
|
||||||
const char *plat_log_get_prefix(unsigned int log_level);
|
const char *plat_log_get_prefix(unsigned int log_level);
|
||||||
void bl2_plat_preload_setup(void);
|
void bl2_plat_preload_setup(void);
|
||||||
int plat_try_next_boot_source(void);
|
int plat_try_next_boot_source(void);
|
||||||
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size);
|
|
||||||
uint64_t *plat_init_apiakey(void);
|
uint64_t *plat_init_apiakey(void);
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
@ -262,6 +262,7 @@ int plat_get_nv_ctr(void *cookie, unsigned int *nv_ctr);
|
||||||
int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr);
|
int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr);
|
||||||
int plat_set_nv_ctr2(void *cookie, const struct auth_img_desc_s *img_desc,
|
int plat_set_nv_ctr2(void *cookie, const struct auth_img_desc_s *img_desc,
|
||||||
unsigned int nv_ctr);
|
unsigned int nv_ctr);
|
||||||
|
int get_mbedtls_heap_helper(void **heap_addr, size_t *heap_size);
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Secure Partitions functions
|
* Secure Partitions functions
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
#include <platform_def.h>
|
#include <platform_def.h>
|
||||||
#include <plat/arm/common/plat_arm.h>
|
#include <plat/arm/common/plat_arm.h>
|
||||||
#include <plat/arm/soc/common/soc_css.h>
|
#include <plat/arm/soc/common/soc_css.h>
|
||||||
|
#include <plat/common/platform.h>
|
||||||
|
|
||||||
#include "juno_tzmp1_def.h"
|
#include "juno_tzmp1_def.h"
|
||||||
|
|
||||||
|
@ -144,3 +145,10 @@ void plat_arm_security_setup(void)
|
||||||
init_v550();
|
init_v550();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TRUSTED_BOARD_BOOT
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -33,3 +33,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
|
||||||
|
{
|
||||||
|
return get_mbedtls_heap_helper(heap_addr, heap_size);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue