Commit 78e61613 authored by Soby Mathew's avatar Soby Mathew
Browse files

Ensure BL31 does not print to boot console by default

It is not ideal for BL31 to continue to use boot console at
runtime which could be potentially uninitialized. This patch
introduces a new optional platform porting API
`bl31_plat_runtime_setup()` which allows 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.

On the ARM Standard platforms, there is an anomaly that
the boot console will be reinitialized on resumption from
system suspend in `arm_system_pwr_domain_resume()`. This
will be resolved in the following patch.

NOTE: The default weak definition of `bl31_plat_runtime_setup()`
disables the BL31 console. To print the BL31 runtime
messages, platforms must override this API and initialize a
runtime console.

Fixes ARM-software/tf-issues#328

Change-Id: Ibaf8346fcceb447fe1a5674094c9f8eb4c09ac4a
parent 487461cb
...@@ -77,7 +77,7 @@ void bl31_main(void) ...@@ -77,7 +77,7 @@ void bl31_main(void)
/* Perform remaining generic architectural setup from EL3 */ /* Perform remaining generic architectural setup from EL3 */
bl31_arch_setup(); bl31_arch_setup();
/* Perform platform setup in BL1 */ /* Perform platform setup in BL31 */
bl31_platform_setup(); bl31_platform_setup();
/* Initialise helper libraries */ /* Initialise helper libraries */
...@@ -109,6 +109,12 @@ void bl31_main(void) ...@@ -109,6 +109,12 @@ void bl31_main(void)
* corresponding to the desired security state after the next ERET. * corresponding to the desired security state after the next ERET.
*/ */
bl31_prepare_next_image_entry(); bl31_prepare_next_image_entry();
/*
* Perform any platform specific runtime setup prior to cold boot exit
* from BL31
*/
bl31_plat_runtime_setup();
} }
/******************************************************************************* /*******************************************************************************
......
...@@ -1172,6 +1172,17 @@ In ARM standard platforms, this function does the following: ...@@ -1172,6 +1172,17 @@ In ARM standard platforms, this function does the following:
* Detects the system topology. * 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] ### Function : bl31_get_next_image_info() [mandatory]
Argument : unsigned int Argument : unsigned int
......
...@@ -179,6 +179,7 @@ void bl31_early_platform_setup(struct bl31_params *from_bl2, ...@@ -179,6 +179,7 @@ void bl31_early_platform_setup(struct bl31_params *from_bl2,
void *plat_params_from_bl2); void *plat_params_from_bl2);
void bl31_plat_arch_setup(void); void bl31_plat_arch_setup(void);
void bl31_platform_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); struct entry_point_info *bl31_plat_get_next_image_ep_info(uint32_t type);
/******************************************************************************* /*******************************************************************************
......
...@@ -28,16 +28,18 @@ ...@@ -28,16 +28,18 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <assert.h> #include <assert.h>
#include <console.h>
#include <platform.h> #include <platform.h>
#include <xlat_tables.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 * provide typical implementations that may be re-used by multiple
* platforms but may also be overridden by a platform if required. * platforms but may also be overridden by a platform if required.
*/ */
#pragma weak bl31_plat_enable_mmu #pragma weak bl31_plat_enable_mmu
#pragma weak bl32_plat_enable_mmu #pragma weak bl32_plat_enable_mmu
#pragma weak bl31_plat_runtime_setup
void bl31_plat_enable_mmu(uint32_t flags) void bl31_plat_enable_mmu(uint32_t flags)
{ {
...@@ -49,6 +51,15 @@ void bl32_plat_enable_mmu(uint32_t flags) ...@@ -49,6 +51,15 @@ void bl32_plat_enable_mmu(uint32_t flags)
enable_mmu_el1(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 #if !ENABLE_PLAT_COMPAT
/* /*
* Helper function for platform_get_pos() when platform compatibility is * Helper function for platform_get_pos() when platform compatibility is
......
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