Skip to content

Commit

Permalink
MIPS: Loongson: Add serial port support
Browse files Browse the repository at this point in the history
This patch add serial port support for all of the existing loongson
family machines. most of the board specific part are put in serial.c,
and the base address of the serial ports are defined as macros in
machine.h for sharing it between serial.c and early_printk.c

Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Cc: yanh@lemote.com
Cc: huhb@lemote.com
Cc: Zhang Le <r0bertz@gentoo.org>
Cc: zhangfx@lemote.com
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Wu Zhangjin authored and Ralf Baechle committed Dec 17, 2009
1 parent db54ff2 commit e8be528
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/mips/loongson/common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
# Early printk support
#
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_SERIAL_8250) += serial.o
71 changes: 71 additions & 0 deletions arch/mips/loongson/common/serial.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org)
*
* Copyright (C) 2009 Lemote, Inc.
* Author: Yan hua (yanhua@lemote.com)
* Author: Wu Zhangjin (wuzj@lemote.com)
*/

#include <linux/io.h>
#include <linux/init.h>
#include <linux/serial_8250.h>

#include <asm/bootinfo.h>

#include <loongson.h>
#include <machine.h>

#define PORT(int) \
{ \
.irq = int, \
.uartclk = 1843200, \
.iobase = (LOONGSON_UART_BASE - LOONGSON_PCIIO_BASE),\
.iotype = UPIO_PORT, \
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \
.regshift = 0, \
}

#define PORT_M(int) \
{ \
.irq = MIPS_CPU_IRQ_BASE + (int), \
.uartclk = 3686400, \
.iotype = UPIO_MEM, \
.membase = (void __iomem *)NULL, \
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \
.regshift = 0, \
}

static struct plat_serial8250_port uart8250_data[][2] = {
[MACH_LOONGSON_UNKNOWN] {},
[MACH_LEMOTE_FL2E] {PORT(4), {} },
[MACH_LEMOTE_FL2F] {PORT(3), {} },
[MACH_LEMOTE_ML2F7] {PORT_M(3), {} },
[MACH_LEMOTE_YL2F89] {PORT_M(3), {} },
[MACH_DEXXON_GDIUM2F10] {PORT_M(3), {} },
[MACH_LOONGSON_END] {},
};

static struct platform_device uart8250_device = {
.name = "serial8250",
.id = PLAT8250_DEV_PLATFORM,
.dev = {
.platform_data = uart8250_data[LOONGSON_MACHTYPE],
},
};

static int __init serial_init(void)
{
if (uart8250_data[LOONGSON_MACHTYPE][0].iotype == UPIO_MEM)
uart8250_data[LOONGSON_MACHTYPE][0].membase =
ioremap_nocache(LOONGSON_UART_BASE, 8);

platform_device_register(&uart8250_device);

return 0;
}

device_initcall(serial_init);

0 comments on commit e8be528

Please sign in to comment.