mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-04-01 12:01:31 +00:00
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: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
5b5e9ba3f7
commit
dd0b0122ba
2 changed files with 24 additions and 9 deletions
|
@ -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)
|
||||||
*/
|
*/
|
||||||
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, 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->ier, 0, CONFIG_SYS_NS16550_IER);
|
serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT,
|
||||||
serial_out_shift(&com_port->mcr, 0, UART_MCRVAL);
|
UART_LCR_BKSE | UART_LCRVAL);
|
||||||
serial_out_shift(&com_port->fcr, 0, UART_FCRVAL);
|
serial_out_shift(&com_port->dll, CONFIG_DEBUG_UART_SHIFT,
|
||||||
|
baud_divisor & 0xff);
|
||||||
serial_out_shift(&com_port->lcr, 0, UART_LCR_BKSE | UART_LCRVAL);
|
serial_out_shift(&com_port->dlm, CONFIG_DEBUG_UART_SHIFT,
|
||||||
serial_out_shift(&com_port->dll, 0, baud_divisor & 0xff);
|
(baud_divisor >> 8) & 0xff);
|
||||||
serial_out_shift(&com_port->dlm, 0, (baud_divisor >> 8) & 0xff);
|
serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT,
|
||||||
serial_out_shift(&com_port->lcr, 0, UART_LCRVAL);
|
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)
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue