serial: omap: Support debug UART

Add debug UART functions to permit omap specific ns16550 to
provide an early debug UART. This is mostly in common with
DEBUG_UART_NS16550 except for Mode definition register which
is required for selecting UART mode(16x auto-baud or 13x mode).

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
master
Lokesh Vutla 7 years ago committed by Tom Rini
parent 46f51dc9c7
commit a52cf086ac
  1. 7
      drivers/serial/Kconfig
  2. 47
      drivers/serial/ns16550.c
  3. 11
      include/debug_uart.h

@ -257,6 +257,13 @@ config DEBUG_UART_UNIPHIER
driver will be available until the real driver-model serial is
running.
config DEBUG_UART_OMAP
bool "OMAP uart"
help
Select this to enable a debug UART using the omap ns16550 driver.
You will need to provide parameters to make this work. The driver
will be available until the real driver model serial is running.
endchoice
config DEBUG_UART_BASE

@ -246,17 +246,6 @@ int NS16550_tstc(NS16550_t com_port)
#include <debug_uart.h>
#define serial_dout(reg, value) \
serial_out_shift((char *)com_port + \
((char *)reg - (char *)com_port) * \
(1 << CONFIG_DEBUG_UART_SHIFT), \
CONFIG_DEBUG_UART_SHIFT, value)
#define serial_din(reg) \
serial_in_shift((char *)com_port + \
((char *)reg - (char *)com_port) * \
(1 << CONFIG_DEBUG_UART_SHIFT), \
CONFIG_DEBUG_UART_SHIFT)
static inline void _debug_uart_init(void)
{
struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE;
@ -293,6 +282,42 @@ DEBUG_UART_FUNCS
#endif
#ifdef CONFIG_DEBUG_UART_OMAP
#include <debug_uart.h>
static inline void _debug_uart_init(void)
{
struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE;
int baud_divisor;
baud_divisor = ns16550_calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK,
CONFIG_BAUDRATE);
serial_dout(&com_port->ier, CONFIG_SYS_NS16550_IER);
serial_dout(&com_port->mdr1, 0x7);
serial_dout(&com_port->mcr, UART_MCRVAL);
serial_dout(&com_port->fcr, UART_FCR_DEFVAL);
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);
serial_dout(&com_port->lcr, UART_LCRVAL);
serial_dout(&com_port->mdr1, 0x0);
}
static inline void _debug_uart_putc(int ch)
{
struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE;
while (!(serial_din(&com_port->lsr) & UART_LSR_THRE))
;
serial_dout(&com_port->thr, ch);
}
DEBUG_UART_FUNCS
#endif
#ifdef CONFIG_DM_SERIAL
static int ns16550_serial_putc(struct udevice *dev, const char ch)
{

@ -111,6 +111,17 @@ void printhex8(uint value);
#define _DEBUG_UART_ANNOUNCE
#endif
#define serial_dout(reg, value) \
serial_out_shift((char *)com_port + \
((char *)reg - (char *)com_port) * \
(1 << CONFIG_DEBUG_UART_SHIFT), \
CONFIG_DEBUG_UART_SHIFT, value)
#define serial_din(reg) \
serial_in_shift((char *)com_port + \
((char *)reg - (char *)com_port) * \
(1 << CONFIG_DEBUG_UART_SHIFT), \
CONFIG_DEBUG_UART_SHIFT)
/*
* Now define some functions - this should be inserted into the serial driver
*/

Loading…
Cancel
Save