diff options
author | Antonio Nino Diaz <antonio.ninodiaz@arm.com> | 2019-01-31 17:40:44 +0000 |
---|---|---|
committer | Antonio Nino Diaz <antonio.ninodiaz@arm.com> | 2019-02-27 11:58:09 +0000 |
commit | dcbfa11bd96af98dbb93df3410008f025a131d59 (patch) | |
tree | c9ad50e1908d5c988e2efaea5ed544d82706c281 /bl2/bl2_main.c | |
parent | 9d93fc2f89a00e104bfe6be31f87861c26ba2bf0 (diff) |
BL2_AT_EL3: Enable pointer authentication support
The size increase after enabling options related to ARMv8.3-PAuth is:
+----------------------------+-------+-------+-------+--------+
| | text | bss | data | rodata |
+----------------------------+-------+-------+-------+--------+
| CTX_INCLUDE_PAUTH_REGS = 1 | +44 | +0 | +0 | +0 |
| | 0.2% | | | |
+----------------------------+-------+-------+-------+--------+
| ENABLE_PAUTH = 1 | +712 | +0 | +16 | +0 |
| | 3.1% | | 0.9% | |
+----------------------------+-------+-------+-------+--------+
The results are valid for the following build configuration:
make PLAT=fvp SPD=tspd DEBUG=1 \
BL2_AT_EL3=1 \
CTX_INCLUDE_PAUTH_REGS=1 \
ENABLE_PAUTH=1
Change-Id: I1c0616e7dea30962a92b4fd113428bc30a018320
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Diffstat (limited to 'bl2/bl2_main.c')
-rw-r--r-- | bl2/bl2_main.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/bl2/bl2_main.c b/bl2/bl2_main.c index e7ab7bb7..7d8d60c1 100644 --- a/bl2/bl2_main.c +++ b/bl2/bl2_main.c @@ -21,6 +21,7 @@ #define NEXT_IMAGE "BL31" #endif +#if !BL2_AT_EL3 /******************************************************************************* * Setup function for BL2. ******************************************************************************/ @@ -44,6 +45,31 @@ void bl2_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2, bl2_plat_arch_setup(); } +#else /* if BL2_AT_EL3 */ +/******************************************************************************* + * Setup function for BL2 when BL2_AT_EL3=1. + ******************************************************************************/ +void bl2_el3_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2, + u_register_t arg3) +{ + /* Perform early platform-specific setup */ + bl2_el3_early_platform_setup(arg0, arg1, arg2, arg3); + +#ifdef AARCH64 + /* + * Update pointer authentication key before the MMU is enabled. It is + * saved in the rodata section, that can be writen before enabling the + * MMU. This function must be called after the console is initialized + * in the early platform setup. + */ + bl_handle_pauth(); +#endif /* AARCH64 */ + + /* Perform late platform-specific setup */ + bl2_el3_plat_arch_setup(); +} +#endif /* BL2_AT_EL3 */ + /******************************************************************************* * The only thing to do in BL2 is to load further images and pass control to * next BL. The memory occupied by BL2 will be reclaimed by BL3x stages. BL2 @@ -88,11 +114,11 @@ void bl2_main(void) * be passed to next BL image as an argument. */ smc(BL1_SMC_RUN_IMAGE, (unsigned long)next_bl_ep_info, 0, 0, 0, 0, 0, 0); -#else +#else /* if BL2_AT_EL3 */ NOTICE("BL2: Booting " NEXT_IMAGE "\n"); print_entry_point_info(next_bl_ep_info); console_flush(); bl2_run_next_image(next_bl_ep_info); -#endif +#endif /* BL2_AT_EL3 */ } |