summaryrefslogtreecommitdiff
path: root/src/drivers/uart
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/uart')
-rw-r--r--src/drivers/uart/oxpcie_early.c2
-rw-r--r--src/drivers/uart/pl011.c17
-rw-r--r--src/drivers/uart/uart8250io.c28
-rw-r--r--src/drivers/uart/uart8250mem.c16
4 files changed, 29 insertions, 34 deletions
diff --git a/src/drivers/uart/oxpcie_early.c b/src/drivers/uart/oxpcie_early.c
index b81fa8914d..fd378068b3 100644
--- a/src/drivers/uart/oxpcie_early.c
+++ b/src/drivers/uart/oxpcie_early.c
@@ -97,7 +97,7 @@ void uart_fill_lb(void *data)
{
struct lb_serial serial;
serial.type = LB_SERIAL_TYPE_MEMORY_MAPPED;
- serial.baseaddr = uart_platform_base(0);
+ serial.baseaddr = uart_platform_base(CONFIG_UART_FOR_CONSOLE);
serial.baud = default_baudrate();
lb_add_serial(&serial, data);
diff --git a/src/drivers/uart/pl011.c b/src/drivers/uart/pl011.c
index 41e66face8..e2db87760a 100644
--- a/src/drivers/uart/pl011.c
+++ b/src/drivers/uart/pl011.c
@@ -21,26 +21,21 @@ static void pl011_uart_tx_byte(unsigned int *uart_base, unsigned char data)
*uart_base = (unsigned int)data;
}
-unsigned int uart_platform_base(int idx)
+void uart_init(int idx)
{
- return CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
}
-void uart_init(void)
+void uart_tx_byte(int idx, unsigned char data)
{
-}
-
-void uart_tx_byte(unsigned char data)
-{
- unsigned int *uart_base = uart_platform_baseptr(0);
+ unsigned int *uart_base = uart_platform_baseptr(idx);
pl011_uart_tx_byte(uart_base, data);
}
-void uart_tx_flush(void)
+void uart_tx_flush(int idx)
{
}
-unsigned char uart_rx_byte(void)
+unsigned char uart_rx_byte(int idx)
{
return 0;
}
@@ -50,7 +45,7 @@ void uart_fill_lb(void *data)
{
struct lb_serial serial;
serial.type = LB_SERIAL_TYPE_MEMORY_MAPPED;
- serial.baseaddr = uart_platform_base(0);
+ serial.baseaddr = uart_platform_base(CONFIG_UART_FOR_CONSOLE);
serial.baud = default_baudrate();
lb_add_serial(&serial, data);
diff --git a/src/drivers/uart/uart8250io.c b/src/drivers/uart/uart8250io.c
index b2f234b283..f4a7b0ab74 100644
--- a/src/drivers/uart/uart8250io.c
+++ b/src/drivers/uart/uart8250io.c
@@ -19,6 +19,7 @@
*/
#include <rules.h>
+#include <stdlib.h>
#include <arch/io.h>
#include <console/uart.h>
#include <trace.h>
@@ -102,37 +103,36 @@ static void uart8250_init(unsigned base_port, unsigned divisor)
ENABLE_TRACE;
}
-/* FIXME: Needs uart index from Kconfig.
- * Already use array as a work-around for ROMCC.
- */
-static const unsigned bases[1] = { CONFIG_TTYS0_BASE };
+static const unsigned bases[] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
unsigned int uart_platform_base(int idx)
{
- return bases[idx];
+ if (idx < ARRAY_SIZE(bases))
+ return bases[idx];
+ return 0;
}
-void uart_init(void)
+void uart_init(int idx)
{
unsigned int div;
div = uart_baudrate_divisor(default_baudrate(), BAUDRATE_REFCLK,
BAUDRATE_OVERSAMPLE);
- uart8250_init(bases[0], div);
+ uart8250_init(uart_platform_base(idx), div);
}
-void uart_tx_byte(unsigned char data)
+void uart_tx_byte(int idx, unsigned char data)
{
- uart8250_tx_byte(bases[0], data);
+ uart8250_tx_byte(uart_platform_base(idx), data);
}
-unsigned char uart_rx_byte(void)
+unsigned char uart_rx_byte(int idx)
{
- return uart8250_rx_byte(bases[0]);
+ return uart8250_rx_byte(uart_platform_base(idx));
}
-void uart_tx_flush(void)
+void uart_tx_flush(int idx)
{
- uart8250_tx_flush(bases[0]);
+ uart8250_tx_flush(uart_platform_base(idx));
}
#if ENV_RAMSTAGE
@@ -140,7 +140,7 @@ void uart_fill_lb(void *data)
{
struct lb_serial serial;
serial.type = LB_SERIAL_TYPE_IO_MAPPED;
- serial.baseaddr = uart_platform_base(0);
+ serial.baseaddr = uart_platform_base(CONFIG_UART_FOR_CONSOLE);
serial.baud = default_baudrate();
lb_add_serial(&serial, data);
diff --git a/src/drivers/uart/uart8250mem.c b/src/drivers/uart/uart8250mem.c
index 5a186f07a9..976bcb6949 100644
--- a/src/drivers/uart/uart8250mem.c
+++ b/src/drivers/uart/uart8250mem.c
@@ -89,9 +89,9 @@ static void uart8250_mem_init(unsigned base_port, unsigned divisor)
write8(base_port + UART_LCR, CONFIG_TTYS0_LCS);
}
-void uart_init(void)
+void uart_init(int idx)
{
- u32 base = uart_platform_base(0);
+ u32 base = uart_platform_base(idx);
if (!base)
return;
@@ -100,25 +100,25 @@ void uart_init(void)
uart8250_mem_init(base, div);
}
-void uart_tx_byte(unsigned char data)
+void uart_tx_byte(int idx, unsigned char data)
{
- u32 base = uart_platform_base(0);
+ u32 base = uart_platform_base(idx);
if (!base)
return;
uart8250_mem_tx_byte(base, data);
}
-unsigned char uart_rx_byte(void)
+unsigned char uart_rx_byte(int idx)
{
- u32 base = uart_platform_base(0);
+ u32 base = uart_platform_base(idx);
if (!base)
return 0xff;
return uart8250_mem_rx_byte(base);
}
-void uart_tx_flush(void)
+void uart_tx_flush(int idx)
{
- u32 base = uart_platform_base(0);
+ u32 base = uart_platform_base(idx);
if (!base)
return;
uart8250_mem_tx_flush(base);