80a7f4e7b6
Pre-bootblock stages (i.e., VBOOT_STARTS_BEFORE_BOOTBLOCK) might not have the ability to log to the UART, so their console messages are inaccessible until the boot processes gets into the payload or OS. This makes it difficult to debug verstage. This feature will dump the pre-bootblock CBMEM console immediately after the bootblock console is initialized. I chose to do this in console_init instead of bootblock_soc_init because I wanted to have the pre-bootblock contents dumped before the coreboot bootblock starting message is printed. BUG=b:213828947 TEST=Boot guybrush with PSP verstage and verify verstage logs are dumped to the UART. Signed-off-by: Raul E Rangel <rrangel@chromium.org> Change-Id: I363c93ef3ee6c5c303a6a68f88a622e2aa62594c Reviewed-on: https://review.coreboot.org/c/coreboot/+/61012 Reviewed-by: Karthik Ramasubramanian <kramasub@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
69 lines
1.4 KiB
C
69 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#include <commonlib/helpers.h>
|
|
#include <console/cbmem_console.h>
|
|
#include <console/console.h>
|
|
#include <console/uart.h>
|
|
#include <console/streams.h>
|
|
#include <device/pci.h>
|
|
#include <option.h>
|
|
#include <version.h>
|
|
|
|
#define FIRST_CONSOLE (ENV_BOOTBLOCK || (CONFIG(NO_BOOTBLOCK_CONSOLE) && ENV_ROMSTAGE))
|
|
|
|
static int console_inited;
|
|
static int console_loglevel;
|
|
|
|
int get_log_level(void)
|
|
{
|
|
if (console_inited == 0)
|
|
return -1;
|
|
|
|
return console_loglevel;
|
|
}
|
|
|
|
static void init_log_level(void)
|
|
{
|
|
console_loglevel = get_console_loglevel();
|
|
|
|
if (!FIRST_CONSOLE)
|
|
console_loglevel = get_uint_option("debug_level", console_loglevel);
|
|
}
|
|
|
|
int console_log_level(int msg_level)
|
|
{
|
|
int log_level = get_log_level();
|
|
|
|
if (log_level < 0)
|
|
return CONSOLE_LOG_NONE;
|
|
|
|
if (msg_level <= log_level)
|
|
return CONSOLE_LOG_ALL;
|
|
|
|
if (CONFIG(CONSOLE_CBMEM) && (msg_level <= BIOS_DEBUG))
|
|
return CONSOLE_LOG_FAST;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void console_init(void)
|
|
{
|
|
init_log_level();
|
|
|
|
if (CONFIG(DEBUG_CONSOLE_INIT))
|
|
console_inited = 1;
|
|
|
|
if (CONFIG(EARLY_PCI_BRIDGE) && (ENV_BOOTBLOCK || ENV_ROMSTAGE))
|
|
pci_early_bridge_init();
|
|
|
|
console_hw_init();
|
|
|
|
console_inited = 1;
|
|
|
|
if (ENV_BOOTBLOCK && CONFIG(CONSOLE_CBMEM_PRINT_PRE_BOOTBLOCK_CONTENTS))
|
|
cbmem_dump_console();
|
|
|
|
printk(BIOS_NOTICE, "\n\ncoreboot-%s%s %s " ENV_STRING " starting (log level: %i)...\n",
|
|
coreboot_version, coreboot_extra_version, coreboot_build,
|
|
get_log_level());
|
|
}
|