summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2014-02-14 10:31:38 +0200
committerKyösti Mälkki <kyosti.malkki@gmail.com>2014-03-04 15:40:34 +0100
commit0567c91b22e36eb07e7c7b8a67cbf6b41778db30 (patch)
tree1d8ee38c3e001f8be09b677554c02addf36292e9
parentab94bbf07221483ec52d072940a8b6206b69dc62 (diff)
downloadcoreboot-0567c91b22e36eb07e7c7b8a67cbf6b41778db30.tar.xz
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>
-rw-r--r--src/console/Makefile.inc3
-rw-r--r--src/console/uart8250_console.c54
-rw-r--r--src/console/uart_console.c (renamed from src/console/uart8250mem_console.c)7
-rw-r--r--src/cpu/allwinner/a10/uart_console.c33
-rw-r--r--src/cpu/samsung/exynos5250/uart.c15
-rw-r--r--src/cpu/samsung/exynos5420/uart.c15
-rw-r--r--src/cpu/ti/am335x/uart.c25
-rw-r--r--src/drivers/uart/pl011.c15
-rw-r--r--src/include/console/uart.h2
9 files changed, 29 insertions, 140 deletions
diff --git a/src/console/Makefile.inc b/src/console/Makefile.inc
index f158670a34..df08e80444 100644
--- a/src/console/Makefile.inc
+++ b/src/console/Makefile.inc
@@ -17,8 +17,7 @@ bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += vtxprintf.c
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 52f59f643a..0000000000
--- 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
index 7e52aed273..e2cd6a8b81 100644
--- a/src/console/uart8250mem_console.c
+++ b/src/console/uart_console.c
@@ -40,12 +40,17 @@ static unsigned char uartmem_rx_byte(void)
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 af66cb7f6b..aea1189e66 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 @@ unsigned int uart_platform_refclk(void)
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 @@ static void a10_uart_init_dev(void)
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 c9d8d252ad..14d140c4dc 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 @@ static void exynos5_uart_tx_flush(void)
}
#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 @@ void uart_tx_flush(void)
{
exynos5_uart_tx_flush();
}
-
-#endif
diff --git a/src/cpu/samsung/exynos5420/uart.c b/src/cpu/samsung/exynos5420/uart.c
index f9dd26837f..d05adcd903 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 @@ static void exynos5_uart_tx_byte(unsigned char data)
}
#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_byte(unsigned char data)
void uart_tx_flush(void)
{
}
-
-#endif
diff --git a/src/cpu/ti/am335x/uart.c b/src/cpu/ti/am335x/uart.c
index f6f1a8d137..27051ea2cc 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 @@ unsigned int uart_platform_refclk(void)
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 @@ void uart_tx_byte(unsigned char data)
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 376e95c0c8..2202de755d 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 @@ static void pl011_uart_tx_byte(unsigned char data)
}
#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_byte(unsigned char data)
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 17811cab4c..f0371a2a98 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);