sparc: leon3: Add debug_uart support to LEON3 serial driver.

Signed-off-by: Francois Retief <fgretief@spaceteq.co.za>
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 @@
  */
 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 @@
 
 	/* 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 @@
 {
 	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