From 232f5b213a5d9937c66149dde7805cd866d9f039 Mon Sep 17 00:00:00 2001 From: Marcelo Povoa Date: Thu, 6 Feb 2014 15:17:37 -0800 Subject: [PATCH] foundation-armv8: Implement proper pl011 UART initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BUG=None BRANCH=none TEST=Ran image in foundation model Signed-off-by: Marcelo Povoa Change-Id: I4e86f6251196d1b4d5e43bc6fd7297cf9624c2ab Reviewed-on: https://chromium-review.googlesource.com/185272 Reviewed-by: Stefan Reinauer Reviewed-by: David Hendricks Tested-by: Marcelo Póvoa Commit-Queue: Marcelo Póvoa --- .../emulation/foundation-armv8/uart.c | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/mainboard/emulation/foundation-armv8/uart.c b/src/mainboard/emulation/foundation-armv8/uart.c index 26cd4ef65b..819c7c414d 100644 --- a/src/mainboard/emulation/foundation-armv8/uart.c +++ b/src/mainboard/emulation/foundation-armv8/uart.c @@ -16,16 +16,29 @@ #include #include -static void pl011_init_dev(void) { +#define FOUNDATION_UART0_IO_ADDRESS (0x1C090000) + +#define PL011_UARTCR_OFFSET (0x030) + +static void pl011_init_dev(void) +{ + static volatile uint32_t *uartcr_address = + (uint32_t *)(FOUNDATION_UART0_IO_ADDRESS + PL011_UARTCR_OFFSET); + + /* Enable TX and UART */ + *uartcr_address = *uartcr_address | (1 << 8) | (1 << 0); } -static void pl011_uart_tx_byte(unsigned char data) { - static volatile unsigned int *uart0_address = (void *)0; +static void pl011_uart_tx_byte(uint8_t data) +{ + static volatile uint32_t *uart0_address = + (uint32_t *)FOUNDATION_UART0_IO_ADDRESS; - *uart0_address = (unsigned int)data; + *uart0_address = (uint32_t)data; } -static void pl011_uart_tx_flush(void) { +static void pl011_uart_tx_flush(void) +{ } #if !defined(__PRE_RAM__) @@ -38,7 +51,7 @@ static const struct console_driver pl011_uart_console __console = { uint32_t uartmem_getbaseaddr(void) { - return 0; + return FOUNDATION_UART0_IO_ADDRESS; } #else @@ -52,7 +65,8 @@ void uart_tx_byte(unsigned char data) pl011_uart_tx_byte(data); } -void uart_tx_flush(void) { +void uart_tx_flush(void) +{ pl011_uart_tx_flush(); } #endif