console: Use single driver entry for UARTs

UARTs now have unified prototypes and can use a single entry
in the list of drivers for ramstage.

Change-Id: I315daaf9a83cfa60f1a270146c729907a1d6d45b
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/5308
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
diff --git a/src/console/Makefile.inc b/src/console/Makefile.inc
index f158670..df08e80 100644
--- a/src/console/Makefile.inc
+++ b/src/console/Makefile.inc
@@ -17,8 +17,7 @@
 bootblock-y += console.c
 bootblock-y += die.c
 
-ramstage-$(CONFIG_CONSOLE_SERIAL8250) += uart8250_console.c
-ramstage-$(CONFIG_CONSOLE_SERIAL8250MEM) += uart8250mem_console.c
+ramstage-$(CONFIG_CONSOLE_SERIAL) += uart_console.c
 ramstage-$(CONFIG_SPKMODEM) += spkmodem_console.c
 ramstage-$(CONFIG_CONSOLE_USB) += usbdebug_console.c
 ramstage-$(CONFIG_CONSOLE_NE2K) += ne2k_console.c
diff --git a/src/console/uart8250_console.c b/src/console/uart8250_console.c
deleted file mode 100644
index 52f59f6..0000000
--- a/src/console/uart8250_console.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2003 Eric Biederman
- *
- * 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>
-
-static void ttyS0_init(void)
-{
-	uart_init();
-}
-
-static void ttyS0_tx_byte(unsigned char data)
-{
-	uart_tx_byte(data);
-}
-
-static void ttyS0_tx_flush(void)
-{
-	uart_tx_flush();
-}
-
-static unsigned char ttyS0_rx_byte(void)
-{
-	return uart_rx_byte();
-}
-
-static int ttyS0_tst_byte(void)
-{
-	return uart_can_rx_byte();
-}
-
-static const struct console_driver uart8250_console __console = {
-	.init     = ttyS0_init,
-	.tx_byte  = ttyS0_tx_byte,
-	.tx_flush = ttyS0_tx_flush,
-	.rx_byte  = ttyS0_rx_byte,
-	.tst_byte = ttyS0_tst_byte,
-};
diff --git a/src/console/uart8250mem_console.c b/src/console/uart_console.c
similarity index 86%
rename from src/console/uart8250mem_console.c
rename to src/console/uart_console.c
index 7e52aed..e2cd6a8 100644
--- a/src/console/uart8250mem_console.c
+++ b/src/console/uart_console.c
@@ -40,12 +40,17 @@
 	return uart_rx_byte();
 }
 
+/* This only relevant with x86 with GDB_STUB enabled.*/
 static int uartmem_tst_byte(void)
 {
+#if CONFIG_CONSOLE_SERIAL8250 || CONFIG_CONSOLE_SERIAL8250MEM
 	return uart_can_rx_byte();
+#else
+	return 0;
+#endif
 }
 
-static const struct console_driver uart8250mem_console __console = {
+static const struct console_driver uart_console __console = {
 	.init     = uartmem_init,
 	.tx_byte  = uartmem_tx_byte,
 	.tx_flush = uartmem_tx_flush,
diff --git a/src/cpu/allwinner/a10/uart_console.c b/src/cpu/allwinner/a10/uart_console.c
index af66cb7..aea1189 100644
--- a/src/cpu/allwinner/a10/uart_console.c
+++ b/src/cpu/allwinner/a10/uart_console.c
@@ -11,7 +11,6 @@
 #include <console/uart.h>
 #include <arch/io.h>
 
-#include <console/console.h>
 #include <cpu/allwinner/a10/uart.h>
 
 static void *get_console_uart_base_addr(void)
@@ -44,7 +43,7 @@
 	return 24000000;
 }
 
-static void a10_uart_init_dev(void)
+void uart_init(void)
 {
 	void *uart_base = get_console_uart_base_addr();
 
@@ -54,46 +53,24 @@
 	a10_uart_enable_fifos(uart_base);
 }
 
-static unsigned char a10_uart_rx_byte(void)
+unsigned char uart_rx_byte(void)
 {
 	return a10_uart_rx_blocking(get_console_uart_base_addr());
 }
 
-static void a10_uart_tx_byte(unsigned char data)
+void uart_tx_byte(unsigned char data)
 {
 	a10_uart_tx_blocking(get_console_uart_base_addr(), data);
 }
 
+#if !defined(__PRE_RAM__)
 uint32_t uartmem_getbaseaddr(void)
 {
 	return (uint32_t) get_console_uart_base_addr();
 }
-
-#if !defined(__PRE_RAM__)
-static const struct console_driver a10_uart_console __console = {
-	.init = a10_uart_init_dev,
-	.tx_byte = a10_uart_tx_byte,
-	.rx_byte = a10_uart_rx_byte,
-};
-#else
-
-void uart_init(void)
-{
-	a10_uart_init_dev();
-}
-
-unsigned char uart_rx_byte(void)
-{
-	return a10_uart_rx_byte();
-}
-
-void uart_tx_byte(unsigned char data)
-{
-	a10_uart_tx_byte(data);
-}
+#endif
 
 void uart_tx_flush(void)
 {
 }
 
-#endif
diff --git a/src/cpu/samsung/exynos5250/uart.c b/src/cpu/samsung/exynos5250/uart.c
index c9d8d25..14d140c 100644
--- a/src/cpu/samsung/exynos5250/uart.c
+++ b/src/cpu/samsung/exynos5250/uart.c
@@ -17,7 +17,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include <console/console.h>	/* for __console definition */
 #include <console/uart.h>
 #include <arch/io.h>
 #include "uart.h"
@@ -169,21 +168,11 @@
 }
 
 #if !defined(__PRE_RAM__)
