Kyösti Mälkki (kyosti.malkki@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3854
-gerrit
commit 6162b7fd2122f740651d9b409693a5766f1433fb Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Mon Aug 12 23:29:57 2013 +0300
console: Squelch console output from AP CPUs in romstage
Add Kconfig option SQUELCH_EARLY_SMP and have it enabled by default.
Console drivers have unpredictable results if multiple threads attempt to share same resources without spinlock. Serial UARTs have not had huge problems, only distorted output, but those relying on cache-as-ram (CBMEM and usbdebug) may require this.
Change-Id: I7f406fdea7b6dc6a341c4da2fab56f7b7ff568b4 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/arch/x86/lib/romstage_console.c | 9 ++++++++- src/console/Kconfig | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/arch/x86/lib/romstage_console.c b/src/arch/x86/lib/romstage_console.c index 2e743ad..1c3141c 100644 --- a/src/arch/x86/lib/romstage_console.c +++ b/src/arch/x86/lib/romstage_console.c @@ -31,7 +31,9 @@ #if CONFIG_SPKMODEM #include <console/spkmodem.h> #endif - +#if CONFIG_SQUELCH_EARLY_SMP +#include <cpu/x86/lapic.h> +#endif
void console_tx_byte(unsigned char byte) { @@ -86,6 +88,11 @@ int do_printk(int msg_level, const char *fmt, ...) return 0; }
+#if CONFIG_SQUELCH_EARLY_SMP + if (!boot_cpu()) + return 0; +#endif + va_start(args, fmt); i = vtxprintf(console_tx_byte, fmt, args); va_end(args); diff --git a/src/console/Kconfig b/src/console/Kconfig index 1d050f7..9b2e052 100644 --- a/src/console/Kconfig +++ b/src/console/Kconfig @@ -14,6 +14,18 @@ config EARLY_CONSOLE help Use console during early (pre-RAM) boot stages
+config SQUELCH_EARLY_SMP + bool "Squelch AP CPUs from early console." + default y + depends on EARLY_CONSOLE + help + When selected only BSP CPU will output to early console. + + Console drivers have unpredictable results if multiple threads + attempt to share same resources without spinlock. + + If unsure, say Y. + config CONSOLE_SERIAL bool "Serial port console output" default y