Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-ixp4xx/avila-setup.c
10817 views
1
/*
2
* arch/arm/mach-ixp4xx/avila-setup.c
3
*
4
* Gateworks Avila board-setup
5
*
6
* Author: Michael-Luke Jones <[email protected]>
7
*
8
* Based on ixdp-setup.c
9
* Copyright (C) 2003-2005 MontaVista Software, Inc.
10
*
11
* Author: Deepak Saxena <[email protected]>
12
*/
13
14
#include <linux/kernel.h>
15
#include <linux/init.h>
16
#include <linux/device.h>
17
#include <linux/serial.h>
18
#include <linux/tty.h>
19
#include <linux/serial_8250.h>
20
#include <linux/i2c-gpio.h>
21
#include <asm/types.h>
22
#include <asm/setup.h>
23
#include <asm/memory.h>
24
#include <mach/hardware.h>
25
#include <asm/mach-types.h>
26
#include <asm/irq.h>
27
#include <asm/mach/arch.h>
28
#include <asm/mach/flash.h>
29
30
#define AVILA_SDA_PIN 7
31
#define AVILA_SCL_PIN 6
32
33
static struct flash_platform_data avila_flash_data = {
34
.map_name = "cfi_probe",
35
.width = 2,
36
};
37
38
static struct resource avila_flash_resource = {
39
.flags = IORESOURCE_MEM,
40
};
41
42
static struct platform_device avila_flash = {
43
.name = "IXP4XX-Flash",
44
.id = 0,
45
.dev = {
46
.platform_data = &avila_flash_data,
47
},
48
.num_resources = 1,
49
.resource = &avila_flash_resource,
50
};
51
52
static struct i2c_gpio_platform_data avila_i2c_gpio_data = {
53
.sda_pin = AVILA_SDA_PIN,
54
.scl_pin = AVILA_SCL_PIN,
55
};
56
57
static struct platform_device avila_i2c_gpio = {
58
.name = "i2c-gpio",
59
.id = 0,
60
.dev = {
61
.platform_data = &avila_i2c_gpio_data,
62
},
63
};
64
65
static struct resource avila_uart_resources[] = {
66
{
67
.start = IXP4XX_UART1_BASE_PHYS,
68
.end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
69
.flags = IORESOURCE_MEM
70
},
71
{
72
.start = IXP4XX_UART2_BASE_PHYS,
73
.end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
74
.flags = IORESOURCE_MEM
75
}
76
};
77
78
static struct plat_serial8250_port avila_uart_data[] = {
79
{
80
.mapbase = IXP4XX_UART1_BASE_PHYS,
81
.membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
82
.irq = IRQ_IXP4XX_UART1,
83
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
84
.iotype = UPIO_MEM,
85
.regshift = 2,
86
.uartclk = IXP4XX_UART_XTAL,
87
},
88
{
89
.mapbase = IXP4XX_UART2_BASE_PHYS,
90
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
91
.irq = IRQ_IXP4XX_UART2,
92
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
93
.iotype = UPIO_MEM,
94
.regshift = 2,
95
.uartclk = IXP4XX_UART_XTAL,
96
},
97
{ },
98
};
99
100
static struct platform_device avila_uart = {
101
.name = "serial8250",
102
.id = PLAT8250_DEV_PLATFORM,
103
.dev.platform_data = avila_uart_data,
104
.num_resources = 2,
105
.resource = avila_uart_resources
106
};
107
108
static struct resource avila_pata_resources[] = {
109
{
110
.flags = IORESOURCE_MEM
111
},
112
{
113
.flags = IORESOURCE_MEM,
114
},
115
{
116
.name = "intrq",
117
.start = IRQ_IXP4XX_GPIO12,
118
.end = IRQ_IXP4XX_GPIO12,
119
.flags = IORESOURCE_IRQ,
120
},
121
};
122
123
static struct ixp4xx_pata_data avila_pata_data = {
124
.cs0_bits = 0xbfff0043,
125
.cs1_bits = 0xbfff0043,
126
};
127
128
static struct platform_device avila_pata = {
129
.name = "pata_ixp4xx_cf",
130
.id = 0,
131
.dev.platform_data = &avila_pata_data,
132
.num_resources = ARRAY_SIZE(avila_pata_resources),
133
.resource = avila_pata_resources,
134
};
135
136
static struct platform_device *avila_devices[] __initdata = {
137
&avila_i2c_gpio,
138
&avila_flash,
139
&avila_uart
140
};
141
142
static void __init avila_init(void)
143
{
144
ixp4xx_sys_init();
145
146
avila_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
147
avila_flash_resource.end =
148
IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
149
150
platform_add_devices(avila_devices, ARRAY_SIZE(avila_devices));
151
152
avila_pata_resources[0].start = IXP4XX_EXP_BUS_BASE(1);
153
avila_pata_resources[0].end = IXP4XX_EXP_BUS_END(1);
154
155
avila_pata_resources[1].start = IXP4XX_EXP_BUS_BASE(2);
156
avila_pata_resources[1].end = IXP4XX_EXP_BUS_END(2);
157
158
avila_pata_data.cs0_cfg = IXP4XX_EXP_CS1;
159
avila_pata_data.cs1_cfg = IXP4XX_EXP_CS2;
160
161
platform_device_register(&avila_pata);
162
163
}
164
165
MACHINE_START(AVILA, "Gateworks Avila Network Platform")
166
/* Maintainer: Deepak Saxena <[email protected]> */
167
.map_io = ixp4xx_map_io,
168
.init_irq = ixp4xx_init_irq,
169
.timer = &ixp4xx_timer,
170
.boot_params = 0x0100,
171
.init_machine = avila_init,
172
MACHINE_END
173
174
/*
175
* Loft is functionally equivalent to Avila except that it has a
176
* different number for the maximum PCI devices. The MACHINE
177
* structure below is identical to Avila except for the comment.
178
*/
179
#ifdef CONFIG_MACH_LOFT
180
MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
181
/* Maintainer: Tom Billman <[email protected]> */
182
.map_io = ixp4xx_map_io,
183
.init_irq = ixp4xx_init_irq,
184
.timer = &ixp4xx_timer,
185
.boot_params = 0x0100,
186
.init_machine = avila_init,
187
MACHINE_END
188
#endif
189
190
191