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 17 18 19 20
/*
 * 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>

#include <asm/types.h>
#include <asm/setup.h>
#include <asm/memory.h>
21
#include <mach/hardware.h>
L
Linus Torvalds 已提交
22 23 24 25 26
#include <asm/irq.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>

27 28 29 30 31 32 33 34 35
#define COYOTE_IDE_BASE_PHYS	IXP4XX_EXP_BUS_BASE(3)
#define COYOTE_IDE_BASE_VIRT	0xFFFE1000
#define COYOTE_IDE_REGION_SIZE	0x1000

#define COYOTE_IDE_DATA_PORT	0xFFFE10E0
#define COYOTE_IDE_CTRL_PORT	0xFFFE10FC
#define COYOTE_IDE_ERROR_PORT	0xFFFE10E2
#define IRQ_COYOTE_IDE		IRQ_IXP4XX_GPIO5

L
Linus Torvalds 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
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,
};

61 62 63 64 65
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,
66
		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
67 68 69 70 71
		.iotype		= UPIO_MEM,
		.regshift	= 2,
		.uartclk	= IXP4XX_UART_XTAL,
	},
	{ },
L
Linus Torvalds 已提交
72 73 74 75
};

static struct platform_device coyote_uart = {
	.name		= "serial8250",
76
	.id		= PLAT8250_DEV_PLATFORM,
L
Linus Torvalds 已提交
77
	.dev			= {
78
		.platform_data	= coyote_uart_data,
L
Linus Torvalds 已提交
79 80 81 82 83 84 85 86 87 88 89 90
	},
	.num_resources	= 1,
	.resource	= &coyote_uart_resource,
};

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

static void __init coyote_init(void)
{
91 92 93 94 95
	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 已提交
96 97 98 99
	*IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE;
	*IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0;

	if (machine_is_ixdpg425()) {
100
		coyote_uart_data[0].membase =
L
Linus Torvalds 已提交
101
			(char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET);
102 103
		coyote_uart_data[0].mapbase = IXP4XX_UART1_BASE_PHYS;
		coyote_uart_data[0].irq = IRQ_IXP4XX_UART1;
L
Linus Torvalds 已提交
104 105 106 107 108 109 110
	}

	platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices));
}

#ifdef CONFIG_ARCH_ADI_COYOTE
MACHINE_START(ADI_COYOTE, "ADI Engineering Coyote")
111
	/* Maintainer: MontaVista Software, Inc. */
112
	.map_io		= ixp4xx_map_io,
113
	.init_irq	= ixp4xx_init_irq,
L
Linus Torvalds 已提交
114
	.timer		= &ixp4xx_timer,
115 116
	.boot_params	= 0x0100,
	.init_machine	= coyote_init,
L
Linus Torvalds 已提交
117 118 119 120 121 122 123 124 125
MACHINE_END
#endif

/*
 * IXDPG425 is identical to Coyote except for which serial port
 * is connected.
 */
#ifdef CONFIG_MACH_IXDPG425
MACHINE_START(IXDPG425, "Intel IXDPG425")
126
	/* Maintainer: MontaVista Software, Inc. */
127
	.map_io		= ixp4xx_map_io,
128
	.init_irq	= ixp4xx_init_irq,
L
Linus Torvalds 已提交
129
	.timer		= &ixp4xx_timer,
130 131
	.boot_params	= 0x0100,
	.init_machine	= coyote_init,
L
Linus Torvalds 已提交
132 133 134
MACHINE_END
#endif