diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-11-02 11:21:51 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-11-02 11:24:00 +0100 |
commit | 4b055e23e9cfc33a0d67ca3358e1e07040a599ca (patch) | |
tree | 213643a9dd48ff77791b098b70728f59ca6add1e | |
parent | bsp/imx: Implement bsp_reset() (diff) | |
download | rtems-4b055e23e9cfc33a0d67ca3358e1e07040a599ca.tar.bz2 |
bsp/imx: Drain console before reset
Update #3090.
-rw-r--r-- | c/src/lib/libbsp/arm/imx/console/console-config.c | 13 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/imx/include/bsp.h | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/imx/startup/bspreset.c | 4 |
3 files changed, 18 insertions, 1 deletions
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 <bsp/bootcard.h> - +#include <bsp.h> #include <arm/freescale/imx/imx_wdogreg.h> 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; |