diff options
Diffstat (limited to 'arch/arm/mach-orion5x')
-rw-r--r-- | arch/arm/mach-orion5x/common.c | 226 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/common.h | 35 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/db88f5281-setup.c | 39 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/dns323-setup.c | 40 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/kurobox_pro-setup.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/rd88f5182-setup.c | 29 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/ts209-setup.c | 38 |
7 files changed, 240 insertions, 195 deletions
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index fa4be3cb1549..b2986717319e 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -63,65 +63,20 @@ void __init orion5x_map_io(void) | |||
63 | iotable_init(orion5x_io_desc, ARRAY_SIZE(orion5x_io_desc)); | 63 | iotable_init(orion5x_io_desc, ARRAY_SIZE(orion5x_io_desc)); |
64 | } | 64 | } |
65 | 65 | ||
66 | |||
66 | /***************************************************************************** | 67 | /***************************************************************************** |
67 | * UART | 68 | * EHCI |
68 | ****************************************************************************/ | 69 | ****************************************************************************/ |
69 | 70 | static struct orion_ehci_data orion5x_ehci_data = { | |
70 | static struct resource orion5x_uart_resources[] = { | 71 | .dram = &orion5x_mbus_dram_info, |
71 | { | ||
72 | .start = UART0_PHYS_BASE, | ||
73 | .end = UART0_PHYS_BASE + 0xff, | ||
74 | .flags = IORESOURCE_MEM, | ||
75 | }, { | ||
76 | .start = IRQ_ORION5X_UART0, | ||
77 | .end = IRQ_ORION5X_UART0, | ||
78 | .flags = IORESOURCE_IRQ, | ||
79 | }, { | ||
80 | .start = UART1_PHYS_BASE, | ||
81 | .end = UART1_PHYS_BASE + 0xff, | ||
82 | .flags = IORESOURCE_MEM, | ||
83 | }, { | ||
84 | .start = IRQ_ORION5X_UART1, | ||
85 | .end = IRQ_ORION5X_UART1, | ||
86 | .flags = IORESOURCE_IRQ, | ||
87 | }, | ||
88 | }; | ||
89 | |||
90 | static struct plat_serial8250_port orion5x_uart_data[] = { | ||
91 | { | ||
92 | .mapbase = UART0_PHYS_BASE, | ||
93 | .membase = (char *)UART0_VIRT_BASE, | ||
94 | .irq = IRQ_ORION5X_UART0, | ||
95 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
96 | .iotype = UPIO_MEM, | ||
97 | .regshift = 2, | ||
98 | .uartclk = ORION5X_TCLK, | ||
99 | }, { | ||
100 | .mapbase = UART1_PHYS_BASE, | ||
101 | .membase = (char *)UART1_VIRT_BASE, | ||
102 | .irq = IRQ_ORION5X_UART1, | ||
103 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
104 | .iotype = UPIO_MEM, | ||
105 | .regshift = 2, | ||
106 | .uartclk = ORION5X_TCLK, | ||
107 | }, { | ||
108 | }, | ||
109 | }; | 72 | }; |
110 | 73 | ||
111 | static struct platform_device orion5x_uart = { | 74 | static u64 ehci_dmamask = 0xffffffffUL; |
112 | .name = "serial8250", | ||
113 | .id = PLAT8250_DEV_PLATFORM, | ||
114 | .dev = { | ||
115 | .platform_data = orion5x_uart_data, | ||
116 | }, | ||
117 | .resource = orion5x_uart_resources, | ||
118 | .num_resources = ARRAY_SIZE(orion5x_uart_resources), | ||
119 | }; | ||
120 | 75 | ||
121 | /******************************************************************************* | ||
122 | * USB Controller - 2 interfaces | ||
123 | ******************************************************************************/ | ||
124 | 76 | ||
77 | /***************************************************************************** | ||
78 | * EHCI0 | ||
79 | ****************************************************************************/ | ||
125 | static struct resource orion5x_ehci0_resources[] = { | 80 | static struct resource orion5x_ehci0_resources[] = { |
126 | { | 81 | { |
127 | .start = ORION5X_USB0_PHYS_BASE, | 82 | .start = ORION5X_USB0_PHYS_BASE, |
@@ -134,24 +89,6 @@ static struct resource orion5x_ehci0_resources[] = { | |||
134 | }, | 89 | }, |
135 | }; | 90 | }; |
136 | 91 | ||
137 | static struct resource orion5x_ehci1_resources[] = { | ||
138 | { | ||
139 | .start = ORION5X_USB1_PHYS_BASE, | ||
140 | .end = ORION5X_USB1_PHYS_BASE + SZ_4K - 1, | ||
141 | .flags = IORESOURCE_MEM, | ||
142 | }, { | ||
143 | .start = IRQ_ORION5X_USB1_CTRL, | ||
144 | .end = IRQ_ORION5X_USB1_CTRL, | ||
145 | .flags = IORESOURCE_IRQ, | ||
146 | }, | ||
147 | }; | ||
148 | |||
149 | static struct orion_ehci_data orion5x_ehci_data = { | ||
150 | .dram = &orion5x_mbus_dram_info, | ||
151 | }; | ||
152 | |||
153 | static u64 ehci_dmamask = 0xffffffffUL; | ||
154 | |||
155 | static struct platform_device orion5x_ehci0 = { | 92 | static struct platform_device orion5x_ehci0 = { |
156 | .name = "orion-ehci", | 93 | .name = "orion-ehci", |
157 | .id = 0, | 94 | .id = 0, |
@@ -164,6 +101,27 @@ static struct platform_device orion5x_ehci0 = { | |||
164 | .num_resources = ARRAY_SIZE(orion5x_ehci0_resources), | 101 | .num_resources = ARRAY_SIZE(orion5x_ehci0_resources), |
165 | }; | 102 | }; |
166 | 103 | ||
104 | void __init orion5x_ehci0_init(void) | ||
105 | { | ||
106 | platform_device_register(&orion5x_ehci0); | ||
107 | } | ||
108 | |||
109 | |||
110 | /***************************************************************************** | ||
111 | * EHCI1 | ||
112 | ****************************************************************************/ | ||
113 | static struct resource orion5x_ehci1_resources[] = { | ||
114 | { | ||
115 | .start = ORION5X_USB1_PHYS_BASE, | ||
116 | .end = ORION5X_USB1_PHYS_BASE + SZ_4K - 1, | ||
117 | .flags = IORESOURCE_MEM, | ||
118 | }, { | ||
119 | .start = IRQ_ORION5X_USB1_CTRL, | ||
120 | .end = IRQ_ORION5X_USB1_CTRL, | ||
121 | .flags = IORESOURCE_IRQ, | ||
122 | }, | ||
123 | }; | ||
124 | |||
167 | static struct platform_device orion5x_ehci1 = { | 125 | static struct platform_device orion5x_ehci1 = { |
168 | .name = "orion-ehci", | 126 | .name = "orion-ehci", |
169 | .id = 1, | 127 | .id = 1, |
@@ -176,11 +134,15 @@ static struct platform_device orion5x_ehci1 = { | |||
176 | .num_resources = ARRAY_SIZE(orion5x_ehci1_resources), | 134 | .num_resources = ARRAY_SIZE(orion5x_ehci1_resources), |
177 | }; | 135 | }; |
178 | 136 | ||
137 | void __init orion5x_ehci1_init(void) | ||
138 | { | ||
139 | platform_device_register(&orion5x_ehci1); | ||
140 | } | ||
141 | |||
142 | |||
179 | /***************************************************************************** | 143 | /***************************************************************************** |
180 | * Gigabit Ethernet port | 144 | * GigE |
181 | * (The Orion and Discovery (MV643xx) families use the same Ethernet driver) | ||
182 | ****************************************************************************/ | 145 | ****************************************************************************/ |
183 | |||
184 | struct mv643xx_eth_shared_platform_data orion5x_eth_shared_data = { | 146 | struct mv643xx_eth_shared_platform_data orion5x_eth_shared_data = { |
185 | .dram = &orion5x_mbus_dram_info, | 147 | .dram = &orion5x_mbus_dram_info, |
186 | .t_clk = ORION5X_TCLK, | 148 | .t_clk = ORION5X_TCLK, |
@@ -229,11 +191,10 @@ void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data) | |||
229 | platform_device_register(&orion5x_eth); | 191 | platform_device_register(&orion5x_eth); |
230 | } | 192 | } |
231 | 193 | ||
194 | |||
232 | /***************************************************************************** | 195 | /***************************************************************************** |
233 | * I2C controller | 196 | * I2C |
234 | * (The Orion and Discovery (MV643xx) families share the same I2C controller) | ||
235 | ****************************************************************************/ | 197 | ****************************************************************************/ |
236 | |||
237 | static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { | 198 | static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { |
238 | .freq_m = 8, /* assumes 166 MHz TCLK */ | 199 | .freq_m = 8, /* assumes 166 MHz TCLK */ |
239 | .freq_n = 3, | 200 | .freq_n = 3, |
@@ -244,7 +205,7 @@ static struct resource orion5x_i2c_resources[] = { | |||
244 | { | 205 | { |
245 | .name = "i2c base", | 206 | .name = "i2c base", |
246 | .start = I2C_PHYS_BASE, | 207 | .start = I2C_PHYS_BASE, |
247 | .end = I2C_PHYS_BASE + 0x20 -1, | 208 | .end = I2C_PHYS_BASE + 0x1f, |
248 | .flags = IORESOURCE_MEM, | 209 | .flags = IORESOURCE_MEM, |
249 | }, { | 210 | }, { |
250 | .name = "i2c irq", | 211 | .name = "i2c irq", |
@@ -264,8 +225,14 @@ static struct platform_device orion5x_i2c = { | |||
264 | }, | 225 | }, |
265 | }; | 226 | }; |
266 | 227 | ||
228 | void __init orion5x_i2c_init(void) | ||
229 | { | ||
230 | platform_device_register(&orion5x_i2c); | ||
231 | } | ||
232 | |||
233 | |||
267 | /***************************************************************************** | 234 | /***************************************************************************** |
268 | * Sata port | 235 | * SATA |
269 | ****************************************************************************/ | 236 | ****************************************************************************/ |
270 | static struct resource orion5x_sata_resources[] = { | 237 | static struct resource orion5x_sata_resources[] = { |
271 | { | 238 | { |
@@ -298,10 +265,98 @@ void __init orion5x_sata_init(struct mv_sata_platform_data *sata_data) | |||
298 | platform_device_register(&orion5x_sata); | 265 | platform_device_register(&orion5x_sata); |
299 | } | 266 | } |
300 | 267 | ||
268 | |||
301 | /***************************************************************************** | 269 | /***************************************************************************** |
302 | * Time handling | 270 | * UART0 |
271 | ****************************************************************************/ | ||
272 | static struct plat_serial8250_port orion5x_uart0_data[] = { | ||
273 | { | ||
274 | .mapbase = UART0_PHYS_BASE, | ||
275 | .membase = (char *)UART0_VIRT_BASE, | ||
276 | .irq = IRQ_ORION5X_UART0, | ||
277 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
278 | .iotype = UPIO_MEM, | ||
279 | .regshift = 2, | ||
280 | .uartclk = ORION5X_TCLK, | ||
281 | }, { | ||
282 | }, | ||
283 | }; | ||
284 | |||
285 | static struct resource orion5x_uart0_resources[] = { | ||
286 | { | ||
287 | .start = UART0_PHYS_BASE, | ||
288 | .end = UART0_PHYS_BASE + 0xff, | ||
289 | .flags = IORESOURCE_MEM, | ||
290 | }, { | ||
291 | .start = IRQ_ORION5X_UART0, | ||
292 | .end = IRQ_ORION5X_UART0, | ||
293 | .flags = IORESOURCE_IRQ, | ||
294 | }, | ||
295 | }; | ||
296 | |||
297 | static struct platform_device orion5x_uart0 = { | ||
298 | .name = "serial8250", | ||
299 | .id = PLAT8250_DEV_PLATFORM, | ||
300 | .dev = { | ||
301 | .platform_data = orion5x_uart0_data, | ||
302 | }, | ||
303 | .resource = orion5x_uart0_resources, | ||
304 | .num_resources = ARRAY_SIZE(orion5x_uart0_resources), | ||
305 | }; | ||
306 | |||
307 | void __init orion5x_uart0_init(void) | ||
308 | { | ||
309 | platform_device_register(&orion5x_uart0); | ||
310 | } | ||
311 | |||
312 | |||
313 | /***************************************************************************** | ||
314 | * UART1 | ||
303 | ****************************************************************************/ | 315 | ****************************************************************************/ |
316 | static struct plat_serial8250_port orion5x_uart1_data[] = { | ||
317 | { | ||
318 | .mapbase = UART1_PHYS_BASE, | ||
319 | .membase = (char *)UART1_VIRT_BASE, | ||
320 | .irq = IRQ_ORION5X_UART1, | ||
321 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
322 | .iotype = UPIO_MEM, | ||
323 | .regshift = 2, | ||
324 | .uartclk = ORION5X_TCLK, | ||
325 | }, { | ||
326 | }, | ||
327 | }; | ||
328 | |||
329 | static struct resource orion5x_uart1_resources[] = { | ||
330 | { | ||
331 | .start = UART1_PHYS_BASE, | ||
332 | .end = UART1_PHYS_BASE + 0xff, | ||
333 | .flags = IORESOURCE_MEM, | ||
334 | }, { | ||
335 | .start = IRQ_ORION5X_UART1, | ||
336 | .end = IRQ_ORION5X_UART1, | ||
337 | .flags = IORESOURCE_IRQ, | ||
338 | }, | ||
339 | }; | ||
340 | |||
341 | static struct platform_device orion5x_uart1 = { | ||
342 | .name = "serial8250", | ||
343 | .id = PLAT8250_DEV_PLATFORM1, | ||
344 | .dev = { | ||
345 | .platform_data = orion5x_uart1_data, | ||
346 | }, | ||
347 | .resource = orion5x_uart1_resources, | ||
348 | .num_resources = ARRAY_SIZE(orion5x_uart1_resources), | ||
349 | }; | ||
350 | |||
351 | void __init orion5x_uart1_init(void) | ||
352 | { | ||
353 | platform_device_register(&orion5x_uart1); | ||
354 | } | ||
304 | 355 | ||
356 | |||
357 | /***************************************************************************** | ||
358 | * Time handling | ||
359 | ****************************************************************************/ | ||
305 | static void orion5x_timer_init(void) | 360 | static void orion5x_timer_init(void) |
306 | { | 361 | { |
307 | orion_time_init(IRQ_ORION5X_BRIDGE, ORION5X_TCLK); | 362 | orion_time_init(IRQ_ORION5X_BRIDGE, ORION5X_TCLK); |
@@ -311,10 +366,10 @@ struct sys_timer orion5x_timer = { | |||
311 | .init = orion5x_timer_init, | 366 | .init = orion5x_timer_init, |
312 | }; | 367 | }; |
313 | 368 | ||
369 | |||
314 | /***************************************************************************** | 370 | /***************************************************************************** |
315 | * General | 371 | * General |
316 | ****************************************************************************/ | 372 | ****************************************************************************/ |
317 | |||
318 | /* | 373 | /* |
319 | * Identify device ID and rev from PCIe configuration header space '0'. | 374 | * Identify device ID and rev from PCIe configuration header space '0'. |
320 | */ | 375 | */ |
@@ -359,15 +414,6 @@ void __init orion5x_init(void) | |||
359 | * Setup Orion address map | 414 | * Setup Orion address map |
360 | */ | 415 | */ |
361 | orion5x_setup_cpu_mbus_bridge(); | 416 | orion5x_setup_cpu_mbus_bridge(); |
362 | |||
363 | /* | ||
364 | * Register devices. | ||
365 | */ | ||
366 | platform_device_register(&orion5x_uart); | ||
367 | platform_device_register(&orion5x_ehci0); | ||
368 | if (dev == MV88F5182_DEV_ID) | ||
369 | platform_device_register(&orion5x_ehci1); | ||
370 | platform_device_register(&orion5x_i2c); | ||
371 | } | 417 | } |
372 | 418 | ||
373 | /* | 419 | /* |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index bd0f05de6e18..da37c204bc38 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -1,10 +1,12 @@ | |||
1 | #ifndef __ARCH_ORION5X_COMMON_H | 1 | #ifndef __ARCH_ORION5X_COMMON_H |
2 | #define __ARCH_ORION5X_COMMON_H | 2 | #define __ARCH_ORION5X_COMMON_H |
3 | 3 | ||
4 | struct mv643xx_eth_platform_data; | ||
5 | struct mv_sata_platform_data; | ||
6 | |||
4 | /* | 7 | /* |
5 | * Basic Orion init functions used early by machine-setup. | 8 | * Basic Orion init functions used early by machine-setup. |
6 | */ | 9 | */ |
7 | |||
8 | void orion5x_map_io(void); | 10 | void orion5x_map_io(void); |
9 | void orion5x_init_irq(void); | 11 | void orion5x_init_irq(void); |
10 | void orion5x_init(void); | 12 | void orion5x_init(void); |
@@ -23,13 +25,19 @@ void orion5x_setup_dev1_win(u32 base, u32 size); | |||
23 | void orion5x_setup_dev2_win(u32 base, u32 size); | 25 | void orion5x_setup_dev2_win(u32 base, u32 size); |
24 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); | 26 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); |
25 | 27 | ||
28 | void orion5x_ehci0_init(void); | ||
29 | void orion5x_ehci1_init(void); | ||
30 | void orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data); | ||
31 | void orion5x_i2c_init(void); | ||
32 | void orion5x_sata_init(struct mv_sata_platform_data *sata_data); | ||
33 | void orion5x_uart0_init(void); | ||
34 | void orion5x_uart1_init(void); | ||
35 | |||
26 | /* | 36 | /* |
27 | * Shared code used internally by other Orion core functions. | 37 | * PCIe/PCI functions. |
28 | * (/mach-orion/pci.c) | ||
29 | */ | 38 | */ |
30 | |||
31 | struct pci_sys_data; | ||
32 | struct pci_bus; | 39 | struct pci_bus; |
40 | struct pci_sys_data; | ||
33 | 41 | ||
34 | void orion5x_pcie_id(u32 *dev, u32 *rev); | 42 | void orion5x_pcie_id(u32 *dev, u32 *rev); |
35 | int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys); | 43 | int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys); |
@@ -40,26 +48,9 @@ int orion5x_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin); | |||
40 | * Valid GPIO pins according to MPP setup, used by machine-setup. | 48 | * Valid GPIO pins according to MPP setup, used by machine-setup. |
41 | * (/mach-orion/gpio.c). | 49 | * (/mach-orion/gpio.c). |
42 | */ | 50 | */ |
43 | |||
44 | void orion5x_gpio_set_valid_pins(u32 pins); | 51 | void orion5x_gpio_set_valid_pins(u32 pins); |
45 | void gpio_display(void); /* debug */ | 52 | void gpio_display(void); /* debug */ |
46 | 53 | ||
47 | /* | ||
48 | * Pull in Orion Ethernet platform_data, used by machine-setup | ||
49 | */ | ||
50 | |||
51 | struct mv643xx_eth_platform_data; | ||
52 | |||
53 | void orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data); | ||
54 | |||
55 | /* | ||
56 | * Orion Sata platform_data, used by machine-setup | ||
57 | */ | ||
58 | |||
59 | struct mv_sata_platform_data; | ||
60 | |||
61 | void orion5x_sata_init(struct mv_sata_platform_data *sata_data); | ||
62 | |||
63 | struct machine_desc; | 54 | struct machine_desc; |
64 | struct meminfo; | 55 | struct meminfo; |
65 | struct tag; | 56 | struct tag; |
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c index 4ee695028254..eca76b3348bc 100644 --- a/arch/arm/mach-orion5x/db88f5281-setup.c +++ b/arch/arm/mach-orion5x/db88f5281-setup.c | |||
@@ -298,13 +298,6 @@ static struct i2c_board_info __initdata db88f5281_i2c_rtc = { | |||
298 | /***************************************************************************** | 298 | /***************************************************************************** |
299 | * General Setup | 299 | * General Setup |
300 | ****************************************************************************/ | 300 | ****************************************************************************/ |
301 | |||
302 | static struct platform_device *db88f5281_devs[] __initdata = { | ||
303 | &db88f5281_boot_flash, | ||
304 | &db88f5281_nor_flash, | ||
305 | &db88f5281_nand_flash, | ||
306 | }; | ||
307 | |||
308 | static void __init db88f5281_init(void) | 301 | static void __init db88f5281_init(void) |
309 | { | 302 | { |
310 | /* | 303 | /* |
@@ -313,15 +306,6 @@ static void __init db88f5281_init(void) | |||
313 | orion5x_init(); | 306 | orion5x_init(); |
314 | 307 | ||
315 | /* | 308 | /* |
316 | * Setup the CPU address decode windows for our on-board devices | ||
317 | */ | ||
318 | orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, | ||
319 | DB88F5281_NOR_BOOT_SIZE); | ||
320 | orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); | ||
321 | orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); | ||
322 | orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); | ||
323 | |||
324 | /* | ||
325 | * Setup Multiplexing Pins: | 309 | * Setup Multiplexing Pins: |
326 | * MPP0: GPIO (USB Over Current) MPP1: GPIO (USB Vbat input) | 310 | * MPP0: GPIO (USB Over Current) MPP1: GPIO (USB Vbat input) |
327 | * MPP2: PCI_REQn[2] MPP3: PCI_GNTn[2] | 311 | * MPP2: PCI_REQn[2] MPP3: PCI_GNTn[2] |
@@ -342,9 +326,28 @@ static void __init db88f5281_init(void) | |||
342 | 326 | ||
343 | orion5x_gpio_set_valid_pins(0x00003fc3); | 327 | orion5x_gpio_set_valid_pins(0x00003fc3); |
344 | 328 | ||
345 | platform_add_devices(db88f5281_devs, ARRAY_SIZE(db88f5281_devs)); | 329 | /* |
346 | i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); | 330 | * Configure peripherals. |
331 | */ | ||
332 | orion5x_ehci0_init(); | ||
347 | orion5x_eth_init(&db88f5281_eth_data); | 333 | orion5x_eth_init(&db88f5281_eth_data); |
334 | orion5x_i2c_init(); | ||
335 | orion5x_uart0_init(); | ||
336 | orion5x_uart1_init(); | ||
337 | |||
338 | orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, | ||
339 | DB88F5281_NOR_BOOT_SIZE); | ||
340 | platform_device_register(&db88f5281_boot_flash); | ||
341 | |||
342 | orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); | ||
343 | |||
344 | orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); | ||
345 | platform_device_register(&db88f5281_nor_flash); | ||
346 | |||
347 | orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); | ||
348 | platform_device_register(&db88f5281_nand_flash); | ||
349 | |||
350 | i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); | ||
348 | } | 351 | } |
349 | 352 | ||
350 | MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board") | 353 | MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board") |
diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c index ec53f866ed11..cd200f766099 100644 --- a/arch/arm/mach-orion5x/dns323-setup.c +++ b/arch/arm/mach-orion5x/dns323-setup.c | |||
@@ -213,12 +213,6 @@ static struct platform_device dns323_button_device = { | |||
213 | * General Setup | 213 | * General Setup |
214 | */ | 214 | */ |
215 | 215 | ||
216 | static struct platform_device *dns323_plat_devices[] __initdata = { | ||
217 | &dns323_nor_flash, | ||
218 | &dns323_gpio_leds, | ||
219 | &dns323_button_device, | ||
220 | }; | ||
221 | |||
222 | /* | 216 | /* |
223 | * On the DNS-323 the following devices are attached via I2C: | 217 | * On the DNS-323 the following devices are attached via I2C: |
224 | * | 218 | * |
@@ -253,11 +247,6 @@ static void __init dns323_init(void) | |||
253 | /* Setup basic Orion functions. Need to be called early. */ | 247 | /* Setup basic Orion functions. Need to be called early. */ |
254 | orion5x_init(); | 248 | orion5x_init(); |
255 | 249 | ||
256 | /* setup flash mapping | ||
257 | * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 | ||
258 | */ | ||
259 | orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); | ||
260 | |||
261 | /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIe | 250 | /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIe |
262 | * | 251 | * |
263 | * Open a special address decode windows for the PCIe WA. | 252 | * Open a special address decode windows for the PCIe WA. |
@@ -294,21 +283,32 @@ static void __init dns323_init(void) | |||
294 | */ | 283 | */ |
295 | orion5x_gpio_set_valid_pins(0x07f6); | 284 | orion5x_gpio_set_valid_pins(0x07f6); |
296 | 285 | ||
297 | /* register dns323 specific power-off method */ | 286 | /* |
298 | if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || | 287 | * Configure peripherals. |
299 | gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) | 288 | */ |
300 | pr_err("DNS323: failed to setup power-off GPIO\n"); | 289 | orion5x_ehci0_init(); |
290 | orion5x_eth_init(&dns323_eth_data); | ||
291 | orion5x_i2c_init(); | ||
292 | orion5x_uart0_init(); | ||
301 | 293 | ||
302 | pm_power_off = dns323_power_off; | 294 | /* setup flash mapping |
295 | * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 | ||
296 | */ | ||
297 | orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); | ||
298 | platform_device_register(&dns323_nor_flash); | ||
299 | |||
300 | platform_device_register(&dns323_gpio_leds); | ||
303 | 301 | ||
304 | /* register flash and other platform devices */ | 302 | platform_device_register(&dns323_button_device); |
305 | platform_add_devices(dns323_plat_devices, | ||
306 | ARRAY_SIZE(dns323_plat_devices)); | ||
307 | 303 | ||
308 | i2c_register_board_info(0, dns323_i2c_devices, | 304 | i2c_register_board_info(0, dns323_i2c_devices, |
309 | ARRAY_SIZE(dns323_i2c_devices)); | 305 | ARRAY_SIZE(dns323_i2c_devices)); |
310 | 306 | ||
311 | orion5x_eth_init(&dns323_eth_data); | 307 | /* register dns323 specific power-off method */ |
308 | if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || | ||
309 | gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) | ||
310 | pr_err("DNS323: failed to setup power-off GPIO\n"); | ||
311 | pm_power_off = dns323_power_off; | ||
312 | } | 312 | } |
313 | 313 | ||
314 | /* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */ | 314 | /* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */ |
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c index 60fcbf1e5d72..10d9fc2ef11a 100644 --- a/arch/arm/mach-orion5x/kurobox_pro-setup.c +++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c | |||
@@ -188,13 +188,6 @@ static void __init kurobox_pro_init(void) | |||
188 | orion5x_init(); | 188 | orion5x_init(); |
189 | 189 | ||
190 | /* | 190 | /* |
191 | * Setup the CPU address decode windows for our devices | ||
192 | */ | ||
193 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, | ||
194 | KUROBOX_PRO_NOR_BOOT_SIZE); | ||
195 | orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE); | ||
196 | |||
197 | /* | ||
198 | * Open a special address decode windows for the PCIe WA. | 191 | * Open a special address decode windows for the PCIe WA. |
199 | */ | 192 | */ |
200 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | 193 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, |
@@ -221,12 +214,27 @@ static void __init kurobox_pro_init(void) | |||
221 | 214 | ||
222 | orion5x_gpio_set_valid_pins(0x0000000c); | 215 | orion5x_gpio_set_valid_pins(0x0000000c); |
223 | 216 | ||
217 | /* | ||
218 | * Configure peripherals. | ||
219 | */ | ||
220 | orion5x_ehci0_init(); | ||
221 | orion5x_ehci1_init(); | ||
222 | orion5x_eth_init(&kurobox_pro_eth_data); | ||
223 | orion5x_i2c_init(); | ||
224 | orion5x_sata_init(&kurobox_pro_sata_data); | ||
225 | orion5x_uart0_init(); | ||
226 | |||
227 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, | ||
228 | KUROBOX_PRO_NOR_BOOT_SIZE); | ||
224 | platform_device_register(&kurobox_pro_nor_flash); | 229 | platform_device_register(&kurobox_pro_nor_flash); |
225 | if (machine_is_kurobox_pro()) | 230 | |
231 | if (machine_is_kurobox_pro()) { | ||
232 | orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, | ||
233 | KUROBOX_PRO_NAND_SIZE); | ||
226 | platform_device_register(&kurobox_pro_nand_flash); | 234 | platform_device_register(&kurobox_pro_nand_flash); |
235 | } | ||
236 | |||
227 | i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1); | 237 | i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1); |
228 | orion5x_eth_init(&kurobox_pro_eth_data); | ||
229 | orion5x_sata_init(&kurobox_pro_sata_data); | ||
230 | } | 238 | } |
231 | 239 | ||
232 | #ifdef CONFIG_MACH_KUROBOX_PRO | 240 | #ifdef CONFIG_MACH_KUROBOX_PRO |
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c index 62fd99fc664a..4496ed1cab73 100644 --- a/arch/arm/mach-orion5x/rd88f5182-setup.c +++ b/arch/arm/mach-orion5x/rd88f5182-setup.c | |||
@@ -241,11 +241,6 @@ static struct mv_sata_platform_data rd88f5182_sata_data = { | |||
241 | /***************************************************************************** | 241 | /***************************************************************************** |
242 | * General Setup | 242 | * General Setup |
243 | ****************************************************************************/ | 243 | ****************************************************************************/ |
244 | |||
245 | static struct platform_device *rd88f5182_devices[] __initdata = { | ||
246 | &rd88f5182_nor_flash, | ||
247 | }; | ||
248 | |||
249 | static void __init rd88f5182_init(void) | 244 | static void __init rd88f5182_init(void) |
250 | { | 245 | { |
251 | /* | 246 | /* |
@@ -254,13 +249,6 @@ static void __init rd88f5182_init(void) | |||
254 | orion5x_init(); | 249 | orion5x_init(); |
255 | 250 | ||
256 | /* | 251 | /* |
257 | * Setup the CPU address decode windows for our devices | ||
258 | */ | ||
259 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, | ||
260 | RD88F5182_NOR_BOOT_SIZE); | ||
261 | orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); | ||
262 | |||
263 | /* | ||
264 | * Open a special address decode windows for the PCIe WA. | 252 | * Open a special address decode windows for the PCIe WA. |
265 | */ | 253 | */ |
266 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | 254 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, |
@@ -296,10 +284,23 @@ static void __init rd88f5182_init(void) | |||
296 | 284 | ||
297 | orion5x_gpio_set_valid_pins(0x000000fb); | 285 | orion5x_gpio_set_valid_pins(0x000000fb); |
298 | 286 | ||
299 | platform_add_devices(rd88f5182_devices, ARRAY_SIZE(rd88f5182_devices)); | 287 | /* |
300 | i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); | 288 | * Configure peripherals. |
289 | */ | ||
290 | orion5x_ehci0_init(); | ||
291 | orion5x_ehci1_init(); | ||
301 | orion5x_eth_init(&rd88f5182_eth_data); | 292 | orion5x_eth_init(&rd88f5182_eth_data); |
293 | orion5x_i2c_init(); | ||
302 | orion5x_sata_init(&rd88f5182_sata_data); | 294 | orion5x_sata_init(&rd88f5182_sata_data); |
295 | orion5x_uart0_init(); | ||
296 | |||
297 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, | ||
298 | RD88F5182_NOR_BOOT_SIZE); | ||
299 | |||
300 | orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); | ||
301 | platform_device_register(&rd88f5182_nor_flash); | ||
302 | |||
303 | i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); | ||
303 | } | 304 | } |
304 | 305 | ||
305 | MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") | 306 | MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") |
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c index 5374b6edb9a1..b62fdb6cf6cb 100644 --- a/arch/arm/mach-orion5x/ts209-setup.c +++ b/arch/arm/mach-orion5x/ts209-setup.c | |||
@@ -332,16 +332,9 @@ static struct mv_sata_platform_data qnap_ts209_sata_data = { | |||
332 | 332 | ||
333 | * General Setup | 333 | * General Setup |
334 | ****************************************************************************/ | 334 | ****************************************************************************/ |
335 | |||
336 | static struct platform_device *qnap_ts209_devices[] __initdata = { | ||
337 | &qnap_ts209_nor_flash, | ||
338 | &qnap_ts209_button_device, | ||
339 | }; | ||
340 | |||
341 | /* | 335 | /* |
342 | * QNAP TS-[12]09 specific power off method via UART1-attached PIC | 336 | * QNAP TS-[12]09 specific power off method via UART1-attached PIC |
343 | */ | 337 | */ |
344 | |||
345 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) | 338 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) |
346 | 339 | ||
347 | static void qnap_ts209_power_off(void) | 340 | static void qnap_ts209_power_off(void) |
@@ -372,12 +365,6 @@ static void __init qnap_ts209_init(void) | |||
372 | orion5x_init(); | 365 | orion5x_init(); |
373 | 366 | ||
374 | /* | 367 | /* |
375 | * Setup flash mapping | ||
376 | */ | ||
377 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, | ||
378 | QNAP_TS209_NOR_BOOT_SIZE); | ||
379 | |||
380 | /* | ||
381 | * Open a special address decode windows for the PCIe WA. | 368 | * Open a special address decode windows for the PCIe WA. |
382 | */ | 369 | */ |
383 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | 370 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, |
@@ -411,11 +398,22 @@ static void __init qnap_ts209_init(void) | |||
411 | orion5x_write(MPP_16_19_CTRL, 0x5500); | 398 | orion5x_write(MPP_16_19_CTRL, 0x5500); |
412 | orion5x_gpio_set_valid_pins(0x3cc0fff); | 399 | orion5x_gpio_set_valid_pins(0x3cc0fff); |
413 | 400 | ||
414 | /* register ts209 specific power-off method */ | 401 | /* |
415 | pm_power_off = qnap_ts209_power_off; | 402 | * Configure peripherals. |
403 | */ | ||
404 | orion5x_ehci0_init(); | ||
405 | orion5x_ehci1_init(); | ||
406 | ts209_find_mac_addr(); | ||
407 | orion5x_eth_init(&qnap_ts209_eth_data); | ||
408 | orion5x_i2c_init(); | ||
409 | orion5x_sata_init(&qnap_ts209_sata_data); | ||
410 | orion5x_uart0_init(); | ||
411 | |||
412 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, | ||
413 | QNAP_TS209_NOR_BOOT_SIZE); | ||
414 | platform_device_register(&qnap_ts209_nor_flash); | ||
416 | 415 | ||
417 | platform_add_devices(qnap_ts209_devices, | 416 | platform_device_register(&qnap_ts209_button_device); |
418 | ARRAY_SIZE(qnap_ts209_devices)); | ||
419 | 417 | ||
420 | /* Get RTC IRQ and register the chip */ | 418 | /* Get RTC IRQ and register the chip */ |
421 | if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) { | 419 | if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) { |
@@ -428,10 +426,8 @@ static void __init qnap_ts209_init(void) | |||
428 | pr_warning("qnap_ts209_init: failed to get RTC IRQ\n"); | 426 | pr_warning("qnap_ts209_init: failed to get RTC IRQ\n"); |
429 | i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1); | 427 | i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1); |
430 | 428 | ||
431 | ts209_find_mac_addr(); | 429 | /* register ts209 specific power-off method */ |
432 | orion5x_eth_init(&qnap_ts209_eth_data); | 430 | pm_power_off = qnap_ts209_power_off; |
433 | |||
434 | orion5x_sata_init(&qnap_ts209_sata_data); | ||
435 | } | 431 | } |
436 | 432 | ||
437 | MACHINE_START(TS209, "QNAP TS-109/TS-209") | 433 | MACHINE_START(TS209, "QNAP TS-109/TS-209") |