diff --git a/bl31/bl31_main.c b/bl31/bl31_main.c index 9abc395bf08450b7adb382c44a53c1dcdb7c634a..f22e6121c5cfae4cb054c2f27034757189e6daea 100644 --- a/bl31/bl31_main.c +++ b/bl31/bl31_main.c @@ -77,7 +77,7 @@ void bl31_main(void) /* Perform remaining generic architectural setup from EL3 */ bl31_arch_setup(); - /* Perform platform setup in BL1 */ + /* Perform platform setup in BL31 */ bl31_platform_setup(); /* Initialise helper libraries */ @@ -109,6 +109,12 @@ void bl31_main(void) * corresponding to the desired security state after the next ERET. */ bl31_prepare_next_image_entry(); + + /* + * Perform any platform specific runtime setup prior to cold boot exit + * from BL31 + */ + bl31_plat_runtime_setup(); } /******************************************************************************* diff --git a/docs/porting-guide.md b/docs/porting-guide.md index e5b4a9c789e79a6fac7846cd2634345b3c011e6e..2f71d80a95ac60516e13d536049f3549fe30951a 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -1172,6 +1172,17 @@ In ARM standard platforms, this function does the following: * Detects the system topology. +### Function : bl31_plat_runtime_setup() [optional] + + Argument : void + Return : void + +The purpose of this function is allow the platform to perform any BL31 runtime +setup just prior to BL31 exit during cold boot. The default weak +implementation of this function will invoke `console_uninit()` which will +suppress any BL31 runtime logs. + + ### Function : bl31_get_next_image_info() [mandatory] Argument : unsigned int diff --git a/include/plat/common/platform.h b/include/plat/common/platform.h index de9848b7c19f6c0df82c105e5d661ef402ff8f77..956d17f764748c5a2372db41c32c45752a88d7df 100644 --- a/include/plat/common/platform.h +++ b/include/plat/common/platform.h @@ -179,6 +179,7 @@ void bl31_early_platform_setup(struct bl31_params *from_bl2, void *plat_params_from_bl2); void bl31_plat_arch_setup(void); void bl31_platform_setup(void); +void bl31_plat_runtime_setup(void); struct entry_point_info *bl31_plat_get_next_image_ep_info(uint32_t type); /******************************************************************************* diff --git a/plat/common/aarch64/plat_common.c b/plat/common/aarch64/plat_common.c index a6a8476557dc53e3706634a20879368964865953..9070c613cec54f6ad95bebe159bada92367ba4a9 100644 --- a/plat/common/aarch64/plat_common.c +++ b/plat/common/aarch64/plat_common.c @@ -28,16 +28,18 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <assert.h> +#include <console.h> #include <platform.h> #include <xlat_tables.h> /* - * The following 2 platform setup functions are weakly defined. They + * The following platform setup functions are weakly defined. They * provide typical implementations that may be re-used by multiple * platforms but may also be overridden by a platform if required. */ #pragma weak bl31_plat_enable_mmu #pragma weak bl32_plat_enable_mmu +#pragma weak bl31_plat_runtime_setup void bl31_plat_enable_mmu(uint32_t flags) { @@ -49,6 +51,15 @@ void bl32_plat_enable_mmu(uint32_t flags) enable_mmu_el1(flags); } +void bl31_plat_runtime_setup(void) +{ + /* + * Finish the use of console driver in BL31 so that any runtime logs + * from BL31 will be suppressed. + */ + console_uninit(); +} + #if !ENABLE_PLAT_COMPAT /* * Helper function for platform_get_pos() when platform compatibility is