-
-static const struct console_driver exynos5_uart_console __console = {
-	.init     = exynos5_init_dev,
-	.tx_byte  = exynos5_uart_tx_byte,
-	.tx_flush = exynos5_uart_tx_flush,
-	.rx_byte  = exynos5_uart_rx_byte,
-//	.tst_byte = exynos5_uart_tst_byte,
-};
-
 uint32_t uartmem_getbaseaddr(void)
 {
 	return base_port;
 }
-
-#else
+#endif
 
 void uart_init(void)
 {
@@ -204,5 +193,3 @@
 {
 	exynos5_uart_tx_flush();
 }
-
-#endif
diff --git a/src/cpu/samsung/exynos5420/uart.c b/src/cpu/samsung/exynos5420/uart.c
index f9dd268..d05adcd 100644
--- a/src/cpu/samsung/exynos5420/uart.c
+++ b/src/cpu/samsung/exynos5420/uart.c
@@ -17,7 +17,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include <console/console.h>	/* for __console definition */
 #include <console/uart.h>
 #include <arch/io.h>
 #include "uart.h"
@@ -159,21 +158,11 @@
 }
 
 #if !defined(__PRE_RAM__)
-
-static const struct console_driver exynos5_uart_console __console = {
-	.init     = exynos5_init_dev,
-	.tx_byte  = exynos5_uart_tx_byte,
-//	.tx_flush = exynos5_uart_tx_flush,
-	.rx_byte  = exynos5_uart_rx_byte,
-//	.tst_byte = exynos5_uart_tst_byte,
-};
-
 uint32_t uartmem_getbaseaddr(void)
 {
 	return base_port;
 }
-
-#else
+#endif
 
 void uart_init(void)
 {
@@ -193,5 +182,3 @@
 void uart_tx_flush(void)
 {
 }
-
-#endif
diff --git a/src/cpu/ti/am335x/uart.c b/src/cpu/ti/am335x/uart.c
index f6f1a8d..27051ea 100644
--- a/src/cpu/ti/am335x/uart.c
+++ b/src/cpu/ti/am335x/uart.c
@@ -20,9 +20,6 @@
 #include <types.h>
 #include <console/uart.h>
 #include <arch/io.h>
-
-#include <console/console.h>	/* for __console definition */
-
 #include <cpu/ti/am335x/uart.h>
 
 #define EFR_ENHANCED_EN		(1 << 4)
@@ -162,28 +159,18 @@
 	return 48000000;
 }
 
-static void am335x_uart_init_dev(void)
-{
-	uint16_t div = (uint16_t) uart_baudrate_divisor(
-		default_baudrate(), uart_platform_refclk(), 16);
-	am335x_uart_init(div);
-}
-
 #if !defined(__PRE_RAM__)
 uint32_t uartmem_getbaseaddr(void)
 {
 	return CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
 }
+#endif
 
-static const struct console_driver exynos5_uart_console __console = {
-	.init     = am335x_uart_init_dev,
-	.tx_byte  = am335x_uart_tx_byte,
-	.rx_byte  = am335x_uart_rx_byte,
-};
-#else
 void uart_init(void)
 {
-	am335x_uart_init_dev();
+	uint16_t div = (uint16_t) uart_baudrate_divisor(
+		default_baudrate(), uart_platform_refclk(), 16);
+	am335x_uart_init(div);
 }
 
 unsigned char uart_rx_byte(void)
@@ -196,6 +183,6 @@
 	am335x_uart_tx_byte(data);
 }
 
-void uart_tx_flush(void) {
+void uart_tx_flush(void)
+{
 }
-#endif
diff --git a/src/drivers/uart/pl011.c b/src/drivers/uart/pl011.c
index 376e95c..2202de7 100644
--- a/src/drivers/uart/pl011.c
+++ b/src/drivers/uart/pl011.c
@@ -13,7 +13,6 @@
  * GNU General Public License for more details.
  */
 
-#include <console/console.h>
 #include <console/uart.h>
 
 static void pl011_uart_tx_byte(unsigned char data)
@@ -25,16 +24,12 @@
 }
 
 #if !defined(__PRE_RAM__)
-
-static const struct console_driver pl011_uart_console __console = {
-	.tx_byte  = pl011_uart_tx_byte,
-};
-
 uint32_t uartmem_getbaseaddr(void)
 {
 	return CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
 }
-#else
+#endif
+
 void uart_init(void)
 {
 }
@@ -47,4 +42,8 @@
 void uart_tx_flush(void)
 {
 }
-#endif
+
+unsigned char uart_rx_byte(void)
+{
+	return 0;
+}
diff --git a/src/include/console/uart.h b/src/include/console/uart.h
index 17811ca..f0371a2 100644
--- a/src/include/console/uart.h
+++ b/src/include/console/uart.h
@@ -20,6 +20,8 @@
 #ifndef CONSOLE_UART_H
 #define CONSOLE_UART_H
 
+#include <stdint.h>
+
 /* Return the clock frequency UART uses as reference clock for
  * baudrate generator. */
 unsigned int uart_platform_refclk(void);