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/5338
-gerrit
commit d4fac5e6bcc1111c4136c729f634010d5c8a3ae1 Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Thu Feb 27 19:30:18 2014 +0200
console: Use romstage code for ramstage and SMM
Console is arch-agnostic and there is no need for separate implementations for romstage and ramstage.
For SMM there is console only if DEBUG_SMI is selected.
Change-Id: I7028eeeff8bfbb9c8552972436b29a7508834d87 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/arch/armv7/Makefile.inc | 2 -- src/arch/armv7/early_console.c | 40 ------------------------- src/arch/x86/lib/Makefile.inc | 1 - src/arch/x86/lib/romcc_console.c | 26 +++------------- src/arch/x86/lib/romstage_console.c | 57 ------------------------------------ src/console/Makefile.inc | 3 +- src/console/console.c | 37 +++++++++++++++++++++-- src/console/init.c | 1 + src/console/printk.c | 1 + src/cpu/x86/smm/Makefile.inc | 2 -- src/cpu/x86/smm/smihandler.c | 2 ++ src/cpu/x86/smm/smiutil.c | 47 ----------------------------- src/cpu/x86/smm/smm_module_handler.c | 5 +++- src/include/console/console.h | 3 -- src/include/console/streams.h | 25 ++++++++++++++++ src/mainboard/lenovo/x60/dock.c | 4 +++ 16 files changed, 77 insertions(+), 179 deletions(-)
diff --git a/src/arch/armv7/Makefile.inc b/src/arch/armv7/Makefile.inc index dfd5164..f0adc0a 100644 --- a/src/arch/armv7/Makefile.inc +++ b/src/arch/armv7/Makefile.inc @@ -163,12 +163,10 @@ $(obj)/mainboard/$(MAINBOARDDIR)/romstage.pre.inc: $(src)/mainboard/$(MAINBOARDD ramstage-y += exception.c ramstage-y += exception_asm.S
-bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += early_console.c bootblock-y += cache.c
romstage-y += cache.c romstage-y += div0.c -romstage-$(CONFIG_EARLY_CONSOLE) += early_console.c
ramstage-y += div0.c #ramstage-y += interrupts.c diff --git a/src/arch/armv7/early_console.c b/src/arch/armv7/early_console.c deleted file mode 100644 index 599cbc7..0000000 --- a/src/arch/armv7/early_console.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; version 2 of - * the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - * MA 02110-1301 USA - */ - -#include <console/console.h> -#include <console/cbmem_console.h> -#include <console/uart.h> - -/* FIXME: need to make console driver more generic */ -void console_tx_byte(unsigned char byte) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_byte(byte); -#endif -#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__) - cbmemc_tx_byte(byte); -#endif -} - -void console_tx_flush(void) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_flush(); -#endif -} diff --git a/src/arch/x86/lib/Makefile.inc b/src/arch/x86/lib/Makefile.inc index c173011..8b7418b 100644 --- a/src/arch/x86/lib/Makefile.inc +++ b/src/arch/x86/lib/Makefile.inc @@ -12,7 +12,6 @@ ramstage-y += rom_media.c ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c ramstage-$(CONFIG_COOP_MULTITASKING) += thread_switch.S
-romstage-$(CONFIG_EARLY_CONSOLE) += romstage_console.c romstage-y += cbfs_and_run.c romstage-y += memset.c romstage-y += memcpy.c diff --git a/src/arch/x86/lib/romcc_console.c b/src/arch/x86/lib/romcc_console.c index 43de28b..ae5720a 100644 --- a/src/arch/x86/lib/romcc_console.c +++ b/src/arch/x86/lib/romcc_console.c @@ -17,8 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include <console/uart.h> -#include <console/ne2k.h> +#include <console/streams.h>
/* While in romstage, console loglevel is built-time constant. */ #define console_show(msg_level) (CONFIG_DEFAULT_CONSOLE_LOGLEVEL >= msg_level) @@ -31,25 +30,9 @@ #include "drivers/net/ne2k.c" #endif
-static void __console_tx_byte(unsigned char byte) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_byte(byte); -#endif -#if CONFIG_CONSOLE_NE2K - ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT); -#endif -} - -static void __console_tx_flush(void) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_flush(); -#endif -#if CONFIG_CONSOLE_NE2K - ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT); -#endif -} +#include <console/console.c> +#define __console_tx_byte console_tx_byte +#define __console_tx_flush console_tx_flush
static void __console_tx_nibble(unsigned nibble) { @@ -118,7 +101,6 @@ static void __console_tx_string(int loglevel, const char *str) }
/* if included by romcc, include the sources, too. romcc can't use prototypes */ -#include <console/console.c> #include <console/init.c> #include <console/post.c> #include <console/die.c> diff --git a/src/arch/x86/lib/romstage_console.c b/src/arch/x86/lib/romstage_console.c deleted file mode 100644 index 58742a2..0000000 --- a/src/arch/x86/lib/romstage_console.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; version 2 of - * the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - * MA 02110-1301 USA - */ - -#include <console/console.h> -#include <console/cbmem_console.h> -#include <console/uart.h> -#include <console/usb.h> -#include <console/ne2k.h> -#include <console/spkmodem.h> - -void console_tx_byte(unsigned char byte) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_byte(byte); -#endif -#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__)) - usb_tx_byte(0, byte); -#endif -#if CONFIG_CONSOLE_NE2K - ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT); -#endif -#if CONFIG_CONSOLE_CBMEM && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__)) - cbmemc_tx_byte(byte); -#endif -#if CONFIG_SPKMODEM - spkmodem_tx_byte(byte); -#endif -} - -void console_tx_flush(void) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_flush(); -#endif -#if CONFIG_CONSOLE_NE2K - ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT); -#endif -#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__)) - usb_tx_flush(0); -#endif -} diff --git a/src/console/Makefile.inc b/src/console/Makefile.inc index d59e44e..e3b3780 100644 --- a/src/console/Makefile.inc +++ b/src/console/Makefile.inc @@ -3,7 +3,7 @@ ramstage-y += init.c console.c ramstage-y += post.c ramstage-y += die.c
-smm-$(CONFIG_DEBUG_SMI) += vtxprintf.c printk.c +smm-$(CONFIG_DEBUG_SMI) += init.c console.c vtxprintf.c printk.c smm-$(CONFIG_SMM_TSEG) += die.c
romstage-$(CONFIG_EARLY_CONSOLE) += vtxprintf.c printk.c @@ -15,6 +15,7 @@ bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += vtxprintf.c printk.c bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += init.c console.c bootblock-y += die.c
+$(obj)/console/init.smm.o : $(obj)/build.h $(obj)/console/init.ramstage.o : $(obj)/build.h $(obj)/console/init.romstage.o : $(obj)/build.h $(obj)/console/init.bootblock.o : $(obj)/build.h diff --git a/src/console/console.c b/src/console/console.c index 3361791..8865090 100644 --- a/src/console/console.c +++ b/src/console/console.c @@ -17,12 +17,13 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include <console/console.h> +#include <console/streams.h> #include <console/cbmem_console.h> #include <console/uart.h> #include <console/usb.h> #include <console/ne2k.h> #include <console/spkmodem.h> +#include <console/qemu_debugcon.h>
void console_hw_init(void) { @@ -32,21 +33,51 @@ void console_hw_init(void) #if CONFIG_CONSOLE_NE2K ne2k_init(CONFIG_CONSOLE_NE2K_IO_PORT); #endif -#if CONFIG_CONSOLE_CBMEM && CONFIG_EARLY_CBMEM_INIT && !defined(__BOOT_BLOCK__) +#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__) && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__)) cbmemc_init(); #endif #if CONFIG_SPKMODEM spkmodem_init(); #endif -#if CONFIG_CONSOLE_USB && CONFIG_USBDEBUG_IN_ROMSTAGE && !defined(__BOOT_BLOCK__) +#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__)) usbdebug_init(); #endif +#if CONFIG_CONSOLE_QEMU_DEBUGCON + qemu_debugcon_init(); +#endif }
void console_tx_byte(unsigned char byte) { +#if CONFIG_CONSOLE_SERIAL + uart_tx_byte(byte); +#endif +#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__)) + usb_tx_byte(0, byte); +#endif +#if CONFIG_CONSOLE_NE2K + ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT); +#endif +#if CONFIG_CONSOLE_CBMEM && && !defined(__BOOT_BLOCK__) && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__)) + cbmemc_tx_byte(byte); +#endif +#if CONFIG_SPKMODEM + spkmodem_tx_byte(byte); +#endif +#if CONFIG_CONSOLE_QEMU_DEBUGCON + qemu_debugcon_tx_byte(byte); +#endif }
void console_tx_flush(void) { +#if CONFIG_CONSOLE_SERIAL + uart_tx_flush(); +#endif +#if CONFIG_CONSOLE_NE2K + ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT); +#endif +#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__)) + usb_tx_flush(0); +#endif } diff --git a/src/console/init.c b/src/console/init.c index 85ae880..4ad20ab 100644 --- a/src/console/init.c +++ b/src/console/init.c @@ -23,6 +23,7 @@ #include <device/pci.h> #include <console/console.h> #include <console/uart.h> +#include <console/streams.h> #include <option.h>
#if !defined(__ROMCC__) diff --git a/src/console/printk.c b/src/console/printk.c index a937094..1351c83 100644 --- a/src/console/printk.c +++ b/src/console/printk.c @@ -10,6 +10,7 @@ #include <smp/spinlock.h> #include <console/vtxprintf.h> #include <console/console.h> +#include <console/streams.h> #include <trace.h>
DECLARE_SPIN_LOCK(console_lock) diff --git a/src/cpu/x86/smm/Makefile.inc b/src/cpu/x86/smm/Makefile.inc index 8dcd130..30461da 100644 --- a/src/cpu/x86/smm/Makefile.inc +++ b/src/cpu/x86/smm/Makefile.inc @@ -23,7 +23,6 @@ ifeq ($(CONFIG_SMM_MODULES),y) smmstub-y += smm_stub.S smmstub-y += smm_module_header.c
-smm-y += smiutil.c smm-y += smm_module_header.c smm-y += smm_module_handler.c
@@ -81,7 +80,6 @@ SMM_LDSCRIPT := smm.ld endif
smm-y += smihandler.c -smm-y += smiutil.c
$(obj)/cpu/x86/smm/smm.o: $$(smm-objs) $(LIBGCC_FILE_NAME) $(CC) $(LDFLAGS) -nostdlib -r -o $@ -Wl,--wrap,__divdi3 -Wl,--wrap,__udivdi3 -Wl,--wrap,__moddi3 -Wl,--wrap,__umoddi3 -Wl,--start-group $(smm-objs) $(LIBGCC_FILE_NAME) -Wl,--end-group diff --git a/src/cpu/x86/smm/smihandler.c b/src/cpu/x86/smm/smihandler.c index fc30909..7ce0ea1 100644 --- a/src/cpu/x86/smm/smihandler.c +++ b/src/cpu/x86/smm/smihandler.c @@ -148,7 +148,9 @@ void smi_handler(u32 smm_revision)
node=nodeid();
+#if CONFIG_DEBUG_SMI console_init(); +#endif
printk(BIOS_SPEW, "\nSMI# #%d\n", node);
diff --git a/src/cpu/x86/smm/smiutil.c b/src/cpu/x86/smm/smiutil.c deleted file mode 100644 index 644cab7..0000000 --- a/src/cpu/x86/smm/smiutil.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2008-2009 coresystems GmbH - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; version 2 of - * the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - * MA 02110-1301 USA - */ - -#include <console/console.h> -#include <console/uart.h> - -#if CONFIG_DEBUG_SMI -void console_tx_flush(void) -{ -} - -void console_tx_byte(unsigned char byte) -{ -#if CONFIG_CONSOLE_SERIAL - uart_tx_byte(byte); -#endif -} -#endif - -void console_init(void) -{ -#if CONFIG_DEBUG_SMI - console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; -#if CONFIG_CONSOLE_SERIAL - uart_init(); -#endif -#endif -} - diff --git a/src/cpu/x86/smm/smm_module_handler.c b/src/cpu/x86/smm/smm_module_handler.c index 444e335..615eb4a 100644 --- a/src/cpu/x86/smm/smm_module_handler.c +++ b/src/cpu/x86/smm/smm_module_handler.c @@ -121,7 +121,9 @@ void smm_handler_start(void *arg, int cpu, const struct smm_runtime *runtime) smm_runtime = runtime;
if (cpu >= CONFIG_MAX_CPUS) { +#if CONFIG_DEBUG_SMI console_init(); +#endif printk(BIOS_CRIT, "Invalid CPU number assigned in SMM stub: %d\n", cpu); return; @@ -141,8 +143,9 @@ void smm_handler_start(void *arg, int cpu, const struct smm_runtime *runtime)
smi_backup_pci_address();
+#if CONFIG_DEBUG_SMI console_init(); - +#endif printk(BIOS_SPEW, "\nSMI# #%d\n", cpu);
cpu_smi_handler(); diff --git a/src/include/console/console.h b/src/include/console/console.h index 3c1fd98..cab8449 100644 --- a/src/include/console/console.h +++ b/src/include/console/console.h @@ -27,9 +27,6 @@ #ifndef __ROMCC__ int console_show(int msg_level); void console_init(void); -void console_hw_init(void); -void console_tx_byte(unsigned char byte); -void console_tx_flush(void); void post_code(u8 value); #if CONFIG_CMOS_POST_EXTRA void post_log_extra(u32 value); diff --git a/src/include/console/streams.h b/src/include/console/streams.h new file mode 100644 index 0000000..288fade --- /dev/null +++ b/src/include/console/streams.h @@ -0,0 +1,25 @@ +/* + * This file is part of the coreboot project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _CONSOLE_STREAMS_H_ +#define _CONSOLE_STREAMS_H_ + +void console_hw_init(void); +void console_tx_byte(unsigned char byte); +void console_tx_flush(void); + +#endif /* _CONSOLE_STREAMS_H_ */ diff --git a/src/mainboard/lenovo/x60/dock.c b/src/mainboard/lenovo/x60/dock.c index 1b15a6c..87f9c8b 100644 --- a/src/mainboard/lenovo/x60/dock.c +++ b/src/mainboard/lenovo/x60/dock.c @@ -237,7 +237,11 @@ int dock_connect(void)
dock_write_register(0x07, 0x03); dock_write_register(0x30, 0x01); +#if !defined(__SMM__) || CONFIG_DEBUG_SMI + /* FIXME: This probably belongs elsewhere and it should not + * touch consoles other than UART. */ console_init(); +#endif return 0; }