Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 177875
b: refs/heads/master
c: a3ed495
h: refs/heads/master
i:
  177873: f422d3c
  177871: ea3d9ee
v: v3
  • Loading branch information
Wu Zhangjin authored and Ralf Baechle committed Dec 17, 2009
1 parent 41cc304 commit 7b293dd
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 04cfb90a92a2f9f7b56b2f85c528be7d1561e0e5
refs/heads/master: a3ed495190ebe918f4584291ed8c76f1c97a84fd
3 changes: 3 additions & 0 deletions trunk/arch/mips/include/asm/mach-loongson/loongson.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ extern void __init prom_init_memory(void);
extern void __init prom_init_cmdline(void);
extern void __init prom_init_machtype(void);
extern void __init prom_init_env(void);
extern unsigned long _loongson_uart_base;
extern unsigned long uart8250_base[];
extern void prom_init_uart_base(void);

/* irq operation functions */
extern void bonito_irqdispatch(void);
Expand Down
2 changes: 0 additions & 2 deletions trunk/arch/mips/include/asm/mach-loongson/machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@

#ifdef CONFIG_LEMOTE_FULOONG2E

#define LOONGSON_UART_BASE (LOONGSON_PCIIO_BASE + 0x3f8)

#define LOONGSON_MACHTYPE MACH_LEMOTE_FL2E

#endif
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/mips/loongson/common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#

obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
pci.o bonito-irq.o mem.o machtype.o
pci.o bonito-irq.o mem.o machtype.o uart_base.o

#
# Early printk support
Expand Down
11 changes: 7 additions & 4 deletions trunk/arch/mips/loongson/common/early_printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <linux/serial_reg.h>

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

#define PORT(base, offset) (u8 *)(base + offset)

Expand All @@ -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);
Expand Down
11 changes: 7 additions & 4 deletions trunk/arch/mips/loongson/common/init.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
* Copyright (C) 2009 Lemote Inc.
* Author: Wu Zhangjin, wuzj@lemote.com
*
* This program is free software; you can redistribute it and/or modify it
Expand All @@ -10,19 +10,22 @@

#include <linux/bootmem.h>

#include <asm/bootinfo.h>

#include <loongson.h>

void __init prom_init(void)
{
/* init base address of io space */
/* init base address of io space */
set_io_port_base((unsigned long)
ioremap(LOONGSON_PCIIO_BASE, LOONGSON_PCIIO_SIZE));

prom_init_cmdline();
prom_init_env();
prom_init_memory();

/*init the uart base address */
#if defined(CONFIG_EARLY_PRINTK) || defined(CONFIG_SERIAL_8250)
prom_init_uart_base();
#endif
}

void __init prom_free_prom_memory(void)
Expand Down
17 changes: 8 additions & 9 deletions trunk/arch/mips/loongson/common/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
{ \
.irq = int, \
.uartclk = 1843200, \
.iobase = (LOONGSON_UART_BASE - LOONGSON_PCIIO_BASE),\
.iotype = UPIO_PORT, \
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \
.regshift = 0, \
Expand Down Expand Up @@ -52,20 +51,20 @@ static struct plat_serial8250_port uart8250_data[][2] = {
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);
if (uart8250_data[mips_machtype][0].iotype == UPIO_MEM)
uart8250_data[mips_machtype][0].membase =
(void __iomem *)_loongson_uart_base;
else if (uart8250_data[mips_machtype][0].iotype == UPIO_PORT)
uart8250_data[mips_machtype][0].iobase =
uart8250_base[mips_machtype] - LOONGSON_PCIIO_BASE;

platform_device_register(&uart8250_device);
uart8250_device.dev.platform_data = uart8250_data[mips_machtype];

return 0;
return platform_device_register(&uart8250_device);
}

device_initcall(serial_init);
34 changes: 34 additions & 0 deletions trunk/arch/mips/loongson/common/uart_base.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2009 Lemote Inc.
* Author: Wu Zhangjin, wuzj@lemote.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*/

#include <linux/module.h>
#include <asm/bootinfo.h>

#include <loongson.h>

unsigned long __maybe_unused _loongson_uart_base;
EXPORT_SYMBOL(_loongson_uart_base);

unsigned long __maybe_unused uart8250_base[] = {
[MACH_LOONGSON_UNKNOWN] 0,
[MACH_LEMOTE_FL2E] (LOONGSON_PCIIO_BASE + 0x3f8),
[MACH_LEMOTE_FL2F] (LOONGSON_PCIIO_BASE + 0x2f8),
[MACH_LEMOTE_ML2F7] (LOONGSON_LIO1_BASE + 0x3f8),
[MACH_LEMOTE_YL2F89] (LOONGSON_LIO1_BASE + 0x3f8),
[MACH_DEXXON_GDIUM2F10] (LOONGSON_LIO1_BASE + 0x3f8),
[MACH_LOONGSON_END] 0,
};
EXPORT_SYMBOL(uart8250_base);

void __maybe_unused prom_init_uart_base(void)
{
_loongson_uart_base =
(unsigned long)ioremap_nocache(uart8250_base[mips_machtype], 8);
}

0 comments on commit 7b293dd

Please sign in to comment.