Commit c64873ab authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

uniphier: make uniphier_mmap_setup() work with PIE



BL2_BASE, BL31_BASE, and BL32_BASE are defined in platform_def.h,
that is, determined at link-time.

On the other hand, BL2_END, BL31_END, and BL32_END are derived from
the symbols produced by the linker scripts. So, they are fixed-up
at run-time if ENABLE_PIE is enabled.

To make it work in a position-indepenent manner, use BL_CODE_BASE and
BL_END, both of which are relocatable.

Change-Id: Ic179a7c60eb64c5f3024b178690b3ac7cbd7521b
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent 577b2441
/* /*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
#include "../uniphier.h" #include "../uniphier.h"
#define BL32_SIZE ((BL32_END) - (BL32_BASE))
void tsp_early_platform_setup(void) void tsp_early_platform_setup(void)
{ {
uniphier_console_setup(); uniphier_console_setup();
...@@ -24,6 +22,6 @@ void tsp_platform_setup(void) ...@@ -24,6 +22,6 @@ void tsp_platform_setup(void)
void tsp_plat_arch_setup(void) void tsp_plat_arch_setup(void)
{ {
uniphier_mmap_setup(BL32_BASE, BL32_SIZE, NULL); uniphier_mmap_setup();
enable_mmu_el1(0); enable_mmu_el1(0);
} }
...@@ -53,9 +53,7 @@ void uniphier_scp_open_com(void); ...@@ -53,9 +53,7 @@ void uniphier_scp_open_com(void);
void uniphier_scp_system_off(void); void uniphier_scp_system_off(void);
void uniphier_scp_system_reset(void); void uniphier_scp_system_reset(void);
struct mmap_region; void uniphier_mmap_setup(void);
void uniphier_mmap_setup(uintptr_t total_base, size_t total_size,
const struct mmap_region *mmap);
void uniphier_cci_init(unsigned int soc); void uniphier_cci_init(unsigned int soc);
void uniphier_cci_enable(void); void uniphier_cci_enable(void);
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#include "uniphier.h" #include "uniphier.h"
#define BL2_SIZE ((BL2_END) - (BL2_BASE))
#define UNIPHIER_IMAGE_BUF_BASE 0x84300000UL #define UNIPHIER_IMAGE_BUF_BASE 0x84300000UL
#define UNIPHIER_IMAGE_BUF_SIZE 0x00100000UL #define UNIPHIER_IMAGE_BUF_SIZE 0x00100000UL
...@@ -40,7 +38,7 @@ void bl2_el3_plat_arch_setup(void) ...@@ -40,7 +38,7 @@ void bl2_el3_plat_arch_setup(void)
int skip_scp = 0; int skip_scp = 0;
int ret; int ret;
uniphier_mmap_setup(BL2_BASE, BL2_SIZE, NULL); uniphier_mmap_setup();
enable_mmu_el3(0); enable_mmu_el3(0);
soc = uniphier_get_soc_id(); soc = uniphier_get_soc_id();
......
/* /*
* Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
#include "uniphier.h" #include "uniphier.h"
#define BL31_SIZE ((BL31_END) - (BL31_BASE))
static entry_point_info_t bl32_image_ep_info; static entry_point_info_t bl32_image_ep_info;
static entry_point_info_t bl33_image_ep_info; static entry_point_info_t bl33_image_ep_info;
...@@ -81,6 +79,6 @@ void bl31_platform_setup(void) ...@@ -81,6 +79,6 @@ void bl31_platform_setup(void)
void bl31_plat_arch_setup(void) void bl31_plat_arch_setup(void)
{ {
uniphier_mmap_setup(BL31_BASE, BL31_SIZE, NULL); uniphier_mmap_setup();
enable_mmu_el3(0); enable_mmu_el3(0);
} }
/* /*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -12,13 +12,12 @@ ...@@ -12,13 +12,12 @@
#define UNIPHIER_REG_REGION_BASE 0x50000000ULL #define UNIPHIER_REG_REGION_BASE 0x50000000ULL
#define UNIPHIER_REG_REGION_SIZE 0x20000000ULL #define UNIPHIER_REG_REGION_SIZE 0x20000000ULL
void uniphier_mmap_setup(uintptr_t total_base, size_t total_size, void uniphier_mmap_setup(void)
const struct mmap_region *mmap)
{ {
VERBOSE("Trusted RAM seen by this BL image: %p - %p\n", VERBOSE("Trusted RAM seen by this BL image: %p - %p\n",
(void *)total_base, (void *)(total_base + total_size)); (void *)BL_CODE_BASE, (void *)BL_END);
mmap_add_region(total_base, total_base, mmap_add_region(BL_CODE_BASE, BL_CODE_BASE,
total_size, round_up(BL_END, PAGE_SIZE) - BL_CODE_BASE,
MT_MEMORY | MT_RW | MT_SECURE); MT_MEMORY | MT_RW | MT_SECURE);
/* remap the code section */ /* remap the code section */
...@@ -40,9 +39,5 @@ void uniphier_mmap_setup(uintptr_t total_base, size_t total_size, ...@@ -40,9 +39,5 @@ void uniphier_mmap_setup(uintptr_t total_base, size_t total_size,
UNIPHIER_REG_REGION_SIZE, UNIPHIER_REG_REGION_SIZE,
MT_DEVICE | MT_RW | MT_SECURE); MT_DEVICE | MT_RW | MT_SECURE);
/* additional regions if needed */
if (mmap)
mmap_add(mmap);
init_xlat_tables(); init_xlat_tables();
} }
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