diff options
Diffstat (limited to 'bl2')
-rw-r--r-- | bl2/aarch32/bl2_el3_entrypoint.S | 2 | ||||
-rw-r--r-- | bl2/bl2.ld.S | 59 | ||||
-rw-r--r-- | bl2/bl2.mk | 6 | ||||
-rw-r--r-- | bl2/bl2_el3.ld.S | 110 | ||||
-rw-r--r-- | bl2/bl2_image_load_v2.c | 31 | ||||
-rw-r--r-- | bl2/bl2_main.c | 18 |
6 files changed, 58 insertions, 168 deletions
diff --git a/bl2/aarch32/bl2_el3_entrypoint.S b/bl2/aarch32/bl2_el3_entrypoint.S index 9b4da6b13..2e851e61a 100644 --- a/bl2/aarch32/bl2_el3_entrypoint.S +++ b/bl2/aarch32/bl2_el3_entrypoint.S @@ -87,5 +87,5 @@ func bl2_run_next_image add r8, r8, #ENTRY_POINT_INFO_ARGS_OFFSET ldm r8, {r0, r1, r2, r3} - eret + exception_return endfunc bl2_run_next_image diff --git a/bl2/bl2.ld.S b/bl2/bl2.ld.S index 6230562ed..37849c312 100644 --- a/bl2/bl2.ld.S +++ b/bl2/bl2.ld.S @@ -1,11 +1,10 @@ /* - * Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ -#include <platform_def.h> - +#include <common/bl_common.ld.h> #include <lib/xlat_tables/xlat_tables_defs.h> OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT) @@ -46,11 +45,7 @@ SECTIONS __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) - /* Ensure 8-byte alignment for descriptors and ensure inclusion */ - . = ALIGN(8); - __PARSER_LIB_DESCS_START__ = .; - KEEP(*(.img_parser_lib_descs)) - __PARSER_LIB_DESCS_END__ = .; + RODATA_COMMON . = ALIGN(PAGE_SIZE); __RODATA_END__ = .; @@ -62,11 +57,7 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) - /* Ensure 8-byte alignment for descriptors and ensure inclusion */ - . = ALIGN(8); - __PARSER_LIB_DESCS_START__ = .; - KEEP(*(.img_parser_lib_descs)) - __PARSER_LIB_DESCS_END__ = .; + RODATA_COMMON *(.vectors) __RO_END_UNALIGNED__ = .; @@ -86,44 +77,10 @@ SECTIONS */ __RW_START__ = . ; - /* - * .data must be placed at a lower address than the stacks if the stack - * protector is enabled. Alternatively, the .data.stack_protector_canary - * section can be placed independently of the main .data section. - */ - .data . : { - __DATA_START__ = .; - *(SORT_BY_ALIGNMENT(.data*)) - __DATA_END__ = .; - } >RAM - - stacks (NOLOAD) : { - __STACKS_START__ = .; - *(tzfw_normal_stacks) - __STACKS_END__ = .; - } >RAM - - /* - * The .bss section gets initialised to 0 at runtime. - * Its base address should be 16-byte aligned for better performance of the - * zero-initialization code. - */ - .bss : ALIGN(16) { - __BSS_START__ = .; - *(SORT_BY_ALIGNMENT(.bss*)) - *(COMMON) - __BSS_END__ = .; - } >RAM - - /* - * The xlat_table section is for full, aligned page tables (4K). - * Removing them from .bss avoids forcing 4K alignment on - * the .bss section. The tables are initialized to zero by the translation - * tables library. - */ - xlat_table (NOLOAD) : { - *(xlat_table) - } >RAM + DATA_SECTION >RAM + STACK_SECTION >RAM + BSS_SECTION >RAM + XLAT_TABLE_SECTION >RAM #if USE_COHERENT_MEM /* diff --git a/bl2/bl2.mk b/bl2/bl2.mk index 6dc0f1825..735e7e04f 100644 --- a/bl2/bl2.mk +++ b/bl2/bl2.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -25,6 +25,10 @@ BL2_SOURCES += bl2/${ARCH}/bl2_el3_entrypoint.S \ lib/cpus/${ARCH}/cpu_helpers.S \ lib/cpus/errata_report.c +ifeq (${DISABLE_MTPMU},1) +BL2_SOURCES += lib/extensions/mtpmu/${ARCH}/mtpmu.S +endif + ifeq (${ARCH},aarch64) BL2_SOURCES += lib/cpus/aarch64/dsu_helpers.S endif diff --git a/bl2/bl2_el3.ld.S b/bl2/bl2_el3.ld.S index b6570ee3e..bc1794c06 100644 --- a/bl2/bl2_el3.ld.S +++ b/bl2/bl2_el3.ld.S @@ -1,11 +1,10 @@ /* - * 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 */ -#include <platform_def.h> - +#include <common/bl_common.ld.h> #include <lib/xlat_tables/xlat_tables_defs.h> OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT) @@ -54,30 +53,7 @@ SECTIONS __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) - /* Ensure 8-byte alignment for descriptors and ensure inclusion */ - . = ALIGN(8); - __PARSER_LIB_DESCS_START__ = .; - KEEP(*(.img_parser_lib_descs)) - __PARSER_LIB_DESCS_END__ = .; - - /* - * Ensure 8-byte alignment for cpu_ops so that its fields are also - * aligned. Also ensure cpu_ops inclusion. - */ - . = ALIGN(8); - __CPU_OPS_START__ = .; - KEEP(*(cpu_ops)) - __CPU_OPS_END__ = .; - - /* - * Keep the .got section in the RO section as it is patched - * prior to enabling the MMU and having the .got in RO is better for - * security. GOT is a table of addresses so ensure 8-byte alignment. - */ - . = ALIGN(8); - __GOT_START__ = .; - *(.got) - __GOT_END__ = .; + RODATA_COMMON . = ALIGN(PAGE_SIZE); __RODATA_END__ = .; @@ -95,30 +71,7 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) - /* - * Ensure 8-byte alignment for cpu_ops so that its fields are also - * aligned. Also ensure cpu_ops inclusion. - */ - . = ALIGN(8); - __CPU_OPS_START__ = .; - KEEP(*(cpu_ops)) - __CPU_OPS_END__ = .; - - /* Ensure 8-byte alignment for descriptors and ensure inclusion */ - . = ALIGN(8); - __PARSER_LIB_DESCS_START__ = .; - KEEP(*(.img_parser_lib_descs)) - __PARSER_LIB_DESCS_END__ = .; - - /* - * Keep the .got section in the RO section as it is patched - * prior to enabling the MMU and having the .got in RO is better for - * security. GOT is a table of addresses so ensure 8-byte alignment. - */ - . = ALIGN(8); - __GOT_START__ = .; - *(.got) - __GOT_END__ = .; + RODATA_COMMON *(.vectors) __RO_END_UNALIGNED__ = .; @@ -148,55 +101,14 @@ SECTIONS */ __RW_START__ = . ; - /* - * .data must be placed at a lower address than the stacks if the stack - * protector is enabled. Alternatively, the .data.stack_protector_canary - * section can be placed independently of the main .data section. - */ - .data . : { - __DATA_RAM_START__ = .; - *(SORT_BY_ALIGNMENT(.data*)) - __DATA_RAM_END__ = .; - } >RAM AT>ROM - - /* - * .rela.dyn needs to come after .data for the read-elf utility to parse - * this section correctly. Ensure 8-byte alignment so that the fields of - * RELA data structure are aligned. - */ - . = ALIGN(8); - __RELA_START__ = .; - .rela.dyn . : { - } >RAM - __RELA_END__ = .; - - stacks (NOLOAD) : { - __STACKS_START__ = .; - *(tzfw_normal_stacks) - __STACKS_END__ = .; - } >RAM - - /* - * The .bss section gets initialised to 0 at runtime. - * Its base address should be 16-byte aligned for better performance of the - * zero-initialization code. - */ - .bss : ALIGN(16) { - __BSS_START__ = .; - *(SORT_BY_ALIGNMENT(.bss*)) - *(COMMON) - __BSS_END__ = .; - } >RAM + DATA_SECTION >RAM AT>ROM + __DATA_RAM_START__ = __DATA_START__; + __DATA_RAM_END__ = __DATA_END__; - /* - * The xlat_table section is for full, aligned page tables (4K). - * Removing them from .bss avoids forcing 4K alignment on - * the .bss section. The tables are initialized to zero by the translation - * tables library. - */ - xlat_table (NOLOAD) : { - *(xlat_table) - } >RAM + RELA_SECTION >RAM + STACK_SECTION >RAM + BSS_SECTION >RAM + XLAT_TABLE_SECTION >RAM #if USE_COHERENT_MEM /* diff --git a/bl2/bl2_image_load_v2.c b/bl2/bl2_image_load_v2.c index dd53e1d2b..48c9beca6 100644 --- a/bl2/bl2_image_load_v2.c +++ b/bl2/bl2_image_load_v2.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -35,20 +35,21 @@ struct entry_point_info *bl2_load_images(void) * Get information about the images to load. */ bl2_load_info = plat_get_bl_image_load_info(); - assert(bl2_load_info); - assert(bl2_load_info->head); + assert(bl2_load_info != NULL); + assert(bl2_load_info->head != NULL); assert(bl2_load_info->h.type == PARAM_BL_LOAD_INFO); assert(bl2_load_info->h.version >= VERSION_2); bl2_node_info = bl2_load_info->head; - while (bl2_node_info) { + while (bl2_node_info != NULL) { /* * Perform platform setup before loading the image, * if indicated in the image attributes AND if NOT * already done before. */ - if (bl2_node_info->image_info->h.attr & IMAGE_ATTRIB_PLAT_SETUP) { - if (plat_setup_done) { + if ((bl2_node_info->image_info->h.attr & + IMAGE_ATTRIB_PLAT_SETUP) != 0U) { + if (plat_setup_done != 0) { WARN("BL2: Platform setup already done!!\n"); } else { INFO("BL2: Doing platform setup\n"); @@ -58,17 +59,19 @@ struct entry_point_info *bl2_load_images(void) } err = bl2_plat_handle_pre_image_load(bl2_node_info->image_id); - if (err) { + if (err != 0) { ERROR("BL2: Failure in pre image load handling (%i)\n", err); plat_error_handler(err); } - if (!(bl2_node_info->image_info->h.attr & IMAGE_ATTRIB_SKIP_LOADING)) { + if ((bl2_node_info->image_info->h.attr & + IMAGE_ATTRIB_SKIP_LOADING) == 0U) { INFO("BL2: Loading image id %d\n", bl2_node_info->image_id); err = load_auth_image(bl2_node_info->image_id, bl2_node_info->image_info); - if (err) { - ERROR("BL2: Failed to load image (%i)\n", err); + if (err != 0) { + ERROR("BL2: Failed to load image id %d (%i)\n", + bl2_node_info->image_id, err); plat_error_handler(err); } } else { @@ -77,7 +80,7 @@ struct entry_point_info *bl2_load_images(void) /* Allow platform to handle image information. */ err = bl2_plat_handle_post_image_load(bl2_node_info->image_id); - if (err) { + if (err != 0) { ERROR("BL2: Failure in post image load handling (%i)\n", err); plat_error_handler(err); } @@ -90,11 +93,11 @@ struct entry_point_info *bl2_load_images(void) * Get information to pass to the next image. */ bl2_to_next_bl_params = plat_get_next_bl_params(); - assert(bl2_to_next_bl_params); - assert(bl2_to_next_bl_params->head); + assert(bl2_to_next_bl_params != NULL); + assert(bl2_to_next_bl_params->head != NULL); assert(bl2_to_next_bl_params->h.type == PARAM_BL_PARAMS); assert(bl2_to_next_bl_params->h.version >= VERSION_2); - assert(bl2_to_next_bl_params->head->ep_info); + assert(bl2_to_next_bl_params->head->ep_info != NULL); /* Populate arg0 for the next BL image if not already provided */ if (bl2_to_next_bl_params->head->ep_info->args.arg0 == (u_register_t)0) diff --git a/bl2/bl2_main.c b/bl2/bl2_main.c index 802c17464..203e1d4b1 100644 --- a/bl2/bl2_main.c +++ b/bl2/bl2_main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -14,6 +14,9 @@ #include <common/debug.h> #include <drivers/auth/auth_mod.h> #include <drivers/console.h> +#if MEASURED_BOOT +#include <drivers/measured_boot/measured_boot.h> +#endif #include <lib/extensions/pauth.h> #include <plat/common/platform.h> @@ -88,14 +91,25 @@ void bl2_main(void) #if TRUSTED_BOARD_BOOT /* Initialize authentication module */ auth_mod_init(); + +#if MEASURED_BOOT + /* Initialize measured boot module */ + measured_boot_init(); + +#endif /* MEASURED_BOOT */ #endif /* TRUSTED_BOARD_BOOT */ - /* initialize boot source */ + /* Initialize boot source */ bl2_plat_preload_setup(); /* Load the subsequent bootloader images. */ next_bl_ep_info = bl2_load_images(); +#if MEASURED_BOOT + /* Finalize measured boot */ + measured_boot_finish(); +#endif /* MEASURED_BOOT */ + #if !BL2_AT_EL3 #ifndef __aarch64__ /* |