diff options
-rw-r--r-- | arch/sparc/cpu/leon3/cpu_init.c | 5 | ||||
-rw-r--r-- | arch/sparc/cpu/leon3/serial.c | 27 | ||||
-rw-r--r-- | configs/grsim_defconfig | 4 | ||||
-rw-r--r-- | drivers/serial/Kconfig | 8 |
4 files changed, 42 insertions, 2 deletions
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 <ambapp.h> #include <grlib/irqmp.h> #include <grlib/gptimer.h> +#include <debug_uart.h> #include <config.h> @@ -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 <debug_uart.h> + +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 diff --git a/configs/grsim_defconfig b/configs/grsim_defconfig index a5ea7ab..d2f709f 100644 --- a/configs/grsim_defconfig +++ b/configs/grsim_defconfig @@ -14,3 +14,7 @@ CONFIG_SYS_TEXT_BASE=0x00000000 # CONFIG_CMD_NET is not set # CONFIG_CMD_NFS is not set CONFIG_SYS_AMBAPP_PRINT_ON_STARTUP=y +CONFIG_DEBUG_UART=y +CONFIG_DEBUG_UART_APBUART=y +CONFIG_DEBUG_UART_BASE=0x80000100 +CONFIG_DEBUG_UART_CLOCK=40000000 diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index d462244..eba96f4 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -98,6 +98,14 @@ config DEBUG_UART_ZYNQ 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_APBUART + depends on LEON3 + bool "Gaisler APBUART" + help + Select this to enable a debug UART using the serial_leon3 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 |