summaryrefslogtreecommitdiff
path: root/src/cpu/ti/am335x
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2014-03-14 22:28:29 +0200
committerKyösti Mälkki <kyosti.malkki@gmail.com>2014-04-30 06:59:05 +0200
commit70342a7f51a0069446966c42db4dbc44f6db16ee (patch)
treec701e9fe78ca219fae3664fc7b4d54ab187f7f4f /src/cpu/ti/am335x
parenta8d089d3acc0c2254b3dbeb04c1e622ab01e6d98 (diff)
uart: Support multiple ports
The port for console remains to be a compile time constant. The Kconfig option is changed to select an UART port with index to avoid putting map of UART base addresses in Kconfigs. With this change it is possible to have other than debug console on different UART port. Change-Id: Ie1845a946f8d3b2604ef5404edb31b2e811f3ccd Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: http://review.coreboot.org/5342 Tested-by: build bot (Jenkins) Reviewed-by: David Hendricks <dhendrix@chromium.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'src/cpu/ti/am335x')
-rw-r--r--src/cpu/ti/am335x/uart.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/cpu/ti/am335x/uart.c b/src/cpu/ti/am335x/uart.c
index 858926bc31..d398d9aba6 100644
--- a/src/cpu/ti/am335x/uart.c
+++ b/src/cpu/ti/am335x/uart.c
@@ -16,6 +16,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <stdlib.h>
#include <config.h>
#include <types.h>
#include <console/uart.h>
@@ -154,30 +155,36 @@ unsigned int uart_platform_refclk(void)
unsigned int uart_platform_base(int idx)
{
- return CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
+ const unsigned int bases[] = {
+ 0x44e09000, 0x48022000, 0x48024000,
+ 0x481a6000, 0x481a8000, 0x481aa000
+ };
+ if (idx < ARRAY_SIZE(bases))
+ return bases[idx];
+ return 0;
}
-void uart_init(void)
+void uart_init(int idx)
{
- struct am335x_uart *uart = uart_platform_baseptr(0);
+ struct am335x_uart *uart = uart_platform_baseptr(idx);
uint16_t div = (uint16_t) uart_baudrate_divisor(
default_baudrate(), uart_platform_refclk(), 16);
am335x_uart_init(uart, div);
}
-unsigned char uart_rx_byte(void)
+unsigned char uart_rx_byte(int idx)
{
- struct am335x_uart *uart = uart_platform_baseptr(0);
+ struct am335x_uart *uart = uart_platform_baseptr(idx);
return am335x_uart_rx_byte(uart);
}
-void uart_tx_byte(unsigned char data)
+void uart_tx_byte(int idx, unsigned char data)
{
- struct am335x_uart *uart = uart_platform_baseptr(0);
+ struct am335x_uart *uart = uart_platform_baseptr(idx);
am335x_uart_tx_byte(uart, data);
}
-void uart_tx_flush(void)
+void uart_tx_flush(int idx)
{
}
@@ -186,7 +193,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);