提交 dd0b0122 编写于 作者: S Simon Glass

serial: ns16550: Add an option to specify the debug UART register shift

This UART permits different register spacing. To support the debug UART on
devices which have a spacing other than 1 byte, allow the shift value to
be specified.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 5b5e9ba3
......@@ -66,6 +66,16 @@ config DEBUG_UART_CLOCK
A default should be provided by your board, but if not you will need
to use the correct value here.
config DEBUG_UART_SHIFT
int "UART register shift"
depends on DEBUG_UART
default 0 if DEBUG_UART
help
Some UARTs (notably ns16550) support different register layouts
where the registers are spaced either as bytes, words or some other
value. Use this value to specify the shift to use, where 0=byte
registers, 2=32-bit word registers, etc.
config UNIPHIER_SERIAL
bool "UniPhier on-chip UART support"
depends on ARCH_UNIPHIER && DM_SERIAL
......
......@@ -254,15 +254,20 @@ void debug_uart_init(void)
*/
baud_divisor = calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK,
CONFIG_BAUDRATE);
serial_out_shift(&com_port->ier, 0, CONFIG_SYS_NS16550_IER);
serial_out_shift(&com_port->mcr, 0, UART_MCRVAL);
serial_out_shift(&com_port->fcr, 0, UART_FCRVAL);
serial_out_shift(&com_port->lcr, 0, UART_LCR_BKSE | UART_LCRVAL);
serial_out_shift(&com_port->dll, 0, baud_divisor & 0xff);
serial_out_shift(&com_port->dlm, 0, (baud_divisor >> 8) & 0xff);
serial_out_shift(&com_port->lcr, 0, UART_LCRVAL);
baud_divisor = 13;
serial_out_shift(&com_port->ier, CONFIG_DEBUG_UART_SHIFT,
CONFIG_SYS_NS16550_IER);
serial_out_shift(&com_port->mcr, CONFIG_DEBUG_UART_SHIFT, UART_MCRVAL);
serial_out_shift(&com_port->fcr, CONFIG_DEBUG_UART_SHIFT, UART_FCRVAL);
serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT,
UART_LCR_BKSE | UART_LCRVAL);
serial_out_shift(&com_port->dll, CONFIG_DEBUG_UART_SHIFT,
baud_divisor & 0xff);
serial_out_shift(&com_port->dlm, CONFIG_DEBUG_UART_SHIFT,
(baud_divisor >> 8) & 0xff);
serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT,
UART_LCRVAL);
}
static inline void _debug_uart_putc(int ch)
......@@ -271,7 +276,7 @@ static inline void _debug_uart_putc(int ch)
while (!(serial_in_shift(&com_port->lsr, 0) & UART_LSR_THRE))
;
serial_out_shift(&com_port->thr, 0, ch);
serial_out_shift(&com_port->thr, CONFIG_DEBUG_UART_SHIFT, ch);
}
DEBUG_UART_FUNCS
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册