[coreboot] Patch set updated for coreboot: 70c3a2b make early serial console support more generic

Ronald G. Minnich (rminnich@gmail.com) gerrit at coreboot.org
Thu Jan 3 18:59:50 CET 2013


Ronald G. Minnich (rminnich at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2086

-gerrit

commit 70c3a2b966d84ba87f0adb426326777fe88ff521
Author: David Hendricks <dhendrix at chromium.org>
Date:   Mon Dec 31 17:28:43 2012 -0800

    make early serial console support more generic
    
    This patch makes pre-RAM serial init more generic, particularly for
    platforms which do not necessarily need cache-as-RAM in order to use
    the serial console and do not have a standard 8250 serial port.
    
    This adds a Kconfig variable to set romstage-* for very early serial
    console init. The current method assumes that cache-as-RAM should
    enable this, so to maintain compatibility selecting CACHE_AS_RAM will
    also select EARLY_SERIAL_CONSOLE.
    
    The UART code structure needs some rework, but the use of ROMCC,
    romstage, and then ramstage makes things complex.
    
    Change-Id: I089e7af633c227baf3c06c685f005e9d0e4b38ce
    Signed-off-by: David Hendricks <dhendrix at chromium.org>
    Signed-off-by: Ronald G. Minnich <rminnich at gmail.com>
---
 src/console/Kconfig               |  7 +++++++
 src/console/Makefile.inc          |  2 +-
 src/console/console.c             |  4 +++-
 src/cpu/Kconfig                   |  1 +
 src/cpu/samsung/exynos5250/uart.c |  4 ++--
 src/include/uart.h                | 15 +++++++++------
 src/include/uart8250.h            |  1 -
 7 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/src/console/Kconfig b/src/console/Kconfig
index 117fdb8..a726c1f 100644
--- a/src/console/Kconfig
+++ b/src/console/Kconfig
@@ -5,6 +5,13 @@ config SERIAL_CONSOLE
 	help
 	  Send coreboot debug output to a serial port
 
+config EARLY_SERIAL_CONSOLE
+	bool
+	select SERIAL_CONSOLE
+	default n
+	help
+	  Use serial console during early boot stages (e.g. cache-as-RAM)
+
 config CONSOLE_SERIAL8250
 	bool "Serial port console output (I/O mapped, 8250-compatible)"
 	depends on SERIAL_CONSOLE
diff --git a/src/console/Makefile.inc b/src/console/Makefile.inc
index a712486..3c4777f 100644
--- a/src/console/Makefile.inc
+++ b/src/console/Makefile.inc
@@ -10,7 +10,7 @@ smm-y += vtxprintf.c
 smm-$(CONFIG_SMM_TSEG) += die.c
 
 romstage-y += vtxprintf.c
-romstage-$(CONFIG_CACHE_AS_RAM) += console.c
+romstage-$(CONFIG_EARLY_SERIAL_CONSOLE) += console.c
 romstage-y += post.c
 romstage-y += die.c
 
diff --git a/src/console/console.c b/src/console/console.c
index d5f25a5..e92dbf6 100644
--- a/src/console/console.c
+++ b/src/console/console.c
@@ -99,13 +99,15 @@ int console_tst_byte(void)
 
 #else // __PRE_RAM__   ^^^ NOT defined   vvv defined
 
+#include <uart.h>
+
 void console_init(void)
 {
 #if CONFIG_USBDEBUG
 	enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT);
 	early_usbdebug_init();
 #endif
-#if CONFIG_CONSOLE_SERIAL8250
+#if CONFIG_SERIAL_CONSOLE && !CONFIG_CONSOLE_SERIAL8250MEM
 	uart_init();
 #endif
 #if CONFIG_DRIVERS_OXFORD_OXPCIE && CONFIG_CONSOLE_SERIAL8250MEM
diff --git a/src/cpu/Kconfig b/src/cpu/Kconfig
index 383ba79..ddc46cf 100644
--- a/src/cpu/Kconfig
+++ b/src/cpu/Kconfig
@@ -16,6 +16,7 @@ source src/cpu/x86/Kconfig
 
 config CACHE_AS_RAM
 	bool
+	select EARLY_SERIAL_CONSOLE
 	default !ROMCC
 
 config DCACHE_RAM_BASE
diff --git a/src/cpu/samsung/exynos5250/uart.c b/src/cpu/samsung/exynos5250/uart.c
index 3d43976..b9299fd 100644
--- a/src/cpu/samsung/exynos5250/uart.c
+++ b/src/cpu/samsung/exynos5250/uart.c
@@ -218,12 +218,12 @@ static const struct console_driver exynos5_uart_console __console = {
 //unsigned char (*uart_rx_byte)(unsigned base_port) = exynos5_uart_rx_byte;
 //void (*uart_tx_byte)(unsigned base_port, unsigned char data) = exynos5_uart_tx_byte;
 /* FIXME: trivial wrappers */
-void uart_init()
+void uart_init(void)
 {
 	exynos5_init_dev();
 }
 
-unsigned char uart_rx_byte()
+unsigned char uart_rx_byte(void)
 {
 	return exynos5_uart_rx_byte();
 }
diff --git a/src/include/uart.h b/src/include/uart.h
index 931d6dc..a95f6ee 100644
--- a/src/include/uart.h
+++ b/src/include/uart.h
@@ -15,19 +15,22 @@
  * 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
- *
- * FIXME(dhendrix): This file contains generic prototypes for UART functions.
- * The existing headers are too specific to the 8250, so we need a better
- * abstraction for use with non-8250 UARTs.
  */
 
+/* madness. Uarts are a mess. If you include this file, it
+ * includes ALL uart implementations which may be needed.
+ * No need to include them separately, and include this file FIRST.
+ * At least one (but at most one) of the files needs to define
+ * uart_init().
+ */
 #ifndef UART_H
 #define UART_H
 
+#include <uart8250.h>
+#ifndef __ROMCC__
 unsigned char uart_rx_byte(void);
 void uart_tx_byte(unsigned char data);
 void uart_tx_flush(void);
-
-void uart_init(void);
+#endif
 
 #endif /* UART_H */
diff --git a/src/include/uart8250.h b/src/include/uart8250.h
index b00ff48..9af43f2 100644
--- a/src/include/uart8250.h
+++ b/src/include/uart8250.h
@@ -120,7 +120,6 @@ unsigned char uart8250_rx_byte(unsigned base_port);
 int uart8250_can_rx_byte(unsigned base_port);
 void uart8250_tx_byte(unsigned base_port, unsigned char data);
 void uart8250_tx_flush(unsigned base_port);
-
 /* Yes it is silly to have three different uart init functions. But we used to
  * have three different sets of uart code, so it's an improvement.
  */



More information about the coreboot mailing list