From 4b055e23e9cfc33a0d67ca3358e1e07040a599ca Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 2 Nov 2017 11:21:51 +0100 Subject: bsp/imx: Drain console before reset Update #3090. --- c/src/lib/libbsp/arm/imx/console/console-config.c | 13 +++++++++++++ c/src/lib/libbsp/arm/imx/include/bsp.h | 2 ++ c/src/lib/libbsp/arm/imx/startup/bspreset.c | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) (limited to 'c/src/lib/libbsp/arm/imx') diff --git a/c/src/lib/libbsp/arm/imx/console/console-config.c b/c/src/lib/libbsp/arm/imx/console/console-config.c index a4c79a13b6..f7d7820136 100644 --- a/c/src/lib/libbsp/arm/imx/console/console-config.c +++ b/c/src/lib/libbsp/arm/imx/console/console-config.c @@ -59,6 +59,19 @@ static void imx_uart_write_polled(rtems_termios_device_context *base, char c) regs->utxd = IMX_UART_UTXD_TX_DATA(c); } +void imx_uart_console_drain(void) +{ + volatile imx_uart *regs; + + regs = imx_uart_get_regs(&imx_uart_console->base); + + if (regs != NULL) { + while ((regs->usr2 & IMX_UART_USR2_TXFE) == 0) { + /* Wait */ + } + } +} + static void imx_output_char(char c) { imx_uart_write_polled(&imx_uart_console->base, c); diff --git a/c/src/lib/libbsp/arm/imx/include/bsp.h b/c/src/lib/libbsp/arm/imx/include/bsp.h index cfea80748c..b5fb7127df 100644 --- a/c/src/lib/libbsp/arm/imx/include/bsp.h +++ b/c/src/lib/libbsp/arm/imx/include/bsp.h @@ -51,6 +51,8 @@ rtems_vector_number imx_get_irq_of_node( size_t index ); +void imx_uart_console_drain(void); + /** * @brief Registers an IMX I2C bus driver. * diff --git a/c/src/lib/libbsp/arm/imx/startup/bspreset.c b/c/src/lib/libbsp/arm/imx/startup/bspreset.c index 11eb039ef3..5e2cf3912a 100644 --- a/c/src/lib/libbsp/arm/imx/startup/bspreset.c +++ b/c/src/lib/libbsp/arm/imx/startup/bspreset.c @@ -13,13 +13,15 @@ */ #include - +#include #include void bsp_reset(void) { volatile uint16_t *pcr; + imx_uart_console_drain(); + pcr = (volatile uint16_t *) 0x30280000; *pcr &= ~WDOG_CR_SRS; *pcr &= ~WDOG_CR_SRS; -- cgit v1.2.3