vserver 2.0 rc7
[linux-2.6.git] / arch / arm / mach-ixp4xx / ixdp425-setup.c
index 160117c..77346c1 100644 (file)
@@ -3,16 +3,17 @@
  *
  * IXDP425/IXCDP1100 board-setup 
  *
- * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ * Copyright (C) 2003-2005 MontaVista Software, Inc.
  *
  * Author: Deepak Saxena <dsaxena@plexity.net>
  */
 
+#include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/device.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
-#include <linux/serial_core.h>
+#include <linux/serial_8250.h>
 
 #include <asm/types.h>
 #include <asm/setup.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/flash.h>
 
-#ifdef __ARMEB__
-#define        REG_OFFSET      3
-#else
-#define        REG_OFFSET      0
-#endif
-
-/*
- * IXDP425 uses both chipset serial ports
- */
-static struct uart_port ixdp425_serial_ports[] = {
-       {
-               .membase        = (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET),
-               .mapbase        = (IXP4XX_UART1_BASE_PHYS),
-               .irq            = IRQ_IXP4XX_UART1,
-               .flags          = UPF_SKIP_TEST,
-               .iotype         = UPIO_MEM,     
-               .regshift       = 2,
-               .uartclk        = IXP4XX_UART_XTAL,
-               .line           = 0,
-               .type           = PORT_XSCALE,
-               .fifosize       = 32
-       } , {
-               .membase        = (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET),
-               .mapbase        = (IXP4XX_UART2_BASE_PHYS),
-               .irq            = IRQ_IXP4XX_UART2,
-               .flags          = UPF_SKIP_TEST,
-               .iotype         = UPIO_MEM,     
-               .regshift       = 2,
-               .uartclk        = IXP4XX_UART_XTAL,
-               .line           = 1,
-               .type           = PORT_XSCALE,
-               .fifosize       = 32
-       }
-};
-
 void __init ixdp425_map_io(void) 
 {
-       early_serial_setup(&ixdp425_serial_ports[0]);
-       early_serial_setup(&ixdp425_serial_ports[1]);
-
        ixp4xx_map_io();
 }
 
@@ -77,7 +40,7 @@ static struct resource ixdp425_flash_resource = {
        .flags          = IORESOURCE_MEM,
 };
 
-static struct platform_device ixdp425_flash_device = {
+static struct platform_device ixdp425_flash = {
        .name           = "IXP4XX-Flash",
        .id             = 0,
        .dev            = {
@@ -101,10 +64,67 @@ static struct platform_device ixdp425_i2c_controller = {
        .num_resources  = 0
 };
 
+static struct resource ixdp425_uart_resources[] = {
+       {
+               .start          = IXP4XX_UART1_BASE_PHYS,
+               .end            = IXP4XX_UART1_BASE_PHYS + 0x0fff,
+               .flags          = IORESOURCE_MEM
+       },
+       {
+               .start          = IXP4XX_UART2_BASE_PHYS,
+               .end            = IXP4XX_UART2_BASE_PHYS + 0x0fff,
+               .flags          = IORESOURCE_MEM
+       }
+};
+
+static struct plat_serial8250_port ixdp425_uart_data[] = {
+       {
+               .mapbase        = IXP4XX_UART1_BASE_PHYS,
+               .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
+               .irq            = IRQ_IXP4XX_UART1,
+               .flags          = UPF_BOOT_AUTOCONF,
+               .iotype         = UPIO_MEM,
+               .regshift       = 2,
+               .uartclk        = IXP4XX_UART_XTAL,
+       },
+       {
+               .mapbase        = IXP4XX_UART2_BASE_PHYS,
+               .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
+               .irq            = IRQ_IXP4XX_UART1,
+               .flags          = UPF_BOOT_AUTOCONF,
+               .iotype         = UPIO_MEM,
+               .regshift       = 2,
+               .uartclk        = IXP4XX_UART_XTAL,
+       }
+};
+
+static struct platform_device ixdp425_uart = {
+       .name                   = "serial8250",
+       .id                     = 0,
+       .dev.platform_data      = ixdp425_uart_data,
+       .num_resources          = 2,
+       .resource               = ixdp425_uart_resources
+};
+
+static struct platform_device *ixdp425_devices[] __initdata = {
+       &ixdp425_i2c_controller,
+       &ixdp425_flash,
+       &ixdp425_uart
+};
+
+
 static void __init ixdp425_init(void)
 {
-       platform_add_device(&ixdp425_flash_device);
-       platform_add_device(&ixdp425_i2c_controller);
+       ixp4xx_sys_init();
+
+       /*
+        * IXP465 has 32MB window
+        */
+       if (machine_is_ixdp465()) {
+               ixdp425_flash_resource.end += IXDP425_FLASH_SIZE;
+       }
+
+       platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
 }
 
 MACHINE_START(IXDP425, "Intel IXDP425 Development Platform")
@@ -113,6 +133,18 @@ MACHINE_START(IXDP425, "Intel IXDP425 Development Platform")
                IXP4XX_PERIPHERAL_BASE_VIRT)
        MAPIO(ixdp425_map_io)
        INITIRQ(ixp4xx_init_irq)
+       .timer          = &ixp4xx_timer,
+       BOOT_PARAMS(0x0100)
+       INIT_MACHINE(ixdp425_init)
+MACHINE_END
+
+MACHINE_START(IXDP465, "Intel IXDP465 Development Platform")
+       MAINTAINER("MontaVista Software, Inc.")
+       BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
+               IXP4XX_PERIPHERAL_BASE_VIRT)
+       MAPIO(ixdp425_map_io)
+       INITIRQ(ixp4xx_init_irq)
+       .timer          = &ixp4xx_timer,
        BOOT_PARAMS(0x0100)
        INIT_MACHINE(ixdp425_init)
 MACHINE_END
@@ -123,6 +155,7 @@ MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform")
                IXP4XX_PERIPHERAL_BASE_VIRT)
        MAPIO(ixdp425_map_io)
        INITIRQ(ixp4xx_init_irq)
+       .timer          = &ixp4xx_timer,
        BOOT_PARAMS(0x0100)
        INIT_MACHINE(ixdp425_init)
 MACHINE_END
@@ -140,6 +173,7 @@ MACHINE_START(AVILA, "Gateworks Avila Network Platform")
                IXP4XX_PERIPHERAL_BASE_VIRT)
        MAPIO(ixdp425_map_io)
        INITIRQ(ixp4xx_init_irq)
+       .timer          = &ixp4xx_timer,
        BOOT_PARAMS(0x0100)
        INIT_MACHINE(ixdp425_init)
 MACHINE_END