Initial commit
This commit is contained in:
commit
169c65d57e
51358 changed files with 23120455 additions and 0 deletions
9
arch/mips/cobalt/Makefile
Normal file
9
arch/mips/cobalt/Makefile
Normal file
|
@ -0,0 +1,9 @@
|
|||
#
|
||||
# Makefile for the Cobalt micro systems family specific parts of the kernel
|
||||
#
|
||||
|
||||
obj-y := buttons.o irq.o lcd.o led.o reset.o rtc.o serial.o setup.o time.o
|
||||
|
||||
obj-$(CONFIG_PCI) += pci.o
|
||||
obj-$(CONFIG_EARLY_PRINTK) += console.o
|
||||
obj-$(CONFIG_MTD_PHYSMAP) += mtd.o
|
6
arch/mips/cobalt/Platform
Normal file
6
arch/mips/cobalt/Platform
Normal file
|
@ -0,0 +1,6 @@
|
|||
#
|
||||
# Cobalt Server
|
||||
#
|
||||
platform-$(CONFIG_MIPS_COBALT) += cobalt/
|
||||
cflags-$(CONFIG_MIPS_COBALT) += -I$(srctree)/arch/mips/include/asm/mach-cobalt
|
||||
load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000
|
54
arch/mips/cobalt/buttons.c
Normal file
54
arch/mips/cobalt/buttons.c
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Cobalt buttons platform device.
|
||||
*
|
||||
* Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
static struct resource cobalt_buttons_resource __initdata = {
|
||||
.start = 0x1d000000,
|
||||
.end = 0x1d000003,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static __init int cobalt_add_buttons(void)
|
||||
{
|
||||
struct platform_device *pd;
|
||||
int error;
|
||||
|
||||
pd = platform_device_alloc("Cobalt buttons", -1);
|
||||
if (!pd)
|
||||
return -ENOMEM;
|
||||
|
||||
error = platform_device_add_resources(pd, &cobalt_buttons_resource, 1);
|
||||
if (error)
|
||||
goto err_free_device;
|
||||
|
||||
error = platform_device_add(pd);
|
||||
if (error)
|
||||
goto err_free_device;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_device:
|
||||
platform_device_put(pd);
|
||||
return error;
|
||||
}
|
||||
device_initcall(cobalt_add_buttons);
|
20
arch/mips/cobalt/console.c
Normal file
20
arch/mips/cobalt/console.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* (C) P. Horton 2006
|
||||
*/
|
||||
#include <linux/io.h>
|
||||
#include <linux/serial_reg.h>
|
||||
|
||||
#include <cobalt.h>
|
||||
|
||||
#define UART_BASE ((void __iomem *)CKSEG1ADDR(0x1c800000))
|
||||
|
||||
void prom_putchar(char c)
|
||||
{
|
||||
if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
|
||||
return;
|
||||
|
||||
while (!(readb(UART_BASE + UART_LSR) & UART_LSR_THRE))
|
||||
;
|
||||
|
||||
writeb(c, UART_BASE + UART_TX);
|
||||
}
|
62
arch/mips/cobalt/irq.c
Normal file
62
arch/mips/cobalt/irq.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* IRQ vector handles
|
||||
*
|
||||
* 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) 1995, 1996, 1997, 2003 by Ralf Baechle
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/i8259.h>
|
||||
#include <asm/irq_cpu.h>
|
||||
#include <asm/irq_gt641xx.h>
|
||||
#include <asm/gt64120.h>
|
||||
|
||||
#include <irq.h>
|
||||
|
||||
asmlinkage void plat_irq_dispatch(void)
|
||||
{
|
||||
unsigned pending = read_c0_status() & read_c0_cause() & ST0_IM;
|
||||
int irq;
|
||||
|
||||
if (pending & CAUSEF_IP2)
|
||||
gt641xx_irq_dispatch();
|
||||
else if (pending & CAUSEF_IP6) {
|
||||
irq = i8259_irq();
|
||||
if (irq < 0)
|
||||
spurious_interrupt();
|
||||
else
|
||||
do_IRQ(irq);
|
||||
} else if (pending & CAUSEF_IP3)
|
||||
do_IRQ(MIPS_CPU_IRQ_BASE + 3);
|
||||
else if (pending & CAUSEF_IP4)
|
||||
do_IRQ(MIPS_CPU_IRQ_BASE + 4);
|
||||
else if (pending & CAUSEF_IP5)
|
||||
do_IRQ(MIPS_CPU_IRQ_BASE + 5);
|
||||
else if (pending & CAUSEF_IP7)
|
||||
do_IRQ(MIPS_CPU_IRQ_BASE + 7);
|
||||
else
|
||||
spurious_interrupt();
|
||||
}
|
||||
|
||||
static struct irqaction cascade = {
|
||||
.handler = no_action,
|
||||
.name = "cascade",
|
||||
.flags = IRQF_NO_THREAD,
|
||||
};
|
||||
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
mips_cpu_irq_init();
|
||||
gt641xx_irq_init();
|
||||
init_i8259_irqs();
|
||||
|
||||
setup_irq(GT641XX_CASCADE_IRQ, &cascade);
|
||||
setup_irq(I8259_CASCADE_IRQ, &cascade);
|
||||
}
|
55
arch/mips/cobalt/lcd.c
Normal file
55
arch/mips/cobalt/lcd.c
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Registration of Cobalt LCD platform device.
|
||||
*
|
||||
* Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
static struct resource cobalt_lcd_resource __initdata = {
|
||||
.start = 0x1f000000,
|
||||
.end = 0x1f00001f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static __init int cobalt_lcd_add(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int retval;
|
||||
|
||||
pdev = platform_device_alloc("cobalt-lcd", -1);
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
retval = platform_device_add_resources(pdev, &cobalt_lcd_resource, 1);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
retval = platform_device_add(pdev);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_device:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return retval;
|
||||
}
|
||||
device_initcall(cobalt_lcd_add);
|
62
arch/mips/cobalt/led.c
Normal file
62
arch/mips/cobalt/led.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* Registration of Cobalt LED platform device.
|
||||
*
|
||||
* Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <cobalt.h>
|
||||
|
||||
static struct resource cobalt_led_resource __initdata = {
|
||||
.start = 0x1c000000,
|
||||
.end = 0x1c000000,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static __init int cobalt_led_add(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int retval;
|
||||
|
||||
if (cobalt_board_id == COBALT_BRD_ID_QUBE1 ||
|
||||
cobalt_board_id == COBALT_BRD_ID_QUBE2)
|
||||
pdev = platform_device_alloc("cobalt-qube-leds", -1);
|
||||
else
|
||||
pdev = platform_device_alloc("cobalt-raq-leds", -1);
|
||||
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
retval = platform_device_add_resources(pdev, &cobalt_led_resource, 1);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
retval = platform_device_add(pdev);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_device:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return retval;
|
||||
}
|
||||
device_initcall(cobalt_led_add);
|
61
arch/mips/cobalt/mtd.c
Normal file
61
arch/mips/cobalt/mtd.c
Normal file
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Registration of Cobalt MTD device.
|
||||
*
|
||||
* Copyright (C) 2006 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
|
||||
static struct mtd_partition cobalt_mtd_partitions[] = {
|
||||
{
|
||||
.name = "firmware",
|
||||
.offset = 0x0,
|
||||
.size = 0x80000,
|
||||
},
|
||||
};
|
||||
|
||||
static struct physmap_flash_data cobalt_flash_data = {
|
||||
.width = 1,
|
||||
.nr_parts = 1,
|
||||
.parts = cobalt_mtd_partitions,
|
||||
};
|
||||
|
||||
static struct resource cobalt_mtd_resource = {
|
||||
.start = 0x1fc00000,
|
||||
.end = 0x1fc7ffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device cobalt_mtd = {
|
||||
.name = "physmap-flash",
|
||||
.dev = {
|
||||
.platform_data = &cobalt_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &cobalt_mtd_resource,
|
||||
};
|
||||
|
||||
static int __init cobalt_mtd_init(void)
|
||||
{
|
||||
platform_device_register(&cobalt_mtd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(cobalt_mtd_init);
|
48
arch/mips/cobalt/pci.c
Normal file
48
arch/mips/cobalt/pci.c
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Register PCI controller.
|
||||
*
|
||||
* 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) 1996, 1997, 2004, 05 by Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv)
|
||||
*
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/gt64120.h>
|
||||
|
||||
extern struct pci_ops gt64xxx_pci0_ops;
|
||||
|
||||
static struct resource cobalt_mem_resource = {
|
||||
.start = GT_DEF_PCI0_MEM0_BASE,
|
||||
.end = GT_DEF_PCI0_MEM0_BASE + GT_DEF_PCI0_MEM0_SIZE - 1,
|
||||
.name = "PCI memory",
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct resource cobalt_io_resource = {
|
||||
.start = 0x1000,
|
||||
.end = 0xffffffUL,
|
||||
.name = "PCI I/O",
|
||||
.flags = IORESOURCE_IO,
|
||||
};
|
||||
|
||||
static struct pci_controller cobalt_pci_controller = {
|
||||
.pci_ops = >64xxx_pci0_ops,
|
||||
.mem_resource = &cobalt_mem_resource,
|
||||
.io_resource = &cobalt_io_resource,
|
||||
.io_offset = 0 - GT_DEF_PCI0_IO_BASE,
|
||||
.io_map_base = CKSEG1ADDR(GT_DEF_PCI0_IO_BASE),
|
||||
};
|
||||
|
||||
static int __init cobalt_pci_init(void)
|
||||
{
|
||||
register_pci_controller(&cobalt_pci_controller);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(cobalt_pci_init);
|
52
arch/mips/cobalt/reset.c
Normal file
52
arch/mips/cobalt/reset.c
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Cobalt Reset operations
|
||||
*
|
||||
* 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) 1995, 1996, 1997 by Ralf Baechle
|
||||
* Copyright (C) 2001 by Liam Davies (ldavies@agile.tv)
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/leds.h>
|
||||
|
||||
#include <asm/idle.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
#include <cobalt.h>
|
||||
|
||||
#define RESET_PORT ((void __iomem *)CKSEG1ADDR(0x1c000000))
|
||||
#define RESET 0x0f
|
||||
|
||||
DEFINE_LED_TRIGGER(power_off_led_trigger);
|
||||
|
||||
static int __init ledtrig_power_off_init(void)
|
||||
{
|
||||
led_trigger_register_simple("power-off", &power_off_led_trigger);
|
||||
return 0;
|
||||
}
|
||||
device_initcall(ledtrig_power_off_init);
|
||||
|
||||
void cobalt_machine_halt(void)
|
||||
{
|
||||
/*
|
||||
* turn on power off LED on RaQ
|
||||
*/
|
||||
led_trigger_event(power_off_led_trigger, LED_FULL);
|
||||
|
||||
local_irq_disable();
|
||||
while (1) {
|
||||
if (cpu_wait)
|
||||
cpu_wait();
|
||||
}
|
||||
}
|
||||
|
||||
void cobalt_machine_restart(char *command)
|
||||
{
|
||||
writeb(RESET, RESET_PORT);
|
||||
|
||||
/* we should never get here */
|
||||
cobalt_machine_halt();
|
||||
}
|
64
arch/mips/cobalt/rtc.c
Normal file
64
arch/mips/cobalt/rtc.c
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Registration of Cobalt RTC platform device.
|
||||
*
|
||||
* Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
static struct resource cobalt_rtc_resource[] __initdata = {
|
||||
{
|
||||
.start = 0x70,
|
||||
.end = 0x77,
|
||||
.flags = IORESOURCE_IO,
|
||||
},
|
||||
{
|
||||
.start = RTC_IRQ,
|
||||
.end = RTC_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static __init int cobalt_rtc_add(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int retval;
|
||||
|
||||
pdev = platform_device_alloc("rtc_cmos", -1);
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
retval = platform_device_add_resources(pdev, cobalt_rtc_resource,
|
||||
ARRAY_SIZE(cobalt_rtc_resource));
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
retval = platform_device_add(pdev);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_device:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return retval;
|
||||
}
|
||||
device_initcall(cobalt_rtc_add);
|
86
arch/mips/cobalt/serial.c
Normal file
86
arch/mips/cobalt/serial.c
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Registration of Cobalt UART platform device.
|
||||
*
|
||||
* Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial_8250.h>
|
||||
|
||||
#include <cobalt.h>
|
||||
#include <irq.h>
|
||||
|
||||
static struct resource cobalt_uart_resource[] __initdata = {
|
||||
{
|
||||
.start = 0x1c800000,
|
||||
.end = 0x1c800007,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = SERIAL_IRQ,
|
||||
.end = SERIAL_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct plat_serial8250_port cobalt_serial8250_port[] = {
|
||||
{
|
||||
.irq = SERIAL_IRQ,
|
||||
.uartclk = 18432000,
|
||||
.iotype = UPIO_MEM,
|
||||
.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
||||
.mapbase = 0x1c800000,
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static __init int cobalt_uart_add(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int retval;
|
||||
|
||||
/*
|
||||
* Cobalt Qube1 has no UART.
|
||||
*/
|
||||
if (cobalt_board_id == COBALT_BRD_ID_QUBE1)
|
||||
return 0;
|
||||
|
||||
pdev = platform_device_alloc("serial8250", -1);
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
pdev->id = PLAT8250_DEV_PLATFORM;
|
||||
pdev->dev.platform_data = cobalt_serial8250_port;
|
||||
|
||||
retval = platform_device_add_resources(pdev, cobalt_uart_resource, ARRAY_SIZE(cobalt_uart_resource));
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
retval = platform_device_add(pdev);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_device:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return retval;
|
||||
}
|
||||
device_initcall(cobalt_uart_add);
|
120
arch/mips/cobalt/setup.c
Normal file
120
arch/mips/cobalt/setup.c
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Setup pointers to hardware dependent routines.
|
||||
*
|
||||
* 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) 1996, 1997, 2004, 05 by Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv)
|
||||
*
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/gt64120.h>
|
||||
|
||||
#include <cobalt.h>
|
||||
|
||||
extern void cobalt_machine_restart(char *command);
|
||||
extern void cobalt_machine_halt(void);
|
||||
|
||||
const char *get_system_type(void)
|
||||
{
|
||||
switch (cobalt_board_id) {
|
||||
case COBALT_BRD_ID_QUBE1:
|
||||
return "Cobalt Qube";
|
||||
case COBALT_BRD_ID_RAQ1:
|
||||
return "Cobalt RaQ";
|
||||
case COBALT_BRD_ID_QUBE2:
|
||||
return "Cobalt Qube2";
|
||||
case COBALT_BRD_ID_RAQ2:
|
||||
return "Cobalt RaQ2";
|
||||
}
|
||||
return "MIPS Cobalt";
|
||||
}
|
||||
|
||||
/*
|
||||
* Cobalt doesn't have PS/2 keyboard/mouse interfaces,
|
||||
* keyboard conntroller is never used.
|
||||
* Also PCI-ISA bridge DMA contoroller is never used.
|
||||
*/
|
||||
static struct resource cobalt_reserved_resources[] = {
|
||||
{ /* dma1 */
|
||||
.start = 0x00,
|
||||
.end = 0x1f,
|
||||
.name = "reserved",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO,
|
||||
},
|
||||
{ /* keyboard */
|
||||
.start = 0x60,
|
||||
.end = 0x6f,
|
||||
.name = "reserved",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO,
|
||||
},
|
||||
{ /* dma page reg */
|
||||
.start = 0x80,
|
||||
.end = 0x8f,
|
||||
.name = "reserved",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO,
|
||||
},
|
||||
{ /* dma2 */
|
||||
.start = 0xc0,
|
||||
.end = 0xdf,
|
||||
.name = "reserved",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO,
|
||||
},
|
||||
};
|
||||
|
||||
void __init plat_mem_setup(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
_machine_restart = cobalt_machine_restart;
|
||||
_machine_halt = cobalt_machine_halt;
|
||||
pm_power_off = cobalt_machine_halt;
|
||||
|
||||
set_io_port_base(CKSEG1ADDR(GT_DEF_PCI0_IO_BASE));
|
||||
|
||||
/* I/O port resource */
|
||||
ioport_resource.end = 0x01ffffff;
|
||||
|
||||
/* These resources have been reserved by VIA SuperI/O chip. */
|
||||
for (i = 0; i < ARRAY_SIZE(cobalt_reserved_resources); i++)
|
||||
request_resource(&ioport_resource, cobalt_reserved_resources + i);
|
||||
}
|
||||
|
||||
/*
|
||||
* Prom init. We read our one and only communication with the firmware.
|
||||
* Grab the amount of installed memory.
|
||||
* Better boot loaders (CoLo) pass a command line too :-)
|
||||
*/
|
||||
|
||||
void __init prom_init(void)
|
||||
{
|
||||
unsigned long memsz;
|
||||
int argc, i;
|
||||
char **argv;
|
||||
|
||||
memsz = fw_arg0 & 0x7fff0000;
|
||||
argc = fw_arg0 & 0x0000ffff;
|
||||
argv = (char **)fw_arg1;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
|
||||
if (i < (argc - 1))
|
||||
strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
|
||||
}
|
||||
|
||||
add_memory_region(0x0, memsz, BOOT_MEM_RAM);
|
||||
}
|
||||
|
||||
void __init prom_free_prom_memory(void)
|
||||
{
|
||||
/* Nothing to do! */
|
||||
}
|
54
arch/mips/cobalt/time.c
Normal file
54
arch/mips/cobalt/time.c
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Cobalt time initialization.
|
||||
*
|
||||
* Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/i8253.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/gt64120.h>
|
||||
#include <asm/time.h>
|
||||
|
||||
#define GT641XX_BASE_CLOCK 50000000 /* 50MHz */
|
||||
|
||||
void __init plat_time_init(void)
|
||||
{
|
||||
u32 start, end;
|
||||
int i = HZ / 10;
|
||||
|
||||
setup_pit_timer();
|
||||
|
||||
gt641xx_set_base_clock(GT641XX_BASE_CLOCK);
|
||||
|
||||
/*
|
||||
* MIPS counter frequency is measured during a 100msec interval
|
||||
* using GT64111 timer0.
|
||||
*/
|
||||
while (!gt641xx_timer0_state())
|
||||
;
|
||||
|
||||
start = read_c0_count();
|
||||
|
||||
while (i--)
|
||||
while (!gt641xx_timer0_state())
|
||||
;
|
||||
|
||||
end = read_c0_count();
|
||||
|
||||
mips_hpt_frequency = (end - start) * 10;
|
||||
printk(KERN_INFO "MIPS counter frequency %dHz\n", mips_hpt_frequency);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue