diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2019-02-12 14:16:21 +0200 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-02-27 11:10:00 +0000 |
commit | e613d704d12592dfc371d81957a3d83b0742fa7d (patch) | |
tree | b21785796ec4446f1c18c74526e22a97b5cd7318 /src/console | |
parent | 7132f259bf83f1118893550c0bc914c11081ea84 (diff) | |
download | coreboot-e613d704d12592dfc371d81957a3d83b0742fa7d.tar.xz |
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>
Diffstat (limited to 'src/console')
-rw-r--r-- | src/console/init.c | 14 | ||||
-rw-r--r-- | src/console/printk.c | 22 |
2 files changed, 29 insertions, 7 deletions
diff --git a/src/console/init.c b/src/console/init.c index 7d1f31a38b..b7cc43aef2 100644 --- a/src/console/init.c +++ b/src/console/init.c @@ -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) diff --git a/src/console/printk.c b/src/console/printk.c index 0a9d3bf8ae..6050620dca 100644 --- a/src/console/printk.c +++ b/src/console/printk.c @@ -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) |