diff --git a/src/drivers/uart/Kconfig b/src/drivers/uart/Kconfig index c1c30907c3..5c9a9d129c 100644 --- a/src/drivers/uart/Kconfig +++ b/src/drivers/uart/Kconfig @@ -12,3 +12,7 @@ config HAVE_UART_SPECIAL bool default n +config DRIVERS_UART_PL011 + bool + default n + select HAVE_UART_SPECIAL diff --git a/src/drivers/uart/Makefile.inc b/src/drivers/uart/Makefile.inc index c797d4b44d..52a7024318 100644 --- a/src/drivers/uart/Makefile.inc +++ b/src/drivers/uart/Makefile.inc @@ -4,3 +4,13 @@ ramstage-y += util.c bootblock-y += util.c smm-y += util.c endif + +ifeq ($(CONFIG_CONSOLE_SERIAL_UART),y) + +ifeq ($(CONFIG_DRIVERS_UART_PL011),y) +bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += pl011.c +romstage-$(CONFIG_EARLY_CONSOLE) += pl011.c +ramstage-y += pl011.c +endif + +endif diff --git a/src/mainboard/emulation/qemu-armv7/uart.c b/src/drivers/uart/pl011.c similarity index 70% rename from src/mainboard/emulation/qemu-armv7/uart.c rename to src/drivers/uart/pl011.c index dfe5d0ac12..af085acbea 100644 --- a/src/mainboard/emulation/qemu-armv7/uart.c +++ b/src/drivers/uart/pl011.c @@ -16,37 +16,27 @@ #include #include -#define VEXPRESS_UART0_IO_ADDRESS (0x10009000) - -static void pl011_init_dev(void) { -} - -static void pl011_uart_tx_byte(unsigned char data) { +static void pl011_uart_tx_byte(unsigned char data) +{ static volatile unsigned int *uart0_address = - (unsigned int *)VEXPRESS_UART0_IO_ADDRESS; + (unsigned int *) CONFIG_CONSOLE_SERIAL_UART_ADDRESS; *uart0_address = (unsigned int)data; } -static void pl011_uart_tx_flush(void) { -} - #if !defined(__PRE_RAM__) static const struct console_driver pl011_uart_console __console = { - .init = pl011_init_dev, .tx_byte = pl011_uart_tx_byte, - .tx_flush = pl011_uart_tx_flush, }; uint32_t uartmem_getbaseaddr(void) { - return VEXPRESS_UART0_IO_ADDRESS; + return CONFIG_CONSOLE_SERIAL_UART_ADDRESS; } #else void uart_init(void) { - pl011_init_dev(); } void uart_tx_byte(unsigned char data) @@ -54,7 +44,7 @@ void uart_tx_byte(unsigned char data) pl011_uart_tx_byte(data); } -void uart_tx_flush(void) { - pl011_uart_tx_flush(); +void uart_tx_flush(void) +{ } #endif diff --git a/src/mainboard/emulation/qemu-armv7/Kconfig b/src/mainboard/emulation/qemu-armv7/Kconfig index 9ab9767ed1..edba627984 100644 --- a/src/mainboard/emulation/qemu-armv7/Kconfig +++ b/src/mainboard/emulation/qemu-armv7/Kconfig @@ -25,8 +25,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select ARCH_ARMV7 select CPU_ARMLTD_CORTEX_A9 - select HAVE_UART_MEMORY_MAPPED - select HAVE_UART_SPECIAL + select DRIVERS_UART_PL011 select BOARD_ROMSIZE_KB_4096 config MAINBOARD_DIR @@ -49,6 +48,11 @@ config DRAM_SIZE_MB int default 1024 +config CONSOLE_SERIAL_UART_ADDRESS + hex + depends on CONSOLE_SERIAL_UART + default 0x10009000 + # Memory map for qemu vexpress-a9: # # 0x0000_0000: jump instruction (by qemu) diff --git a/src/mainboard/emulation/qemu-armv7/Makefile.inc b/src/mainboard/emulation/qemu-armv7/Makefile.inc index 431d9ab865..d15495fbeb 100644 --- a/src/mainboard/emulation/qemu-armv7/Makefile.inc +++ b/src/mainboard/emulation/qemu-armv7/Makefile.inc @@ -21,7 +21,3 @@ ramstage-y += media.c bootblock-y += timer.c romstage-y += timer.c ramstage-y += timer.c - -bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += uart.c -romstage-$(CONFIG_EARLY_CONSOLE) += uart.c -ramstage-y += uart.c