aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/console/cbmem_console.h6
-rw-r--r--src/lib/cbmem_console.c26
2 files changed, 25 insertions, 7 deletions
diff --git a/src/include/console/cbmem_console.h b/src/include/console/cbmem_console.h
index 06013f2a22..35eae216a1 100644
--- a/src/include/console/cbmem_console.h
+++ b/src/include/console/cbmem_console.h
@@ -26,8 +26,10 @@ void cbmemc_init(void);
void cbmemc_tx_byte(unsigned char data);
#define __CBMEM_CONSOLE_ENABLE__ CONFIG_CONSOLE_CBMEM && \
- (ENV_RAMSTAGE || (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) && \
- (ENV_ROMSTAGE || (ENV_BOOTBLOCK && CONFIG_BOOTBLOCK_CONSOLE))))
+ (ENV_RAMSTAGE || ENV_VERSTAGE || \
+ (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) && \
+ (ENV_ROMSTAGE || (ENV_BOOTBLOCK && CONFIG_BOOTBLOCK_CONSOLE)))\
+ )
#if __CBMEM_CONSOLE_ENABLE__
static inline void __cbmemc_init(void) { cbmemc_init(); }
diff --git a/src/lib/cbmem_console.c b/src/lib/cbmem_console.c
index 464294cabc..d8fc7a952c 100644
--- a/src/lib/cbmem_console.c
+++ b/src/lib/cbmem_console.c
@@ -105,12 +105,28 @@ static inline void init_console_ptr(void *storage, u32 total_space, int flags)
void cbmemc_init(void)
{
#ifdef __PRE_RAM__
- int flags = CBMEMC_RESET;
+ int flags = 0;
- /* Do not clear output from bootblock. */
- if (ENV_ROMSTAGE && !IS_ENABLED(CONFIG_CACHE_AS_RAM))
- if (IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE))
- flags = 0;
+ /* If in bootblock always initialize the console first. */
+ if (ENV_BOOTBLOCK)
+ flags = CBMEMC_RESET;
+ else if (ENV_ROMSTAGE) {
+ /* Initialize console for the first time in romstage when
+ * there's no prior stage that initialized it first. */
+ if (!IS_ENABLED(CONFIG_VBOOT_STARTS_IN_BOOTBLOCK) &&
+ !IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE))
+ flags = CBMEMC_RESET;
+ } else if (ENV_VERSTAGE) {
+ /*
+ * Initialize console for the first time in verstage when
+ * there is no console in bootblock. Otherwise honor the
+ * bootblock console when verstage comes right after
+ * bootblock.
+ */
+ if (IS_ENABLED(CONFIG_VBOOT_STARTS_IN_BOOTBLOCK) &&
+ !IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE))
+ flags = CBMEMC_RESET;
+ }
init_console_ptr(_preram_cbmem_console,
_preram_cbmem_console_size, flags);