diff --git a/bl31/bl31_main.c b/bl31/bl31_main.c index 9abc395..f22e612 100644 --- a/bl31/bl31_main.c +++ b/bl31/bl31_main.c @@ -77,7 +77,7 @@ /* 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 @@ * 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 e5b4a9c..2f71d80 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -1172,6 +1172,17 @@ * 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 de9848b..956d17f 100644 --- a/include/plat/common/platform.h +++ b/include/plat/common/platform.h @@ -179,6 +179,7 @@ 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 a6a8476..9070c61 100644 --- a/plat/common/aarch64/plat_common.c +++ b/plat/common/aarch64/plat_common.c @@ -28,16 +28,18 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include +#include #include #include /* - * 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 @@ 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