summaryrefslogtreecommitdiff
path: root/src/cpu/ti/am335x/uart.c
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2014-02-24 20:51:30 +0200
committerPatrick Georgi <patrick@georgi-clan.de>2014-04-09 11:13:03 +0200
commitc2610a4a186c6e5a05f6518c2c7a734fde8f6cfd (patch)
tree21af900856344ac5a21ff6eca474d54fd7de97ac /src/cpu/ti/am335x/uart.c
parente5760af3980ea4c55afd7e759e8ca2a078a4a1dc (diff)
downloadcoreboot-c2610a4a186c6e5a05f6518c2c7a734fde8f6cfd.tar.xz
uart: Prepare to support multiple base addresses
Prepare low-level register access to take UART base address as a parameter. This is done to support a list of base addresses defined in the platform. Change-Id: Ie630e55f2562f099b0ba9eb94b08c92d26dfdf2e Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: http://review.coreboot.org/5309 Tested-by: build bot (Jenkins) Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Diffstat (limited to 'src/cpu/ti/am335x/uart.c')
-rw-r--r--src/cpu/ti/am335x/uart.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/cpu/ti/am335x/uart.c b/src/cpu/ti/am335x/uart.c
index 27051ea2cc..09bb96ece3 100644
--- a/src/cpu/ti/am335x/uart.c
+++ b/src/cpu/ti/am335x/uart.c
@@ -35,10 +35,8 @@
* Initialise the serial port with the given baudrate divisor. The settings
* are always 8 data bits, no parity, 1 stop bit, no start bits.
*/
-static void am335x_uart_init(uint16_t div)
+static void am335x_uart_init(struct am335x_uart *uart, uint16_t div)
{
- struct am335x_uart *uart = (struct am335x_uart *)
- CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
uint16_t lcr_orig, efr_orig, mcr_orig;
/* reset the UART */
@@ -131,11 +129,8 @@ static void am335x_uart_init(uint16_t div)
* otherwise. When the function is successful, the character read is
* written into its argument c.
*/
-static unsigned char am335x_uart_rx_byte(void)
+static unsigned char am335x_uart_rx_byte(struct am335x_uart *uart)
{
- struct am335x_uart *uart =
- (struct am335x_uart *)CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
-
while (!(read16(&uart->lsr) & LSR_RXFIFOE));
return read8(&uart->rhr);
@@ -144,11 +139,8 @@ static unsigned char am335x_uart_rx_byte(void)
/*
* Output a single byte to the serial port.
*/
-static void am335x_uart_tx_byte(unsigned char data)
+static void am335x_uart_tx_byte(struct am335x_uart *uart, unsigned char data)
{
- struct am335x_uart *uart =
- (struct am335x_uart *)CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
-
while (!(read16(&uart->lsr) & LSR_TXFIFOE));
return write8(data, &uart->thr);
@@ -159,28 +151,36 @@ unsigned int uart_platform_refclk(void)
return 48000000;
}
+unsigned int uart_platform_base(int idx)
+{
+ return CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
+}
+
#if !defined(__PRE_RAM__)
uint32_t uartmem_getbaseaddr(void)
{
- return CONFIG_CONSOLE_SERIAL_UART_ADDRESS;
+ return uart_platform_base(0);
}
#endif
void uart_init(void)
{
+ struct am335x_uart *uart = uart_platform_baseptr(0);
uint16_t div = (uint16_t) uart_baudrate_divisor(
default_baudrate(), uart_platform_refclk(), 16);
- am335x_uart_init(div);
+ am335x_uart_init(uart, div);
}
unsigned char uart_rx_byte(void)
{
- return am335x_uart_rx_byte();
+ struct am335x_uart *uart = uart_platform_baseptr(0);
+ return am335x_uart_rx_byte(uart);
}
void uart_tx_byte(unsigned char data)
{
- am335x_uart_tx_byte(data);
+ struct am335x_uart *uart = uart_platform_baseptr(0);
+ am335x_uart_tx_byte(uart, data);
}
void uart_tx_flush(void)