Commit | Line | Data |
---|---|---|
355c471f | 1 | /* |
355c471f | 2 | * Copyright(C) MontaVista Software Inc, 2006 |
3 | * | |
4 | * Author: dmitry pervushin <dpervushin@ru.mvista.com> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with this program; if not, write to the Free Software | |
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 | */ | |
355c471f | 20 | #include <linux/init.h> |
21 | #include <linux/kernel.h> | |
22 | #include <linux/types.h> | |
23 | #include <linux/ioport.h> | |
24 | #include <linux/serial_8250.h> | |
25 | #include <linux/mtd/physmap.h> | |
26 | ||
27 | #include <asm/cpu.h> | |
28 | #include <asm/bootinfo.h> | |
29 | #include <asm/addrspace.h> | |
30 | #include <asm/time.h> | |
31 | #include <asm/bcache.h> | |
32 | #include <asm/irq.h> | |
33 | #include <asm/reboot.h> | |
355c471f | 34 | #include <asm/traps.h> |
355c471f | 35 | |
d91f2cbe | 36 | #include <asm/emma/emma2rh.h> |
355c471f | 37 | |
38 | ||
39 | #define I2C_EMMA2RH "emma2rh-iic" /* must be in sync with IIC driver */ | |
40 | ||
41 | static struct resource i2c_emma_resources_0[] = { | |
4aad7b72 RB |
42 | { |
43 | .name = NULL, | |
44 | .start = EMMA2RH_IRQ_PIIC0, | |
45 | .end = EMMA2RH_IRQ_PIIC0, | |
46 | .flags = IORESOURCE_IRQ | |
47 | }, { | |
48 | .name = NULL, | |
77aec999 RB |
49 | .start = EMMA2RH_PIIC0_BASE, |
50 | .end = EMMA2RH_PIIC0_BASE + 0x1000, | |
4aad7b72 RB |
51 | .flags = 0 |
52 | }, | |
355c471f | 53 | }; |
54 | ||
55 | struct resource i2c_emma_resources_1[] = { | |
4aad7b72 RB |
56 | { |
57 | .name = NULL, | |
58 | .start = EMMA2RH_IRQ_PIIC1, | |
59 | .end = EMMA2RH_IRQ_PIIC1, | |
60 | .flags = IORESOURCE_IRQ | |
61 | }, { | |
62 | .name = NULL, | |
77aec999 RB |
63 | .start = EMMA2RH_PIIC1_BASE, |
64 | .end = EMMA2RH_PIIC1_BASE + 0x1000, | |
4aad7b72 RB |
65 | .flags = 0 |
66 | }, | |
355c471f | 67 | }; |
68 | ||
69 | struct resource i2c_emma_resources_2[] = { | |
4aad7b72 RB |
70 | { |
71 | .name = NULL, | |
72 | .start = EMMA2RH_IRQ_PIIC2, | |
73 | .end = EMMA2RH_IRQ_PIIC2, | |
74 | .flags = IORESOURCE_IRQ | |
75 | }, { | |
76 | .name = NULL, | |
77aec999 RB |
77 | .start = EMMA2RH_PIIC2_BASE, |
78 | .end = EMMA2RH_PIIC2_BASE + 0x1000, | |
4aad7b72 RB |
79 | .flags = 0 |
80 | }, | |
355c471f | 81 | }; |
82 | ||
83 | struct platform_device i2c_emma_devices[] = { | |
84 | [0] = { | |
85 | .name = I2C_EMMA2RH, | |
86 | .id = 0, | |
87 | .resource = i2c_emma_resources_0, | |
88 | .num_resources = ARRAY_SIZE(i2c_emma_resources_0), | |
89 | }, | |
90 | [1] = { | |
91 | .name = I2C_EMMA2RH, | |
92 | .id = 1, | |
93 | .resource = i2c_emma_resources_1, | |
94 | .num_resources = ARRAY_SIZE(i2c_emma_resources_1), | |
95 | }, | |
96 | [2] = { | |
97 | .name = I2C_EMMA2RH, | |
98 | .id = 2, | |
99 | .resource = i2c_emma_resources_2, | |
100 | .num_resources = ARRAY_SIZE(i2c_emma_resources_2), | |
101 | }, | |
102 | }; | |
103 | ||
104 | #define EMMA2RH_SERIAL_CLOCK 18544000 | |
105 | #define EMMA2RH_SERIAL_FLAGS UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
106 | ||
107 | static struct plat_serial8250_port platform_serial_ports[] = { | |
e30e66be RB |
108 | [0] = { |
109 | .membase= (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR0_BASE + 3), | |
3e168ae2 | 110 | .mapbase = EMMA2RH_PFUR0_BASE + 3, |
e30e66be RB |
111 | .irq = EMMA2RH_IRQ_PFUR0, |
112 | .uartclk = EMMA2RH_SERIAL_CLOCK, | |
113 | .regshift = 4, | |
114 | .iotype = UPIO_MEM, | |
115 | .flags = EMMA2RH_SERIAL_FLAGS, | |
116 | }, [1] = { | |
117 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR1_BASE + 3), | |
3e168ae2 | 118 | .mapbase = EMMA2RH_PFUR1_BASE + 3, |
e30e66be RB |
119 | .irq = EMMA2RH_IRQ_PFUR1, |
120 | .uartclk = EMMA2RH_SERIAL_CLOCK, | |
121 | .regshift = 4, | |
122 | .iotype = UPIO_MEM, | |
123 | .flags = EMMA2RH_SERIAL_FLAGS, | |
124 | }, [2] = { | |
125 | .membase = (void __iomem*)KSEG1ADDR(EMMA2RH_PFUR2_BASE + 3), | |
3e168ae2 | 126 | .mapbase = EMMA2RH_PFUR2_BASE + 3, |
e30e66be RB |
127 | .irq = EMMA2RH_IRQ_PFUR2, |
128 | .uartclk = EMMA2RH_SERIAL_CLOCK, | |
129 | .regshift = 4, | |
130 | .iotype = UPIO_MEM, | |
131 | .flags = EMMA2RH_SERIAL_FLAGS, | |
132 | }, [3] = { | |
133 | .flags = 0, | |
355c471f | 134 | }, |
135 | }; | |
136 | ||
137 | static struct platform_device serial_emma = { | |
138 | .name = "serial8250", | |
139 | .dev = { | |
140 | .platform_data = &platform_serial_ports, | |
141 | }, | |
142 | }; | |
143 | ||
355c471f | 144 | static struct mtd_partition markeins_parts[] = { |
145 | [0] = { | |
146 | .name = "RootFS", | |
147 | .offset = 0x00000000, | |
148 | .size = 0x00c00000, | |
149 | }, | |
150 | [1] = { | |
151 | .name = "boot code area", | |
152 | .offset = MTDPART_OFS_APPEND, | |
153 | .size = 0x00100000, | |
154 | }, | |
155 | [2] = { | |
156 | .name = "kernel image", | |
157 | .offset = MTDPART_OFS_APPEND, | |
158 | .size = 0x00300000, | |
159 | }, | |
160 | [3] = { | |
161 | .name = "RootFS2", | |
162 | .offset = MTDPART_OFS_APPEND, | |
163 | .size = 0x00c00000, | |
164 | }, | |
165 | [4] = { | |
166 | .name = "boot code area2", | |
167 | .offset = MTDPART_OFS_APPEND, | |
168 | .size = 0x00100000, | |
169 | }, | |
170 | [5] = { | |
171 | .name = "kernel image2", | |
172 | .offset = MTDPART_OFS_APPEND, | |
173 | .size = MTDPART_SIZ_FULL, | |
174 | }, | |
175 | }; | |
176 | ||
a83860c2 RB |
177 | static struct physmap_flash_data markeins_flash_data = { |
178 | .width = 2, | |
179 | .nr_parts = ARRAY_SIZE(markeins_parts), | |
180 | .parts = markeins_parts | |
181 | }; | |
182 | ||
183 | static struct resource markeins_flash_resource = { | |
184 | .start = 0x1e000000, | |
185 | .end = 0x02000000, | |
186 | .flags = IORESOURCE_MEM | |
187 | }; | |
188 | ||
189 | static struct platform_device markeins_flash_device = { | |
190 | .name = "physmap-flash", | |
191 | .id = 0, | |
192 | .dev = { | |
70342287 | 193 | .platform_data = &markeins_flash_data, |
a83860c2 RB |
194 | }, |
195 | .num_resources = 1, | |
196 | .resource = &markeins_flash_resource, | |
197 | }; | |
198 | ||
199 | static struct platform_device *devices[] = { | |
200 | i2c_emma_devices, | |
201 | i2c_emma_devices + 1, | |
202 | i2c_emma_devices + 2, | |
203 | &serial_emma, | |
204 | &markeins_flash_device, | |
205 | }; | |
206 | ||
355c471f | 207 | static int __init platform_devices_setup(void) |
208 | { | |
355c471f | 209 | return platform_add_devices(devices, ARRAY_SIZE(devices)); |
210 | } | |
211 | ||
212 | arch_initcall(platform_devices_setup); |