diff options
author | Aaron Durbin <adurbin@chromium.org> | 2017-04-24 16:03:57 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2017-04-25 18:13:56 +0200 |
commit | 4003950881af6fc4761aa0b177a3670d04ee9881 (patch) | |
tree | ab6b4fecc6838f038b8f8a8ae72e8432c6499ab9 | |
parent | 42bcd13c758c3b72c46e8d7aeabddb4c37a1657e (diff) | |
download | coreboot-4003950881af6fc4761aa0b177a3670d04ee9881.tar.xz |
console: rework log level to not be reliant on ROMSTAGE_CONST
The console log level variable doesn't really rely on ROMSTAGE_CONST
proper. Instead, the mutability of the variable is based on the current
implementation of ROMSTAGE_CONST (__PRE_RAM__). As such directly
use that logic for the code. In addition, refactor the code to let
the compiler and linker optimize out accesses instead of using
the pre-processor.
Change-Id: I44bcc409266ef52b9be29f75efde73a6707a53f4
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/19438
Tested-by: build bot (Jenkins)
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Philippe Mathieu-Daudé <philippe.mathieu.daude@gmail.com>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
-rw-r--r-- | src/console/init.c | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/src/console/init.c b/src/console/init.c index 189079b98f..91d6492e4d 100644 --- a/src/console/init.c +++ b/src/console/init.c @@ -22,20 +22,48 @@ #include <rules.h> #include <version.h> -/* While in romstage, console loglevel is built-time constant. */ -static ROMSTAGE_CONST int console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; +/* Mutable console log level only allowed when RAM comes online. */ +#if defined(__PRE_RAM__) +#define CONSOLE_LEVEL_CONST 1 +#else +#define CONSOLE_LEVEL_CONST 0 +#endif + +static int console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; + +static inline int get_log_level(void) +{ + if (CONSOLE_LEVEL_CONST) + return CONFIG_DEFAULT_CONSOLE_LOGLEVEL; + + return console_loglevel; +} + +static inline void set_log_level(int new_level) +{ + if (CONSOLE_LEVEL_CONST) + return; + + console_loglevel = new_level; +} + +static void init_log_level(void) +{ + int debug_level = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; + + get_option(&debug_level, "debug_level"); + + set_log_level(debug_level); +} int console_log_level(int msg_level) { - return (console_loglevel >= msg_level); + return (get_log_level() >= msg_level); } asmlinkage void console_init(void) { -#if !defined(__PRE_RAM__) - console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; - get_option(&console_loglevel, "debug_level"); -#endif + init_log_level(); #if CONFIG_EARLY_PCI_BRIDGE && !defined(__SMM__) pci_early_bridge_init(); |