提交 1f4faedd 编写于 作者: X Xu, Hong 提交者: Albert ARIBAUD

AT91: Small fix on AT91 USART initialization code

Before reset dbgu transmitter, we just wait TXEMPTY to drain the
transmitter register(Just in case). If not doing this, we may sometimes
see several weird characters from DBGU.

A short delay is also added to make sure the new serial settings are
settled.
Signed-off-by: NHong Xu <hong.xu@atmel.com>
[cherry-picked from u-boot-atmel/old-next]
Signed-off-by: NAndreas Bießmann <andreas.devel@googlemail.com>
上级 88461f16
...@@ -49,17 +49,26 @@ int serial_init(void) ...@@ -49,17 +49,26 @@ int serial_init(void)
{ {
atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_USART_BASE; atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_USART_BASE;
/*
* Just in case: drain transmitter register
* 1000us is enough for baudrate >= 9600
*/
if (!(readl(&usart->csr) & USART3_BIT(TXEMPTY)))
__udelay(1000);
writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), &usart->cr); writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), &usart->cr);
serial_setbrg(); serial_setbrg();
writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr);
writel((USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL) writel((USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)
| USART3_BF(USCLKS, USART3_USCLKS_MCK) | USART3_BF(USCLKS, USART3_USCLKS_MCK)
| USART3_BF(CHRL, USART3_CHRL_8) | USART3_BF(CHRL, USART3_CHRL_8)
| USART3_BF(PAR, USART3_PAR_NONE) | USART3_BF(PAR, USART3_PAR_NONE)
| USART3_BF(NBSTOP, USART3_NBSTOP_1)), | USART3_BF(NBSTOP, USART3_NBSTOP_1)),
&usart->mr); &usart->mr);
writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr);
/* 100us is enough for the new settings to be settled */
__udelay(100);
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册