summaryrefslogtreecommitdiff
path: root/arch/mips/loongson/common/early_printk.c
diff options
context:
space:
mode:
authorWu Zhangjin <wuzhangjin@gmail.com>2009-11-06 18:35:34 +0800
committerRalf Baechle <ralf@linux-mips.org>2009-12-17 01:57:09 +0000
commita3ed495190ebe918f4584291ed8c76f1c97a84fd (patch)
tree700cc7549624c08b38d6003d63a7bb514fe09605 /arch/mips/loongson/common/early_printk.c
parent04cfb90a92a2f9f7b56b2f85c528be7d1561e0e5 (diff)
MIPS: Loongson: Cleanup the serial port support
To share the same kernel image amon different machines we have added the machtype command line support. In the old serial port implementation the UART base address is hardcoded as a macro in machine.h which breaks with machtype, so change that to discover the address dynamically. Also move the initialization of the UART base address to uart_base.c to avoid remapping twice for early_printk.c and serial.c. Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com> Cc: linux-mips@linux-mips.org Patchwork: http://patchwork.linux-mips.org/patch/581/ Patchwork: http://patchwork.linux-mips.org/patch/682/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/loongson/common/early_printk.c')
-rw-r--r--arch/mips/loongson/common/early_printk.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/mips/loongson/common/early_printk.c b/arch/mips/loongson/common/early_printk.c
index 8ec4fb2066ae..23e7a8f8897f 100644
--- a/arch/mips/loongson/common/early_printk.c
+++ b/arch/mips/loongson/common/early_printk.c
@@ -12,7 +12,6 @@
#include <linux/serial_reg.h>
#include <loongson.h>
-#include <machine.h>
#define PORT(base, offset) (u8 *)(base + offset)
@@ -28,10 +27,14 @@ static inline void serial_out(unsigned char *base, int offset, int value)
void prom_putchar(char c)
{
- unsigned char *uart_base =
- (unsigned char *) ioremap_nocache(LOONGSON_UART_BASE, 8);
+ int timeout;
+ unsigned char *uart_base;
- while ((serial_in(uart_base, UART_LSR) & UART_LSR_THRE) == 0)
+ uart_base = (unsigned char *)_loongson_uart_base;
+ timeout = 1024;
+
+ while (((serial_in(uart_base, UART_LSR) & UART_LSR_THRE) == 0) &&
+ (timeout-- > 0))
;
serial_out(uart_base, UART_TX, c);