diff options
author | Michael Trensch <MTrensch@gmail.com> | 2012-04-27 11:32:21 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-04-30 13:45:55 +0200 |
commit | eecbcafa3fab3fba069c54e77b62c01ce2e412dc (patch) | |
tree | 5ba61d8d1dae6c07af7ef6a076e4b0a9afd25c11 /drivers | |
parent | 3231710c52e55cd7b7f69adcb41c7f8892f62f73 (diff) | |
download | barebox-eecbcafa3fab3fba069c54e77b62c01ce2e412dc.tar.gz barebox-eecbcafa3fab3fba069c54e77b62c01ce2e412dc.tar.xz |
netX: UART may not initialize correctly.
The netX internal UART latches register settings and internally uses
them only if written in the correct order. Other orders may work, but
sometimes the UART gets stuck, as the baudrate has not correctly been
set.
Signed-off-by: Michael Trensch <MTrensch@gmail.com>
Acked-by: Juergen Beisert <jbe@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/serial/serial_netx.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/serial/serial_netx.c b/drivers/serial/serial_netx.c index 2d4ef11722..838293fd72 100644 --- a/drivers/serial/serial_netx.c +++ b/drivers/serial/serial_netx.c @@ -77,10 +77,7 @@ static int netx_serial_init_port(struct console_device *cdev) /* disable uart */ writel(0, base + UART_CR); - - writel(LINE_CR_8BIT | LINE_CR_FEN, base + UART_LINE_CR); - - writel(DRV_ENABLE_TX | DRV_ENABLE_RTS, base + UART_DRV_ENABLE); + writel(BRM_CR_BAUD_RATE_MODE, base + UART_BRM_CR); /* set baud rate */ divisor = 115200 * 4096; @@ -88,9 +85,11 @@ static int netx_serial_init_port(struct console_device *cdev) divisor *= 256; divisor /= 100000; - writel((divisor >> 8) & 0xff, base + UART_BAUDDIV_MSB); writel(divisor & 0xff, base + UART_BAUDDIV_LSB); - writel(BRM_CR_BAUD_RATE_MODE, base + UART_BRM_CR); + writel((divisor >> 8) & 0xff, base + UART_BAUDDIV_MSB); + writel(DRV_ENABLE_TX | DRV_ENABLE_RTS, base + UART_DRV_ENABLE); + + writel(LINE_CR_8BIT | LINE_CR_FEN, base + UART_LINE_CR); /* Finally, enable the UART */ writel(CR_UARTEN, base + UART_CR); |