summaryrefslogtreecommitdiffstats
path: root/src/console/init.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2017-04-24 16:03:57 -0500
committerAaron Durbin <adurbin@chromium.org>2017-04-25 18:13:56 +0200
commit4003950881af6fc4761aa0b177a3670d04ee9881 (patch)
treeab6b4fecc6838f038b8f8a8ae72e8432c6499ab9 /src/console/init.c
parent42bcd13c758c3b72c46e8d7aeabddb4c37a1657e (diff)
downloadcoreboot-4003950881af6fc4761aa0b177a3670d04ee9881.tar.gz
coreboot-4003950881af6fc4761aa0b177a3670d04ee9881.tar.bz2
coreboot-4003950881af6fc4761aa0b177a3670d04ee9881.zip
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>
Diffstat (limited to 'src/console/init.c')
-rw-r--r--src/console/init.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/console/init.c b/src/console/init.c
index 189079b98f88..91d6492e4d31 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();