From: Jagan Teki Date: Tue, 6 Jun 2017 05:31:51 +0000 (+0000) Subject: serial: mxc: Add debug uart support X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Fu-boot.git;a=commitdiff_plain;h=61366b71a8950aae48ce9e00295a16cf65ac4f02 serial: mxc: Add debug uart support Add support for the debug UART to assist with early debugging. Enable it for i.CoreM6 as an example. Signed-off-by: Jagan Teki Reviewed-by: Simon Glass --- diff --git a/configs/imx6qdl_icore_mmc_defconfig b/configs/imx6qdl_icore_mmc_defconfig index 8c0cc96ba8..2b1bb3d591 100644 --- a/configs/imx6qdl_icore_mmc_defconfig +++ b/configs/imx6qdl_icore_mmc_defconfig @@ -45,3 +45,7 @@ CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_IMX_THERMAL=y CONFIG_VIDEO_IPUV3=y +CONFIG_DEBUG_UART=y +CONFIG_DEBUG_UART_MXC=y +CONFIG_DEBUG_UART_BASE=0x021f0000 +CONFIG_DEBUG_UART_CLOCK=24000000 diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index b7dd2ac103..97cef7edbd 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -248,6 +248,14 @@ config DEBUG_UART_PIC32 will need to provide parameters to make this work. The driver will be available until the real driver model serial is running. +config DEBUG_UART_MXC + bool "IMX Serial port" + depends on MXC_UART + help + Select this to enable a debug UART using the serial_mxc driver. You + will need to provide parameters to make this work. The driver will + be available until the real driver model serial is running. + config DEBUG_UART_UNIPHIER bool "UniPhier on-chip UART" depends on ARCH_UNIPHIER diff --git a/drivers/serial/serial_mxc.c b/drivers/serial/serial_mxc.c index c8c36e5e19..cce80a8559 100644 --- a/drivers/serial/serial_mxc.c +++ b/drivers/serial/serial_mxc.c @@ -357,3 +357,29 @@ U_BOOT_DRIVER(serial_mxc) = { .flags = DM_FLAG_PRE_RELOC, }; #endif + +#ifdef CONFIG_DEBUG_UART_MXC +#include + +static inline void _debug_uart_init(void) +{ + struct mxc_uart *base = (struct mxc_uart *)CONFIG_DEBUG_UART_BASE; + + _mxc_serial_init(base); + _mxc_serial_setbrg(base, CONFIG_DEBUG_UART_CLOCK, + CONFIG_BAUDRATE, false); +} + +static inline void _debug_uart_putc(int ch) +{ + struct mxc_uart *base = (struct mxc_uart *)CONFIG_DEBUG_UART_BASE; + + while (!(readl(&base->ts) & UTS_TXEMPTY)) + WATCHDOG_RESET(); + + writel(ch, &base->txd); +} + +DEBUG_UART_FUNCS + +#endif