Commit bc0a0bea authored by Varun Wadekar's avatar Varun Wadekar
Browse files

Tegra: enable SEPARATE_CODE_AND_RODATA build flag



This patch enables the SEPARATE_CODE_AND_RODATA build flag for all
Tegra platforms, to allow setting proper MMU attributes for the RO
data and the code.
Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
parent 7d72bd98
/* /*
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -54,8 +54,12 @@ extern void zeromem16(void *mem, unsigned int length); ...@@ -54,8 +54,12 @@ extern void zeromem16(void *mem, unsigned int length);
* Declarations of linker defined symbols which will help us find the layout * Declarations of linker defined symbols which will help us find the layout
* of trusted SRAM * of trusted SRAM
******************************************************************************/ ******************************************************************************/
extern unsigned long __RO_START__; extern unsigned long __TEXT_START__;
extern unsigned long __RO_END__; extern unsigned long __TEXT_END__;
extern unsigned long __RW_START__;
extern unsigned long __RW_END__;
extern unsigned long __RODATA_START__;
extern unsigned long __RODATA_END__;
extern unsigned long __BL31_END__; extern unsigned long __BL31_END__;
extern uint64_t tegra_bl31_phys_base; extern uint64_t tegra_bl31_phys_base;
...@@ -68,8 +72,10 @@ extern uint64_t tegra_console_base; ...@@ -68,8 +72,10 @@ extern uint64_t tegra_console_base;
* script to ensure that __RO_START__, __RO_END__ & __BL31_END__ linker symbols * script to ensure that __RO_START__, __RO_END__ & __BL31_END__ linker symbols
* refer to page-aligned addresses. * refer to page-aligned addresses.
*/ */
#define BL31_RO_BASE (unsigned long)(&__RO_START__) #define BL31_RW_START (unsigned long)(&__RW_START__)
#define BL31_RO_LIMIT (unsigned long)(&__RO_END__) #define BL31_RW_END (unsigned long)(&__RW_END__)
#define BL31_RODATA_BASE (unsigned long)(&__RODATA_START__)
#define BL31_RODATA_END (unsigned long)(&__RODATA_END__)
#define BL31_END (unsigned long)(&__BL31_END__) #define BL31_END (unsigned long)(&__BL31_END__)
static entry_point_info_t bl33_image_ep_info, bl32_image_ep_info; static entry_point_info_t bl33_image_ep_info, bl32_image_ep_info;
...@@ -302,11 +308,12 @@ void bl31_plat_runtime_setup(void) ...@@ -302,11 +308,12 @@ void bl31_plat_runtime_setup(void)
******************************************************************************/ ******************************************************************************/
void bl31_plat_arch_setup(void) void bl31_plat_arch_setup(void)
{ {
unsigned long bl31_base_pa = tegra_bl31_phys_base; unsigned long rw_start = BL31_RW_START;
unsigned long total_base = bl31_base_pa; unsigned long rw_size = BL31_RW_END - BL31_RW_START;
unsigned long total_size = BL32_BASE - BL31_RO_BASE; unsigned long rodata_start = BL31_RODATA_BASE;
unsigned long ro_start = bl31_base_pa; unsigned long rodata_size = BL31_RODATA_END - BL31_RODATA_BASE;
unsigned long ro_size = BL31_RO_LIMIT - BL31_RO_BASE; unsigned long code_base = (unsigned long)(&__TEXT_START__);
unsigned long code_size = (unsigned long)(&__TEXT_END__) - code_base;
const mmap_region_t *plat_mmio_map = NULL; const mmap_region_t *plat_mmio_map = NULL;
#if USE_COHERENT_MEM #if USE_COHERENT_MEM
unsigned long coh_start, coh_size; unsigned long coh_start, coh_size;
...@@ -314,12 +321,15 @@ void bl31_plat_arch_setup(void) ...@@ -314,12 +321,15 @@ void bl31_plat_arch_setup(void)
plat_params_from_bl2_t *params_from_bl2 = bl31_get_plat_params(); plat_params_from_bl2_t *params_from_bl2 = bl31_get_plat_params();
/* add memory regions */ /* add memory regions */
mmap_add_region(total_base, total_base, mmap_add_region(rw_start, rw_start,
total_size, rw_size,
MT_MEMORY | MT_RW | MT_SECURE); MT_MEMORY | MT_RW | MT_SECURE);
mmap_add_region(ro_start, ro_start, mmap_add_region(rodata_start, rodata_start,
ro_size, rodata_size,
MT_MEMORY | MT_RO | MT_SECURE); MT_RO_DATA | MT_SECURE);
mmap_add_region(code_base, code_base,
code_size,
MT_CODE | MT_SECURE);
/* map TZDRAM used by BL31 as coherent memory */ /* map TZDRAM used by BL31 as coherent memory */
if (TEGRA_TZRAM_BASE == tegra_bl31_phys_base) { if (TEGRA_TZRAM_BASE == tegra_bl31_phys_base) {
......
...@@ -36,6 +36,8 @@ $(eval $(call add_define,ASM_ASSERTION)) ...@@ -36,6 +36,8 @@ $(eval $(call add_define,ASM_ASSERTION))
USE_COHERENT_MEM := 0 USE_COHERENT_MEM := 0
SEPARATE_CODE_AND_RODATA := 1
PLAT_INCLUDES := -Iplat/nvidia/tegra/include/drivers \ PLAT_INCLUDES := -Iplat/nvidia/tegra/include/drivers \
-Iplat/nvidia/tegra/include \ -Iplat/nvidia/tegra/include \
-Iplat/nvidia/tegra/include/${TARGET_SOC} -Iplat/nvidia/tegra/include/${TARGET_SOC}
......
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