coyote-setup.c 3.1 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*
 * arch/arm/mach-ixp4xx/coyote-setup.c
 *
 * Board setup for ADI Engineering and IXDGP425 boards
 *
 * 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_8250.h>
17
#include <linux/slab.h>
L
Linus Torvalds 已提交
18 19 20 21

#include <asm/types.h>
#include <asm/setup.h>
#include <asm/memory.h>
22
#include <mach/hardware.h>
L
Linus Torvalds 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#include <asm/irq.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>

static struct flash_platform_data coyote_flash_data = {
	.map_name	= "cfi_probe",
	.width		= 2,
};

static struct resource coyote_flash_resource = {
	.flags		= IORESOURCE_MEM,
};

static struct platform_device coyote_flash = {
	.name		= "IXP4XX-Flash",
	.id		= 0,
	.dev		= {
		.platform_data = &coyote_flash_data,
	},
	.num_resources	= 1,
	.resource	= &coyote_flash_resource,
};

static struct resource coyote_uart_resource = {
	.start	= IXP4XX_UART2_BASE_PHYS,
	.end	= IXP4XX_UART2_BASE_PHYS + 0x0fff,
	.flags	= IORESOURCE_MEM,
};

53 54 55 56 57
static struct plat_serial8250_port coyote_uart_data[] = {
	{
		.mapbase	= IXP4XX_UART2_BASE_PHYS,
		.membase	= (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
		.irq		= IRQ_IXP4XX_UART2,
58
		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
59 60 61 62 63
		.iotype		= UPIO_MEM,
		.regshift	= 2,
		.uartclk	= IXP4XX_UART_XTAL,
	},
	{ },
L
Linus Torvalds 已提交
64 65 66 67
};

static struct platform_device coyote_uart = {
	.name		= "serial8250",
68
	.id		= PLAT8250_DEV_PLATFORM,
L
Linus Torvalds 已提交
69
	.dev			= {
70
		.platform_data	= coyote_uart_data,
L
Linus Torvalds 已提交
71 72 73 74 75 76 77 78 79 80 81 82
	},
	.num_resources	= 1,
	.resource	= &coyote_uart_resource,
};

static struct platform_device *coyote_devices[] __initdata = {
	&coyote_flash,
	&coyote_uart
};

static void __init coyote_init(void)
{
83 84 85 86 87
	ixp4xx_sys_init();

	coyote_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
	coyote_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_32M - 1;

L
Linus Torvalds 已提交
88 89 90 91
	*IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE;
	*IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0;

	if (machine_is_ixdpg425()) {
92
		coyote_uart_data[0].membase =
L
Linus Torvalds 已提交
93
			(char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET);
94 95
		coyote_uart_data[0].mapbase = IXP4XX_UART1_BASE_PHYS;
		coyote_uart_data[0].irq = IRQ_IXP4XX_UART1;
L
Linus Torvalds 已提交
96 97 98 99 100 101 102
	}

	platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices));
}

#ifdef CONFIG_ARCH_ADI_COYOTE
MACHINE_START(ADI_COYOTE, "ADI Engineering Coyote")
103 104 105
	/* Maintainer: MontaVista Software, Inc. */
	.phys_io	= IXP4XX_PERIPHERAL_BASE_PHYS,
	.io_pg_offst	= ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
106
	.map_io		= ixp4xx_map_io,
107
	.init_irq	= ixp4xx_init_irq,
L
Linus Torvalds 已提交
108
	.timer		= &ixp4xx_timer,
109 110
	.boot_params	= 0x0100,
	.init_machine	= coyote_init,
L
Linus Torvalds 已提交
111 112 113 114 115 116 117 118 119
MACHINE_END
#endif

/*
 * IXDPG425 is identical to Coyote except for which serial port
 * is connected.
 */
#ifdef CONFIG_MACH_IXDPG425
MACHINE_START(IXDPG425, "Intel IXDPG425")
120 121 122
	/* Maintainer: MontaVista Software, Inc. */
	.phys_io	= IXP4XX_PERIPHERAL_BASE_PHYS,
	.io_pg_offst	= ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
123
	.map_io		= ixp4xx_map_io,
124
	.init_irq	= ixp4xx_init_irq,
L
Linus Torvalds 已提交
125
	.timer		= &ixp4xx_timer,
126 127
	.boot_params	= 0x0100,
	.init_machine	= coyote_init,
L
Linus Torvalds 已提交
128 129 130
MACHINE_END
#endif