Skip to content
Snippets Groups Projects
Commit dd0b0122 authored by Simon Glass's avatar Simon Glass
Browse files

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: default avatarSimon Glass <sjg@chromium.org>
parent 5b5e9ba3
No related branches found
No related tags found
No related merge requests found
...@@ -66,6 +66,16 @@ config DEBUG_UART_CLOCK ...@@ -66,6 +66,16 @@ config DEBUG_UART_CLOCK
A default should be provided by your board, but if not you will need A default should be provided by your board, but if not you will need
to use the correct value here. 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 config UNIPHIER_SERIAL
bool "UniPhier on-chip UART support" bool "UniPhier on-chip UART support"
depends on ARCH_UNIPHIER && DM_SERIAL depends on ARCH_UNIPHIER && DM_SERIAL
......
...@@ -254,15 +254,20 @@ void debug_uart_init(void) ...@@ -254,15 +254,20 @@ void debug_uart_init(void)
*/ */
baud_divisor = calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK, baud_divisor = calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK,
CONFIG_BAUDRATE); CONFIG_BAUDRATE);
baud_divisor = 13;
serial_out_shift(&com_port->ier, 0, CONFIG_SYS_NS16550_IER); serial_out_shift(&com_port->ier, CONFIG_DEBUG_UART_SHIFT,
serial_out_shift(&com_port->mcr, 0, UART_MCRVAL); CONFIG_SYS_NS16550_IER);
serial_out_shift(&com_port->fcr, 0, UART_FCRVAL); 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, 0, UART_LCR_BKSE | UART_LCRVAL);
serial_out_shift(&com_port->dll, 0, baud_divisor & 0xff); serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT,
serial_out_shift(&com_port->dlm, 0, (baud_divisor >> 8) & 0xff); UART_LCR_BKSE | UART_LCRVAL);
serial_out_shift(&com_port->lcr, 0, 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) static inline void _debug_uart_putc(int ch)
...@@ -271,7 +276,7 @@ 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)) 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 DEBUG_UART_FUNCS
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment