Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
72db70ca
Commit
72db70ca
authored
Apr 12, 2019
by
Antonio Niño Díaz
Committed by
TrustedFirmware Code Review
Apr 12, 2019
Browse files
Merge changes from topic "av/tls-heap" into integration
* changes: Mbed TLS: Remove weak heap implementation sgm: Fix bl2 sources
parents
5e2f1ce2
2374ab17
Changes
11
Hide whitespace changes
Inline
Side-by-side
docs/porting-guide.rst
View file @
72db70ca
...
...
@@ -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
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
-----------------------------
...
...
@@ -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
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
---------------------------------------------
...
...
drivers/auth/mbedtls/mbedtls_common.c
View file @
72db70ca
...
...
@@ -16,8 +16,6 @@
#include <drivers/auth/mbedtls/mbedtls_config.h>
#include <plat/common/platform.h>
#pragma weak plat_get_mbedtls_heap
static
void
cleanup
(
void
)
{
ERROR
(
"EXIT from BL2
\n
"
);
...
...
@@ -58,10 +56,10 @@ void mbedtls_init(void)
}
/*
* The following
default implementation of the
function simply returns the
*
by default allocated heap
.
* The following
helper
function simply returns the
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
];
...
...
include/plat/common/platform.h
View file @
72db70ca
...
...
@@ -47,6 +47,7 @@ int plat_get_image_source(unsigned int image_id,
uintptr_t
plat_get_ns_image_entrypoint
(
void
);
unsigned
int
plat_my_core_pos
(
void
);
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
/*
...
...
@@ -103,7 +104,6 @@ void plat_panic_handler(void) __dead2;
const
char
*
plat_log_get_prefix
(
unsigned
int
log_level
);
void
bl2_plat_preload_setup
(
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
);
/*******************************************************************************
...
...
@@ -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_ctr2
(
void
*
cookie
,
const
struct
auth_img_desc_s
*
img_desc
,
unsigned
int
nv_ctr
);
int
get_mbedtls_heap_helper
(
void
**
heap_addr
,
size_t
*
heap_size
);
/*******************************************************************************
* Secure Partitions functions
...
...
plat/arm/board/juno/juno_security.c
View file @
72db70ca
/*
* Copyright (c) 2014-201
8
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
9
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -10,6 +10,7 @@
#include <platform_def.h>
#include <plat/arm/common/plat_arm.h>
#include <plat/arm/soc/common/soc_css.h>
#include <plat/common/platform.h>
#include "juno_tzmp1_def.h"
...
...
@@ -144,3 +145,10 @@ void plat_arm_security_setup(void)
init_v550
();
#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
plat/arm/css/sgm/sgm-common.mk
View file @
72db70ca
#
# 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
#
...
...
@@ -12,7 +12,7 @@ PLAT_BL_COMMON_SOURCES := ${CSS_SGM_BASE}/sgm_mmap_config.c \
${CSS_SGM_BASE}
/aarch64/css_sgm_helpers.S
SECURITY_SOURCES
:=
drivers/arm/tzc/tzc_dmc500.c
\
plat/arm/common/arm_tzc_dmc500.c
\
plat/arm/common/arm_tzc_dmc500.c
\
${CSS_SGM_BASE}
/sgm_security.c
SGM_CPU_SOURCES
:=
lib/cpus/aarch64/cortex_a55.S
\
...
...
@@ -30,10 +30,11 @@ SGM_GIC_SOURCES := drivers/arm/gic/common/gic_common.c \
BL1_SOURCES
+=
$(SGM_CPU_SOURCES)
\
${INTERCONNECT_SOURCES}
\
${CSS_SGM_BASE}
/sgm_bl1_setup.c
\
${CSS_SGM_BASE}
/sgm_bl1_setup.c
\
${CSS_SGM_BASE}
/sgm_plat_config.c
BL2_SOURCES
+=
${SECURITY_SOURCES}
BL2_SOURCES
+=
${SECURITY_SOURCES}
\
${CSS_SGM_BASE}
/sgm_plat_config.c
BL2U_SOURCES
+=
${SECURITY_SOURCES}
...
...
@@ -41,7 +42,7 @@ BL31_SOURCES += $(SGM_CPU_SOURCES) \
${INTERCONNECT_SOURCES}
\
${SECURITY_SOURCES}
\
${SGM_GIC_SOURCES}
\
${CSS_SGM_BASE}
/sgm_topology.c
\
${CSS_SGM_BASE}
/sgm_topology.c
\
${CSS_SGM_BASE}
/sgm_bl31_setup.c
\
${CSS_SGM_BASE}
/sgm_plat_config.c
...
...
plat/hisilicon/hikey/hikey_tbbr.c
View file @
72db70ca
/*
* 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
*/
...
...
@@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
{
return
1
;
}
int
plat_get_mbedtls_heap
(
void
**
heap_addr
,
size_t
*
heap_size
)
{
return
get_mbedtls_heap_helper
(
heap_addr
,
heap_size
);
}
plat/hisilicon/hikey960/hikey960_tbbr.c
View file @
72db70ca
/*
* 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
*/
...
...
@@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
{
return
1
;
}
int
plat_get_mbedtls_heap
(
void
**
heap_addr
,
size_t
*
heap_size
)
{
return
get_mbedtls_heap_helper
(
heap_addr
,
heap_size
);
}
plat/imx/imx7/warp7/warp7_trusted_boot.c
View file @
72db70ca
/*
* 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
*/
...
...
@@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
{
return
1
;
}
int
plat_get_mbedtls_heap
(
void
**
heap_addr
,
size_t
*
heap_size
)
{
return
get_mbedtls_heap_helper
(
heap_addr
,
heap_size
);
}
plat/qemu/qemu_trusted_boot.c
View file @
72db70ca
/*
* 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
*/
...
...
@@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
{
return
1
;
}
int
plat_get_mbedtls_heap
(
void
**
heap_addr
,
size_t
*
heap_size
)
{
return
get_mbedtls_heap_helper
(
heap_addr
,
heap_size
);
}
plat/rpi3/rpi3_trusted_boot.c
View file @
72db70ca
/*
* Copyright (c) 2017-201
8
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017-201
9
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -29,3 +29,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
{
return
1
;
}
int
plat_get_mbedtls_heap
(
void
**
heap_addr
,
size_t
*
heap_size
)
{
return
get_mbedtls_heap_helper
(
heap_addr
,
heap_size
);
}
plat/socionext/uniphier/uniphier_tbbr.c
View file @
72db70ca
/*
* 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
*/
...
...
@@ -33,3 +33,8 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
{
return
0
;
}
int
plat_get_mbedtls_heap
(
void
**
heap_addr
,
size_t
*
heap_size
)
{
return
get_mbedtls_heap_helper
(
heap_addr
,
heap_size
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment