Message ID | 1473734253-21583-3-git-send-email-wenyou.yang@atmel.com |
---|---|
State | Superseded |
Delegated to: | Andreas Bießmann |
Headers | show |
On Tue, Sep 13, 2016 at 10:37:33AM +0800, Wenyou Yang wrote: > Add support to enable an early debug UART for debugging. > > Signed-off-by: Wenyou Yang <wenyou.yang@atmel.com> > Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Andreas Bießmann <andreas@biessmann.org> > --- > > Changes in v2: > - Collect the Reviewed-by tag. > > drivers/serial/Kconfig | 7 +++++++ > drivers/serial/atmel_usart.c | 22 ++++++++++++++++++++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig > index a6035dc..b8ecd80 100644 > --- a/drivers/serial/Kconfig > +++ b/drivers/serial/Kconfig > @@ -98,6 +98,13 @@ config DEBUG_UART_AR933X > driver will be available until the real driver model serial is > running. > > +config DEBUG_UART_ATMEL > + bool "Atmel USART" > + help > + Select this to enable a debug UART using the atmel usart driver. You > + will need to provide parameters to make this work. The driver will > + be available until the real driver-model serial is running. > + > config DEBUG_UART_NS16550 > bool "ns16550" > help > diff --git a/drivers/serial/atmel_usart.c b/drivers/serial/atmel_usart.c > index e450135..7674f97 100644 > --- a/drivers/serial/atmel_usart.c > +++ b/drivers/serial/atmel_usart.c > @@ -11,6 +11,7 @@ > #include <errno.h> > #include <watchdog.h> > #include <serial.h> > +#include <debug_uart.h> > #include <linux/compiler.h> > > #include <asm/io.h> > @@ -226,3 +227,24 @@ U_BOOT_DRIVER(serial_atmel) = { > .priv_auto_alloc_size = sizeof(struct atmel_serial_priv), > }; > #endif > + > +#ifdef CONFIG_DEBUG_UART_ATMEL > +static inline void _debug_uart_init(void) > +{ > + atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_DEBUG_UART_BASE; > + > + atmel_serial_setbrg_internal(usart, 0, CONFIG_BAUDRATE); > +} > + > +static inline void _debug_uart_putc(int ch) > +{ > + atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_DEBUG_UART_BASE; > + > + while (!(readl(&usart->csr) & USART3_BIT(TXRDY))) > + ; > + > + writel(ch, &usart->thr); > +} > + > +DEBUG_UART_FUNCS > +#endif
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index a6035dc..b8ecd80 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -98,6 +98,13 @@ config DEBUG_UART_AR933X driver will be available until the real driver model serial is running. +config DEBUG_UART_ATMEL + bool "Atmel USART" + help + Select this to enable a debug UART using the atmel usart driver. You + will need to provide parameters to make this work. The driver will + be available until the real driver-model serial is running. + config DEBUG_UART_NS16550 bool "ns16550" help diff --git a/drivers/serial/atmel_usart.c b/drivers/serial/atmel_usart.c index e450135..7674f97 100644 --- a/drivers/serial/atmel_usart.c +++ b/drivers/serial/atmel_usart.c @@ -11,6 +11,7 @@ #include <errno.h> #include <watchdog.h> #include <serial.h> +#include <debug_uart.h> #include <linux/compiler.h> #include <asm/io.h> @@ -226,3 +227,24 @@ U_BOOT_DRIVER(serial_atmel) = { .priv_auto_alloc_size = sizeof(struct atmel_serial_priv), }; #endif + +#ifdef CONFIG_DEBUG_UART_ATMEL +static inline void _debug_uart_init(void) +{ + atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_DEBUG_UART_BASE; + + atmel_serial_setbrg_internal(usart, 0, CONFIG_BAUDRATE); +} + +static inline void _debug_uart_putc(int ch) +{ + atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_DEBUG_UART_BASE; + + while (!(readl(&usart->csr) & USART3_BIT(TXRDY))) + ; + + writel(ch, &usart->thr); +} + +DEBUG_UART_FUNCS +#endif