mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 18:14:24 +00:00
feat(bl2): add support to separate no-loadable sections
Add new options SEPARATE_BL2_NOLOAD_REGION to separate no-loadable sections (.bss, stack, page tables) to a ram region specified by BL2_NOLOAD_START and BL2_NOLOAD_LIMIT. Signed-off-by: Jiafei Pan <Jiafei.Pan@nxp.com> Change-Id: I844ee0fc405474af0aff978d292c826fbe0a82fd
This commit is contained in:
parent
ceae374357
commit
96a8ed14b7
6 changed files with 47 additions and 6 deletions
2
Makefile
2
Makefile
|
@ -1021,6 +1021,7 @@ $(eval $(call assert_booleans,\
|
||||||
RESET_TO_BL31 \
|
RESET_TO_BL31 \
|
||||||
SAVE_KEYS \
|
SAVE_KEYS \
|
||||||
SEPARATE_CODE_AND_RODATA \
|
SEPARATE_CODE_AND_RODATA \
|
||||||
|
SEPARATE_BL2_NOLOAD_REGION \
|
||||||
SEPARATE_NOBITS_REGION \
|
SEPARATE_NOBITS_REGION \
|
||||||
SPIN_ON_BL1_EXIT \
|
SPIN_ON_BL1_EXIT \
|
||||||
SPM_MM \
|
SPM_MM \
|
||||||
|
@ -1136,6 +1137,7 @@ $(eval $(call add_defines,\
|
||||||
RAS_EXTENSION \
|
RAS_EXTENSION \
|
||||||
RESET_TO_BL31 \
|
RESET_TO_BL31 \
|
||||||
SEPARATE_CODE_AND_RODATA \
|
SEPARATE_CODE_AND_RODATA \
|
||||||
|
SEPARATE_BL2_NOLOAD_REGION \
|
||||||
SEPARATE_NOBITS_REGION \
|
SEPARATE_NOBITS_REGION \
|
||||||
RECLAIM_INIT_CODE \
|
RECLAIM_INIT_CODE \
|
||||||
SPD_${SPD} \
|
SPD_${SPD} \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -17,6 +17,11 @@ MEMORY {
|
||||||
RAM (rwx): ORIGIN = BL2_RW_BASE, LENGTH = BL2_RW_LIMIT - BL2_RW_BASE
|
RAM (rwx): ORIGIN = BL2_RW_BASE, LENGTH = BL2_RW_LIMIT - BL2_RW_BASE
|
||||||
#else
|
#else
|
||||||
RAM (rwx): ORIGIN = BL2_BASE, LENGTH = BL2_LIMIT - BL2_BASE
|
RAM (rwx): ORIGIN = BL2_BASE, LENGTH = BL2_LIMIT - BL2_BASE
|
||||||
|
#if SEPARATE_BL2_NOLOAD_REGION
|
||||||
|
RAM_NOLOAD (rw!a): ORIGIN = BL2_NOLOAD_START, LENGTH = BL2_NOLOAD_LIMIT - BL2_NOLOAD_START
|
||||||
|
#else
|
||||||
|
#define RAM_NOLOAD RAM
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,9 +111,18 @@ SECTIONS
|
||||||
__DATA_RAM_END__ = __DATA_END__;
|
__DATA_RAM_END__ = __DATA_END__;
|
||||||
|
|
||||||
RELA_SECTION >RAM
|
RELA_SECTION >RAM
|
||||||
STACK_SECTION >RAM
|
#if SEPARATE_BL2_NOLOAD_REGION
|
||||||
BSS_SECTION >RAM
|
SAVED_ADDR = .;
|
||||||
XLAT_TABLE_SECTION >RAM
|
. = BL2_NOLOAD_START;
|
||||||
|
__BL2_NOLOAD_START__ = .;
|
||||||
|
#endif
|
||||||
|
STACK_SECTION >RAM_NOLOAD
|
||||||
|
BSS_SECTION >RAM_NOLOAD
|
||||||
|
XLAT_TABLE_SECTION >RAM_NOLOAD
|
||||||
|
#if SEPARATE_BL2_NOLOAD_REGION
|
||||||
|
__BL2_NOLOAD_END__ = .;
|
||||||
|
. = SAVED_ADDR;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if USE_COHERENT_MEM
|
#if USE_COHERENT_MEM
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -647,6 +647,13 @@ Common build options
|
||||||
``BL31_NOBITS_LIMIT``. When the option is ``0`` (the default), NOBITS
|
``BL31_NOBITS_LIMIT``. When the option is ``0`` (the default), NOBITS
|
||||||
sections are placed in RAM immediately following the loaded firmware image.
|
sections are placed in RAM immediately following the loaded firmware image.
|
||||||
|
|
||||||
|
- ``SEPARATE_BL2_NOLOAD_REGION``: Setting this option to ``1`` allows the
|
||||||
|
NOLOAD sections of BL2 (.bss, stacks, page tables) to be allocated in RAM
|
||||||
|
discontiguous from loaded firmware images. When set, the platform need to
|
||||||
|
provide definitions of ``BL2_NOLOAD_START`` and ``BL2_NOLOAD_LIMIT``. This
|
||||||
|
flag is disabled by default and NOLOAD sections are placed in RAM immediately
|
||||||
|
following the loaded firmware image.
|
||||||
|
|
||||||
- ``SMC_PCI_SUPPORT``: This option allows platforms to handle PCI configuration
|
- ``SMC_PCI_SUPPORT``: This option allows platforms to handle PCI configuration
|
||||||
access requests via a standard SMCCC defined in `DEN0115`_. When combined with
|
access requests via a standard SMCCC defined in `DEN0115`_. When combined with
|
||||||
UEFI+ACPI this can provide a certain amount of OS forward compatibility
|
UEFI+ACPI this can provide a certain amount of OS forward compatibility
|
||||||
|
@ -961,7 +968,7 @@ Firmware update options
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
*Copyright (c) 2019-2021, Arm Limited. All rights reserved.*
|
*Copyright (c) 2019-2022, Arm Limited. All rights reserved.*
|
||||||
|
|
||||||
.. _DEN0115: https://developer.arm.com/docs/den0115/latest
|
.. _DEN0115: https://developer.arm.com/docs/den0115/latest
|
||||||
.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
|
.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -398,6 +398,12 @@
|
||||||
ldr r1, =__RW_END__
|
ldr r1, =__RW_END__
|
||||||
sub r1, r1, r0
|
sub r1, r1, r0
|
||||||
bl inv_dcache_range
|
bl inv_dcache_range
|
||||||
|
#if defined(IMAGE_BL2) && SEPARATE_BL2_NOLOAD_REGION
|
||||||
|
ldr r0, =__BL2_NOLOAD_START__
|
||||||
|
ldr r1, =__BL2_NOLOAD_END__
|
||||||
|
sub r1, r1, r0
|
||||||
|
bl inv_dcache_range
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -469,6 +469,14 @@
|
||||||
sub x1, x1, x0
|
sub x1, x1, x0
|
||||||
bl inv_dcache_range
|
bl inv_dcache_range
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(IMAGE_BL2) && SEPARATE_BL2_NOLOAD_REGION
|
||||||
|
adrp x0, __BL2_NOLOAD_START__
|
||||||
|
add x0, x0, :lo12:__BL2_NOLOAD_START__
|
||||||
|
adrp x1, __BL2_NOLOAD_END__
|
||||||
|
add x1, x1, :lo12:__BL2_NOLOAD_END__
|
||||||
|
sub x1, x1, x0
|
||||||
|
bl inv_dcache_range
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
adrp x0, __BSS_START__
|
adrp x0, __BSS_START__
|
||||||
add x0, x0, :lo12:__BSS_START__
|
add x0, x0, :lo12:__BSS_START__
|
||||||
|
|
|
@ -250,6 +250,10 @@ SEPARATE_CODE_AND_RODATA := 0
|
||||||
# separate memory region, which may be discontiguous from the rest of BL31.
|
# separate memory region, which may be discontiguous from the rest of BL31.
|
||||||
SEPARATE_NOBITS_REGION := 0
|
SEPARATE_NOBITS_REGION := 0
|
||||||
|
|
||||||
|
# Put BL2 NOLOAD sections (.bss, stacks, page tables) in a separate memory
|
||||||
|
# region, platform Makefile is free to override this value.
|
||||||
|
SEPARATE_BL2_NOLOAD_REGION := 0
|
||||||
|
|
||||||
# If the BL31 image initialisation code is recalimed after use for the secondary
|
# If the BL31 image initialisation code is recalimed after use for the secondary
|
||||||
# cores stack
|
# cores stack
|
||||||
RECLAIM_INIT_CODE := 0
|
RECLAIM_INIT_CODE := 0
|
||||||
|
|
Loading…
Add table
Reference in a new issue