Message ID | b8cb8cd896111a12decf33bc776deb2ca9f4420f.1539326908.git.ryder.lee@mediatek.com |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
Series | Add U-Boot support for MediaTek SoCs - MT7623n & MT7629 | expand |
On 12 October 2018 at 01:01, Ryder Lee <ryder.lee@mediatek.com> wrote: > This patch adds an extra operation in ns16550.c to suuport MediaTek > SoCs as we have a highspeed register which influences the calcualtion > of the divisor. > > Note that we don't support the baudrate greater than 115200 currently. > > Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> > Tested-by: Matthias Brugger <matthias.bgg@gmail.com> > --- > drivers/serial/ns16550.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > Reviewed-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index f9041aa..f5410af 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -148,6 +148,13 @@ int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate) static void NS16550_setbrg(NS16550_t com_port, int baud_divisor) { +#ifdef CONFIG_ARCH_MEDIATEK + /* + * MediaTek UARTs has an extra highspeed register. + * We need to clear it if baudrate <= 115200. + */ + serial_out(0, &com_port->reg9); +#endif serial_out(UART_LCR_BKSE | UART_LCRVAL, &com_port->lcr); serial_out(baud_divisor & 0xff, &com_port->dll); serial_out((baud_divisor >> 8) & 0xff, &com_port->dlm); @@ -261,6 +268,9 @@ static inline void _debug_uart_init(void) serial_dout(&com_port->mcr, UART_MCRVAL); serial_dout(&com_port->fcr, UART_FCR_DEFVAL); +#ifdef CONFIG_ARCH_MEDIATEK + serial_dout(&com_port->reg9, 0); +#endif serial_dout(&com_port->lcr, UART_LCR_BKSE | UART_LCRVAL); serial_dout(&com_port->dll, baud_divisor & 0xff); serial_dout(&com_port->dlm, (baud_divisor >> 8) & 0xff);