Commit 29d13744 authored by Mark Dykes's avatar Mark Dykes Committed by TrustedFirmware Code Review
Browse files

Merge "plat/arm: Add support for SEPARATE_NOBITS_REGION" into integration

parents aa386f7a d433bbdd
/* /*
* Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -395,13 +395,21 @@ ...@@ -395,13 +395,21 @@
/******************************************************************************* /*******************************************************************************
* BL31 specific defines. * BL31 specific defines.
******************************************************************************/ ******************************************************************************/
#if ARM_BL31_IN_DRAM #if ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION
/* /*
* Put BL31 at the bottom of TZC secured DRAM * Put BL31 at the bottom of TZC secured DRAM
*/ */
#define BL31_BASE ARM_AP_TZC_DRAM1_BASE #define BL31_BASE ARM_AP_TZC_DRAM1_BASE
#define BL31_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ #define BL31_LIMIT (ARM_AP_TZC_DRAM1_BASE + \
PLAT_ARM_MAX_BL31_SIZE) PLAT_ARM_MAX_BL31_SIZE)
/*
* For SEPARATE_NOBITS_REGION, BL31 PROGBITS are loaded in TZC secured DRAM.
* And BL31 NOBITS are loaded in Trusted SRAM such that BL2 is overwritten.
*/
#if SEPARATE_NOBITS_REGION
#define BL31_NOBITS_BASE BL2_BASE
#define BL31_NOBITS_LIMIT BL2_LIMIT
#endif /* SEPARATE_NOBITS_REGION */
#elif (RESET_TO_BL31) #elif (RESET_TO_BL31)
/* Ensure Position Independent support (PIE) is enabled for this config.*/ /* Ensure Position Independent support (PIE) is enabled for this config.*/
# if !ENABLE_PIE # if !ENABLE_PIE
......
/* /*
* Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -56,6 +56,14 @@ IMPORT_SYM(unsigned long, __INIT_CODE_END__, BL_INIT_CODE_END); ...@@ -56,6 +56,14 @@ IMPORT_SYM(unsigned long, __INIT_CODE_END__, BL_INIT_CODE_END);
MT_CODE | MT_SECURE) MT_CODE | MT_SECURE)
#endif #endif
#if SEPARATE_NOBITS_REGION
#define MAP_BL31_NOBITS MAP_REGION_FLAT( \
BL31_NOBITS_BASE, \
BL31_NOBITS_LIMIT \
- BL31_NOBITS_BASE, \
MT_MEMORY | MT_RW | MT_SECURE)
#endif
/******************************************************************************* /*******************************************************************************
* Return a pointer to the 'entry_point_info' structure of the next image for the * Return a pointer to the 'entry_point_info' structure of the next image for the
* security state specified. BL33 corresponds to the non-secure image type * security state specified. BL33 corresponds to the non-secure image type
...@@ -294,6 +302,9 @@ void __init arm_bl31_plat_arch_setup(void) ...@@ -294,6 +302,9 @@ void __init arm_bl31_plat_arch_setup(void)
MAP_BL31_TOTAL, MAP_BL31_TOTAL,
#if RECLAIM_INIT_CODE #if RECLAIM_INIT_CODE
MAP_BL_INIT_CODE, MAP_BL_INIT_CODE,
#endif
#if SEPARATE_NOBITS_REGION
MAP_BL31_NOBITS,
#endif #endif
ARM_MAP_BL_RO, ARM_MAP_BL_RO,
#if USE_ROMLIB #if USE_ROMLIB
......
# #
# Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved. # Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
# #
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
...@@ -125,6 +125,23 @@ ENABLE_PMF := 1 ...@@ -125,6 +125,23 @@ ENABLE_PMF := 1
# mapping the former as executable and the latter as execute-never. # mapping the former as executable and the latter as execute-never.
SEPARATE_CODE_AND_RODATA := 1 SEPARATE_CODE_AND_RODATA := 1
# On ARM platforms, disable SEPARATE_NOBITS_REGION by default. Both PROGBITS
# and NOBITS sections of BL31 image are adjacent to each other and loaded
# into Trusted SRAM.
SEPARATE_NOBITS_REGION := 0
# In order to support SEPARATE_NOBITS_REGION for Arm platforms, we need to load
# BL31 PROGBITS into secure DRAM space and BL31 NOBITS into SRAM. Hence mandate
# the build to require that ARM_BL31_IN_DRAM is enabled as well.
ifeq ($(SEPARATE_NOBITS_REGION),1)
ifneq ($(ARM_BL31_IN_DRAM),1)
$(error For SEPARATE_NOBITS_REGION, ARM_BL31_IN_DRAM must be enabled)
endif
ifneq ($(RECLAIM_INIT_CODE),0)
$(error For SEPARATE_NOBITS_REGION, RECLAIM_INIT_CODE cannot be supported)
endif
endif
# Disable ARM Cryptocell by default # Disable ARM Cryptocell by default
ARM_CRYPTOCELL_INTEG := 0 ARM_CRYPTOCELL_INTEG := 0
$(eval $(call assert_boolean,ARM_CRYPTOCELL_INTEG)) $(eval $(call assert_boolean,ARM_CRYPTOCELL_INTEG))
......
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