summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichael Trensch <MTrensch@gmail.com>2012-04-27 11:32:21 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-04-30 13:45:55 +0200
commiteecbcafa3fab3fba069c54e77b62c01ce2e412dc (patch)
tree5ba61d8d1dae6c07af7ef6a076e4b0a9afd25c11 /drivers
parent3231710c52e55cd7b7f69adcb41c7f8892f62f73 (diff)
downloadbarebox-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.c11
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);