console: Split loglevel for fast and slow
For fast CBMEM console use minimum BIOS_DEBUG level. For other consoles, Kconfig and/or nvram settings apply. Change-Id: Iff56a0a3182f258200cac80e013957d598cc2130 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/31370 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
parent
7132f259bf
commit
e613d704d1
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
|
||||
#include <arch/early_variables.h>
|
||||
#include <commonlib/helpers.h>
|
||||
#include <console/console.h>
|
||||
#include <console/uart.h>
|
||||
#include <console/streams.h>
|
||||
|
@ -64,7 +65,18 @@ static void init_log_level(void)
|
|||
|
||||
int console_log_level(int msg_level)
|
||||
{
|
||||
return (get_log_level() >= 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 (IS_ENABLED(CONFIG_CONSOLE_CBMEM) && (msg_level <= BIOS_DEBUG))
|
||||
return CONSOLE_LOG_FAST;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
asmlinkage void console_init(void)
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
* blatantly copied from linux/kernel/printk.c
|
||||
*/
|
||||
|
||||
#include <console/cbmem_console.h>
|
||||
#include <console/console.h>
|
||||
#include <console/streams.h>
|
||||
#include <console/vtxprintf.h>
|
||||
|
@ -36,18 +37,24 @@ void do_putchar(unsigned char byte)
|
|||
|
||||
static void wrap_putchar(unsigned char byte, void *data)
|
||||
{
|
||||
do_putchar(byte);
|
||||
console_tx_byte(byte);
|
||||
}
|
||||
|
||||
static void wrap_putchar_cbmemc(unsigned char byte, void *data)
|
||||
{
|
||||
__cbmemc_tx_byte(byte);
|
||||
}
|
||||
|
||||
int vprintk(int msg_level, const char *fmt, va_list args)
|
||||
{
|
||||
int i;
|
||||
int i, log_this;
|
||||
|
||||
if (IS_ENABLED(CONFIG_SQUELCH_EARLY_SMP) && ENV_CACHE_AS_RAM &&
|
||||
!boot_cpu())
|
||||
return 0;
|
||||
|
||||
if (!console_log_level(msg_level))
|
||||
log_this = console_log_level(msg_level);
|
||||
if (log_this < CONSOLE_LOG_FAST)
|
||||
return 0;
|
||||
|
||||
DISABLE_TRACE;
|
||||
|
@ -59,9 +66,12 @@ int vprintk(int msg_level, const char *fmt, va_list args)
|
|||
spin_lock(&console_lock);
|
||||
#endif
|
||||
|
||||
i = vtxprintf(wrap_putchar, fmt, args, NULL);
|
||||
|
||||
console_tx_flush();
|
||||
if (log_this == CONSOLE_LOG_FAST) {
|
||||
i = vtxprintf(wrap_putchar_cbmemc, fmt, args, NULL);
|
||||
} else {
|
||||
i = vtxprintf(wrap_putchar, fmt, args, NULL);
|
||||
console_tx_flush();
|
||||
}
|
||||
|
||||
#ifdef __PRE_RAM__
|
||||
#if IS_ENABLED(CONFIG_HAVE_ROMSTAGE_CONSOLE_SPINLOCK)
|
||||
|
|
|
@ -62,6 +62,8 @@ void do_putchar(unsigned char byte);
|
|||
#define printk(LEVEL, fmt, args...) \
|
||||
do { do_printk(LEVEL, fmt, ##args); } while (0)
|
||||
|
||||
enum { CONSOLE_LOG_NONE = 0, CONSOLE_LOG_FAST, CONSOLE_LOG_ALL };
|
||||
|
||||
#if IS_ENABLED(CONFIG_CONSOLE_OVERRIDE_LOGLEVEL)
|
||||
/*
|
||||
* This function should be implemented at mainboard level.
|
||||
|
|
|
@ -173,7 +173,7 @@ void platform_fsp_memory_init_params_cb(FSPM_UPD *fspm_upd, uint32_t version)
|
|||
upd->RankMask = config->RankMask;
|
||||
upd->RmuBaseAddress = (uintptr_t)rmu_data;
|
||||
upd->RmuLength = rmu_data_len;
|
||||
upd->SerialPortWriteChar = console_log_level(BIOS_SPEW)
|
||||
upd->SerialPortWriteChar = !!console_log_level(BIOS_SPEW)
|
||||
? (uintptr_t)fsp_write_line : 0;
|
||||
upd->SmmTsegSize = IS_ENABLED(CONFIG_HAVE_SMI_HANDLER) ?
|
||||
config->SmmTsegSize : 0;
|
||||
|
|
Loading…
Reference in New Issue