From e43ce3fca755d79635899b658a97f3c4a7dbf220 Mon Sep 17 00:00:00 2001 From: Francois Retief Date: Thu, 29 Oct 2015 12:55:34 +0200 Subject: sparc: leon3: Add debug_uart support to LEON3 serial driver. Signed-off-by: Francois Retief --- arch/sparc/cpu/leon3/cpu_init.c | 5 ++++- arch/sparc/cpu/leon3/serial.c | 27 ++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'arch') diff --git a/arch/sparc/cpu/leon3/cpu_init.c b/arch/sparc/cpu/leon3/cpu_init.c index 40d1751..b140da3 100644 --- a/arch/sparc/cpu/leon3/cpu_init.c +++ b/arch/sparc/cpu/leon3/cpu_init.c @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -50,7 +51,9 @@ struct { */ void cpu_init_f(void) { - +#ifdef CONFIG_DEBUG_UART + debug_uart_init(); +#endif } /* Routine called from start.S, diff --git a/arch/sparc/cpu/leon3/serial.c b/arch/sparc/cpu/leon3/serial.c index cefb9d2..66b3773 100644 --- a/arch/sparc/cpu/leon3/serial.c +++ b/arch/sparc/cpu/leon3/serial.c @@ -28,8 +28,10 @@ static int leon3_serial_init(void) /* find UART */ if (ambapp_apb_find(&ambapp_plb, VENDOR_GAISLER, GAISLER_APBUART, - CONFIG_SYS_GRLIB_APBUART_INDEX, &apbdev) != 1) + CONFIG_SYS_GRLIB_APBUART_INDEX, &apbdev) != 1) { + panic("%s: apbuart not found!\n", __func__); return -1; /* didn't find hardware */ + } /* found apbuart, let's init .. */ uart = (ambapp_dev_apbuart *) apbdev.address; @@ -145,3 +147,26 @@ __weak struct serial_device *default_serial_console(void) { return &leon3_serial_drv; } + +#ifdef CONFIG_DEBUG_UART_APBUART + +#include + +static inline void _debug_uart_init(void) +{ + ambapp_dev_apbuart *uart = (ambapp_dev_apbuart *)CONFIG_DEBUG_UART_BASE; + uart->scaler = (((CONFIG_DEBUG_UART_CLOCK*10) / (CONFIG_BAUDRATE*8)) - 5)/10; + uart->ctrl = APBUART_CTRL_RE | APBUART_CTRL_TE; +} + +static inline void _debug_uart_putc(int ch) +{ + ambapp_dev_apbuart *uart = (ambapp_dev_apbuart *)CONFIG_DEBUG_UART_BASE; + while (!(readl(&uart->status) & APBUART_STATUS_THE)) + WATCHDOG_RESET(); + writel(ch, &uart->data); +} + +DEBUG_UART_FUNCS + +#endif -- cgit v1.1