Merge tag 'v4.11-rc1' into omap-for-v4.11/fixes
[sfrench/cifs-2.6.git] / arch / arm / plat-orion / common.c
1 /*
2  * arch/arm/plat-orion/common.c
3  *
4  * Marvell Orion SoC common setup code used by multiple mach-/common.c
5  *
6  * This file is licensed under the terms of the GNU General Public
7  * License version 2.  This program is licensed "as is" without any
8  * warranty of any kind, whether express or implied.
9  */
10
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/platform_device.h>
14 #include <linux/dma-mapping.h>
15 #include <linux/serial_8250.h>
16 #include <linux/ata_platform.h>
17 #include <linux/clk.h>
18 #include <linux/clkdev.h>
19 #include <linux/mv643xx_eth.h>
20 #include <linux/mv643xx_i2c.h>
21 #include <net/dsa.h>
22 #include <linux/platform_data/dma-mv_xor.h>
23 #include <linux/platform_data/usb-ehci-orion.h>
24 #include <plat/common.h>
25 #include <linux/phy.h>
26
27 /* Create a clkdev entry for a given device/clk */
28 void __init orion_clkdev_add(const char *con_id, const char *dev_id,
29                              struct clk *clk)
30 {
31         clkdev_create(clk, con_id, "%s", dev_id);
32 }
33
34 /* Create clkdev entries for all orion platforms except kirkwood.
35    Kirkwood has gated clocks for some of its peripherals, so creates
36    its own clkdev entries. For all the other orion devices, create
37    clkdev entries to the tclk. */
38 void __init orion_clkdev_init(struct clk *tclk)
39 {
40         orion_clkdev_add(NULL, "orion_spi.0", tclk);
41         orion_clkdev_add(NULL, "orion_spi.1", tclk);
42         orion_clkdev_add(NULL, MV643XX_ETH_NAME ".0", tclk);
43         orion_clkdev_add(NULL, MV643XX_ETH_NAME ".1", tclk);
44         orion_clkdev_add(NULL, MV643XX_ETH_NAME ".2", tclk);
45         orion_clkdev_add(NULL, MV643XX_ETH_NAME ".3", tclk);
46         orion_clkdev_add(NULL, "orion_wdt", tclk);
47         orion_clkdev_add(NULL, MV64XXX_I2C_CTLR_NAME ".0", tclk);
48 }
49
50 /* Fill in the resources structure and link it into the platform
51    device structure. There is always a memory region, and nearly
52    always an interrupt.*/
53 static void fill_resources(struct platform_device *device,
54                            struct resource *resources,
55                            resource_size_t mapbase,
56                            resource_size_t size)
57 {
58         device->resource = resources;
59         device->num_resources = 1;
60         resources[0].flags = IORESOURCE_MEM;
61         resources[0].start = mapbase;
62         resources[0].end = mapbase + size;
63 }
64
65 static void fill_resources_irq(struct platform_device *device,
66                                struct resource *resources,
67                                resource_size_t mapbase,
68                                resource_size_t size,
69                                unsigned int irq)
70 {
71         fill_resources(device, resources, mapbase, size);
72
73         device->num_resources++;
74         resources[1].flags = IORESOURCE_IRQ;
75         resources[1].start = irq;
76         resources[1].end = irq;
77 }
78
79 /*****************************************************************************
80  * UART
81  ****************************************************************************/
82 static unsigned long __init uart_get_clk_rate(struct clk *clk)
83 {
84         clk_prepare_enable(clk);
85         return clk_get_rate(clk);
86 }
87
88 static void __init uart_complete(
89         struct platform_device *orion_uart,
90         struct plat_serial8250_port *data,
91         struct resource *resources,
92         void __iomem *membase,
93         resource_size_t mapbase,
94         unsigned int irq,
95         struct clk *clk)
96 {
97         data->mapbase = mapbase;
98         data->membase = membase;
99         data->irq = irq;
100         data->uartclk = uart_get_clk_rate(clk);
101         orion_uart->dev.platform_data = data;
102
103         fill_resources_irq(orion_uart, resources, mapbase, 0xff, irq);
104         platform_device_register(orion_uart);
105 }
106
107 /*****************************************************************************
108  * UART0
109  ****************************************************************************/
110 static struct plat_serial8250_port orion_uart0_data[] = {
111         {
112                 .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
113                 .iotype         = UPIO_MEM,
114                 .regshift       = 2,
115         }, {
116         },
117 };
118
119 static struct resource orion_uart0_resources[2];
120
121 static struct platform_device orion_uart0 = {
122         .name                   = "serial8250",
123         .id                     = PLAT8250_DEV_PLATFORM,
124 };
125
126 void __init orion_uart0_init(void __iomem *membase,
127                              resource_size_t mapbase,
128                              unsigned int irq,
129                              struct clk *clk)
130 {
131         uart_complete(&orion_uart0, orion_uart0_data, orion_uart0_resources,
132                       membase, mapbase, irq, clk);
133 }
134
135 /*****************************************************************************
136  * UART1
137  ****************************************************************************/
138 static struct plat_serial8250_port orion_uart1_data[] = {
139         {
140                 .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
141                 .iotype         = UPIO_MEM,
142                 .regshift       = 2,
143         }, {
144         },
145 };
146
147 static struct resource orion_uart1_resources[2];
148
149 static struct platform_device orion_uart1 = {
150         .name                   = "serial8250",
151         .id                     = PLAT8250_DEV_PLATFORM1,
152 };
153
154 void __init orion_uart1_init(void __iomem *membase,
155                              resource_size_t mapbase,
156                              unsigned int irq,
157                              struct clk *clk)
158 {
159         uart_complete(&orion_uart1, orion_uart1_data, orion_uart1_resources,
160                       membase, mapbase, irq, clk);
161 }
162
163 /*****************************************************************************
164  * UART2
165  ****************************************************************************/
166 static struct plat_serial8250_port orion_uart2_data[] = {
167         {
168                 .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
169                 .iotype         = UPIO_MEM,
170                 .regshift       = 2,
171         }, {
172         },
173 };
174
175 static struct resource orion_uart2_resources[2];
176
177 static struct platform_device orion_uart2 = {
178         .name                   = "serial8250",
179         .id                     = PLAT8250_DEV_PLATFORM2,
180 };
181
182 void __init orion_uart2_init(void __iomem *membase,
183                              resource_size_t mapbase,
184                              unsigned int irq,
185                              struct clk *clk)
186 {
187         uart_complete(&orion_uart2, orion_uart2_data, orion_uart2_resources,
188                       membase, mapbase, irq, clk);
189 }
190
191 /*****************************************************************************
192  * UART3
193  ****************************************************************************/
194 static struct plat_serial8250_port orion_uart3_data[] = {
195         {
196                 .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
197                 .iotype         = UPIO_MEM,
198                 .regshift       = 2,
199         }, {
200         },
201 };
202
203 static struct resource orion_uart3_resources[2];
204
205 static struct platform_device orion_uart3 = {
206         .name                   = "serial8250",
207         .id                     = 3,
208 };
209
210 void __init orion_uart3_init(void __iomem *membase,
211                              resource_size_t mapbase,
212                              unsigned int irq,
213                              struct clk *clk)
214 {
215         uart_complete(&orion_uart3, orion_uart3_data, orion_uart3_resources,
216                       membase, mapbase, irq, clk);
217 }
218
219 /*****************************************************************************
220  * SoC RTC
221  ****************************************************************************/
222 static struct resource orion_rtc_resource[2];
223
224 void __init orion_rtc_init(unsigned long mapbase,
225                            unsigned long irq)
226 {
227         orion_rtc_resource[0].start = mapbase;
228         orion_rtc_resource[0].end = mapbase + SZ_32 - 1;
229         orion_rtc_resource[0].flags = IORESOURCE_MEM;
230         orion_rtc_resource[1].start = irq;
231         orion_rtc_resource[1].end = irq;
232         orion_rtc_resource[1].flags = IORESOURCE_IRQ;
233
234         platform_device_register_simple("rtc-mv", -1, orion_rtc_resource, 2);
235 }
236
237 /*****************************************************************************
238  * GE
239  ****************************************************************************/
240 static __init void ge_complete(
241         struct mv643xx_eth_shared_platform_data *orion_ge_shared_data,
242         struct resource *orion_ge_resource, unsigned long irq,
243         struct platform_device *orion_ge_shared,
244         struct platform_device *orion_ge_mvmdio,
245         struct mv643xx_eth_platform_data *eth_data,
246         struct platform_device *orion_ge)
247 {
248         orion_ge_resource->start = irq;
249         orion_ge_resource->end = irq;
250         eth_data->shared = orion_ge_shared;
251         orion_ge->dev.platform_data = eth_data;
252
253         platform_device_register(orion_ge_shared);
254         if (orion_ge_mvmdio)
255                 platform_device_register(orion_ge_mvmdio);
256         platform_device_register(orion_ge);
257 }
258
259 /*****************************************************************************
260  * GE00
261  ****************************************************************************/
262 static struct mv643xx_eth_shared_platform_data orion_ge00_shared_data;
263
264 static struct resource orion_ge00_shared_resources[] = {
265         {
266                 .name   = "ge00 base",
267         },
268 };
269
270 static struct platform_device orion_ge00_shared = {
271         .name           = MV643XX_ETH_SHARED_NAME,
272         .id             = 0,
273         .dev            = {
274                 .platform_data  = &orion_ge00_shared_data,
275         },
276 };
277
278 static struct resource orion_ge_mvmdio_resources[] = {
279         {
280                 .name   = "ge00 mvmdio base",
281         }, {
282                 .name   = "ge00 mvmdio err irq",
283         },
284 };
285
286 static struct platform_device orion_ge_mvmdio = {
287         .name           = "orion-mdio",
288         .id             = -1,
289 };
290
291 static struct resource orion_ge00_resources[] = {
292         {
293                 .name   = "ge00 irq",
294                 .flags  = IORESOURCE_IRQ,
295         },
296 };
297
298 static struct platform_device orion_ge00 = {
299         .name           = MV643XX_ETH_NAME,
300         .id             = 0,
301         .num_resources  = 1,
302         .resource       = orion_ge00_resources,
303         .dev            = {
304                 .coherent_dma_mask      = DMA_BIT_MASK(32),
305         },
306 };
307
308 void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data,
309                             unsigned long mapbase,
310                             unsigned long irq,
311                             unsigned long irq_err,
312                             unsigned int tx_csum_limit)
313 {
314         fill_resources(&orion_ge00_shared, orion_ge00_shared_resources,
315                        mapbase + 0x2000, SZ_16K - 1);
316         fill_resources_irq(&orion_ge_mvmdio, orion_ge_mvmdio_resources,
317                         mapbase + 0x2004, 0x84 - 1, irq_err);
318         orion_ge00_shared_data.tx_csum_limit = tx_csum_limit;
319         ge_complete(&orion_ge00_shared_data,
320                     orion_ge00_resources, irq, &orion_ge00_shared,
321                     &orion_ge_mvmdio,
322                     eth_data, &orion_ge00);
323 }
324
325 /*****************************************************************************
326  * GE01
327  ****************************************************************************/
328 static struct mv643xx_eth_shared_platform_data orion_ge01_shared_data;
329
330 static struct resource orion_ge01_shared_resources[] = {
331         {
332                 .name   = "ge01 base",
333         }
334 };
335
336 static struct platform_device orion_ge01_shared = {
337         .name           = MV643XX_ETH_SHARED_NAME,
338         .id             = 1,
339         .dev            = {
340                 .platform_data  = &orion_ge01_shared_data,
341         },
342 };
343
344 static struct resource orion_ge01_resources[] = {
345         {
346                 .name   = "ge01 irq",
347                 .flags  = IORESOURCE_IRQ,
348         },
349 };
350
351 static struct platform_device orion_ge01 = {
352         .name           = MV643XX_ETH_NAME,
353         .id             = 1,
354         .num_resources  = 1,
355         .resource       = orion_ge01_resources,
356         .dev            = {
357                 .coherent_dma_mask      = DMA_BIT_MASK(32),
358         },
359 };
360
361 void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data,
362                             unsigned long mapbase,
363                             unsigned long irq,
364                             unsigned int tx_csum_limit)
365 {
366         fill_resources(&orion_ge01_shared, orion_ge01_shared_resources,
367                        mapbase + 0x2000, SZ_16K - 1);
368         orion_ge01_shared_data.tx_csum_limit = tx_csum_limit;
369         ge_complete(&orion_ge01_shared_data,
370                     orion_ge01_resources, irq, &orion_ge01_shared,
371                     NULL,
372                     eth_data, &orion_ge01);
373 }
374
375 /*****************************************************************************
376  * GE10
377  ****************************************************************************/
378 static struct mv643xx_eth_shared_platform_data orion_ge10_shared_data;
379
380 static struct resource orion_ge10_shared_resources[] = {
381         {
382                 .name   = "ge10 base",
383         }
384 };
385
386 static struct platform_device orion_ge10_shared = {
387         .name           = MV643XX_ETH_SHARED_NAME,
388         .id             = 2,
389         .dev            = {
390                 .platform_data  = &orion_ge10_shared_data,
391         },
392 };
393
394 static struct resource orion_ge10_resources[] = {
395         {
396                 .name   = "ge10 irq",
397                 .flags  = IORESOURCE_IRQ,
398         },
399 };
400
401 static struct platform_device orion_ge10 = {
402         .name           = MV643XX_ETH_NAME,
403         .id             = 2,
404         .num_resources  = 1,
405         .resource       = orion_ge10_resources,
406         .dev            = {
407                 .coherent_dma_mask      = DMA_BIT_MASK(32),
408         },
409 };
410
411 void __init orion_ge10_init(struct mv643xx_eth_platform_data *eth_data,
412                             unsigned long mapbase,
413                             unsigned long irq)
414 {
415         fill_resources(&orion_ge10_shared, orion_ge10_shared_resources,
416                        mapbase + 0x2000, SZ_16K - 1);
417         ge_complete(&orion_ge10_shared_data,
418                     orion_ge10_resources, irq, &orion_ge10_shared,
419                     NULL,
420                     eth_data, &orion_ge10);
421 }
422
423 /*****************************************************************************
424  * GE11
425  ****************************************************************************/
426 static struct mv643xx_eth_shared_platform_data orion_ge11_shared_data;
427
428 static struct resource orion_ge11_shared_resources[] = {
429         {
430                 .name   = "ge11 base",
431         },
432 };
433
434 static struct platform_device orion_ge11_shared = {
435         .name           = MV643XX_ETH_SHARED_NAME,
436         .id             = 3,
437         .dev            = {
438                 .platform_data  = &orion_ge11_shared_data,
439         },
440 };
441
442 static struct resource orion_ge11_resources[] = {
443         {
444                 .name   = "ge11 irq",
445                 .flags  = IORESOURCE_IRQ,
446         },
447 };
448
449 static struct platform_device orion_ge11 = {
450         .name           = MV643XX_ETH_NAME,
451         .id             = 3,
452         .num_resources  = 1,
453         .resource       = orion_ge11_resources,
454         .dev            = {
455                 .coherent_dma_mask      = DMA_BIT_MASK(32),
456         },
457 };
458
459 void __init orion_ge11_init(struct mv643xx_eth_platform_data *eth_data,
460                             unsigned long mapbase,
461                             unsigned long irq)
462 {
463         fill_resources(&orion_ge11_shared, orion_ge11_shared_resources,
464                        mapbase + 0x2000, SZ_16K - 1);
465         ge_complete(&orion_ge11_shared_data,
466                     orion_ge11_resources, irq, &orion_ge11_shared,
467                     NULL,
468                     eth_data, &orion_ge11);
469 }
470
471 /*****************************************************************************
472  * Ethernet switch
473  ****************************************************************************/
474 static __initconst const char *orion_ge00_mvmdio_bus_name = "orion-mii";
475 static __initdata struct mdio_board_info
476                   orion_ge00_switch_board_info;
477
478 void __init orion_ge00_switch_init(struct dsa_chip_data *d)
479 {
480         struct mdio_board_info *bd;
481         unsigned int i;
482
483         for (i = 0; i < ARRAY_SIZE(d->port_names); i++)
484                 if (!strcmp(d->port_names[i], "cpu"))
485                         break;
486
487         bd = &orion_ge00_switch_board_info;
488         bd->bus_id = orion_ge00_mvmdio_bus_name;
489         bd->mdio_addr = d->sw_addr;
490         d->netdev[i] = &orion_ge00.dev;
491         strcpy(bd->modalias, "mv88e6085");
492         bd->platform_data = d;
493
494         mdiobus_register_board_info(&orion_ge00_switch_board_info, 1);
495 }
496
497 /*****************************************************************************
498  * I2C
499  ****************************************************************************/
500 static struct mv64xxx_i2c_pdata orion_i2c_pdata = {
501         .freq_n         = 3,
502         .timeout        = 1000, /* Default timeout of 1 second */
503 };
504
505 static struct resource orion_i2c_resources[2];
506
507 static struct platform_device orion_i2c = {
508         .name           = MV64XXX_I2C_CTLR_NAME,
509         .id             = 0,
510         .dev            = {
511                 .platform_data  = &orion_i2c_pdata,
512         },
513 };
514
515 static struct mv64xxx_i2c_pdata orion_i2c_1_pdata = {
516         .freq_n         = 3,
517         .timeout        = 1000, /* Default timeout of 1 second */
518 };
519
520 static struct resource orion_i2c_1_resources[2];
521
522 static struct platform_device orion_i2c_1 = {
523         .name           = MV64XXX_I2C_CTLR_NAME,
524         .id             = 1,
525         .dev            = {
526                 .platform_data  = &orion_i2c_1_pdata,
527         },
528 };
529
530 void __init orion_i2c_init(unsigned long mapbase,
531                            unsigned long irq,
532                            unsigned long freq_m)
533 {
534         orion_i2c_pdata.freq_m = freq_m;
535         fill_resources_irq(&orion_i2c, orion_i2c_resources, mapbase,
536                        SZ_32 - 1, irq);
537         platform_device_register(&orion_i2c);
538 }
539
540 void __init orion_i2c_1_init(unsigned long mapbase,
541                              unsigned long irq,
542                              unsigned long freq_m)
543 {
544         orion_i2c_1_pdata.freq_m = freq_m;
545         fill_resources_irq(&orion_i2c_1, orion_i2c_1_resources, mapbase,
546                        SZ_32 - 1, irq);
547         platform_device_register(&orion_i2c_1);
548 }
549
550 /*****************************************************************************
551  * SPI
552  ****************************************************************************/
553 static struct resource orion_spi_resources;
554
555 static struct platform_device orion_spi = {
556         .name           = "orion_spi",
557         .id             = 0,
558 };
559
560 static struct resource orion_spi_1_resources;
561
562 static struct platform_device orion_spi_1 = {
563         .name           = "orion_spi",
564         .id             = 1,
565 };
566
567 /* Note: The SPI silicon core does have interrupts. However the
568  * current Linux software driver does not use interrupts. */
569
570 void __init orion_spi_init(unsigned long mapbase)
571 {
572         fill_resources(&orion_spi, &orion_spi_resources,
573                        mapbase, SZ_512 - 1);
574         platform_device_register(&orion_spi);
575 }
576
577 void __init orion_spi_1_init(unsigned long mapbase)
578 {
579         fill_resources(&orion_spi_1, &orion_spi_1_resources,
580                        mapbase, SZ_512 - 1);
581         platform_device_register(&orion_spi_1);
582 }
583
584 /*****************************************************************************
585  * XOR
586  ****************************************************************************/
587 static u64 orion_xor_dmamask = DMA_BIT_MASK(32);
588
589 /*****************************************************************************
590  * XOR0
591  ****************************************************************************/
592 static struct resource orion_xor0_shared_resources[] = {
593         {
594                 .name   = "xor 0 low",
595                 .flags  = IORESOURCE_MEM,
596         }, {
597                 .name   = "xor 0 high",
598                 .flags  = IORESOURCE_MEM,
599         }, {
600                 .name   = "irq channel 0",
601                 .flags  = IORESOURCE_IRQ,
602         }, {
603                 .name   = "irq channel 1",
604                 .flags  = IORESOURCE_IRQ,
605         },
606 };
607
608 static struct mv_xor_channel_data orion_xor0_channels_data[2];
609
610 static struct mv_xor_platform_data orion_xor0_pdata = {
611         .channels = orion_xor0_channels_data,
612 };
613
614 static struct platform_device orion_xor0_shared = {
615         .name           = MV_XOR_NAME,
616         .id             = 0,
617         .num_resources  = ARRAY_SIZE(orion_xor0_shared_resources),
618         .resource       = orion_xor0_shared_resources,
619         .dev            = {
620                 .dma_mask               = &orion_xor_dmamask,
621                 .coherent_dma_mask      = DMA_BIT_MASK(64),
622                 .platform_data          = &orion_xor0_pdata,
623         },
624 };
625
626 void __init orion_xor0_init(unsigned long mapbase_low,
627                             unsigned long mapbase_high,
628                             unsigned long irq_0,
629                             unsigned long irq_1)
630 {
631         orion_xor0_shared_resources[0].start = mapbase_low;
632         orion_xor0_shared_resources[0].end = mapbase_low + 0xff;
633         orion_xor0_shared_resources[1].start = mapbase_high;
634         orion_xor0_shared_resources[1].end = mapbase_high + 0xff;
635
636         orion_xor0_shared_resources[2].start = irq_0;
637         orion_xor0_shared_resources[2].end = irq_0;
638         orion_xor0_shared_resources[3].start = irq_1;
639         orion_xor0_shared_resources[3].end = irq_1;
640
641         dma_cap_set(DMA_MEMCPY, orion_xor0_channels_data[0].cap_mask);
642         dma_cap_set(DMA_XOR, orion_xor0_channels_data[0].cap_mask);
643
644         dma_cap_set(DMA_MEMCPY, orion_xor0_channels_data[1].cap_mask);
645         dma_cap_set(DMA_XOR, orion_xor0_channels_data[1].cap_mask);
646
647         platform_device_register(&orion_xor0_shared);
648 }
649
650 /*****************************************************************************
651  * XOR1
652  ****************************************************************************/
653 static struct resource orion_xor1_shared_resources[] = {
654         {
655                 .name   = "xor 1 low",
656                 .flags  = IORESOURCE_MEM,
657         }, {
658                 .name   = "xor 1 high",
659                 .flags  = IORESOURCE_MEM,
660         }, {
661                 .name   = "irq channel 0",
662                 .flags  = IORESOURCE_IRQ,
663         }, {
664                 .name   = "irq channel 1",
665                 .flags  = IORESOURCE_IRQ,
666         },
667 };
668
669 static struct mv_xor_channel_data orion_xor1_channels_data[2];
670
671 static struct mv_xor_platform_data orion_xor1_pdata = {
672         .channels = orion_xor1_channels_data,
673 };
674
675 static struct platform_device orion_xor1_shared = {
676         .name           = MV_XOR_NAME,
677         .id             = 1,
678         .num_resources  = ARRAY_SIZE(orion_xor1_shared_resources),
679         .resource       = orion_xor1_shared_resources,
680         .dev            = {
681                 .dma_mask               = &orion_xor_dmamask,
682                 .coherent_dma_mask      = DMA_BIT_MASK(64),
683                 .platform_data          = &orion_xor1_pdata,
684         },
685 };
686
687 void __init orion_xor1_init(unsigned long mapbase_low,
688                             unsigned long mapbase_high,
689                             unsigned long irq_0,
690                             unsigned long irq_1)
691 {
692         orion_xor1_shared_resources[0].start = mapbase_low;
693         orion_xor1_shared_resources[0].end = mapbase_low + 0xff;
694         orion_xor1_shared_resources[1].start = mapbase_high;
695         orion_xor1_shared_resources[1].end = mapbase_high + 0xff;
696
697         orion_xor1_shared_resources[2].start = irq_0;
698         orion_xor1_shared_resources[2].end = irq_0;
699         orion_xor1_shared_resources[3].start = irq_1;
700         orion_xor1_shared_resources[3].end = irq_1;
701
702         dma_cap_set(DMA_MEMCPY, orion_xor1_channels_data[0].cap_mask);
703         dma_cap_set(DMA_XOR, orion_xor1_channels_data[0].cap_mask);
704
705         dma_cap_set(DMA_MEMCPY, orion_xor1_channels_data[1].cap_mask);
706         dma_cap_set(DMA_XOR, orion_xor1_channels_data[1].cap_mask);
707
708         platform_device_register(&orion_xor1_shared);
709 }
710
711 /*****************************************************************************
712  * EHCI
713  ****************************************************************************/
714 static struct orion_ehci_data orion_ehci_data;
715 static u64 ehci_dmamask = DMA_BIT_MASK(32);
716
717
718 /*****************************************************************************
719  * EHCI0
720  ****************************************************************************/
721 static struct resource orion_ehci_resources[2];
722
723 static struct platform_device orion_ehci = {
724         .name           = "orion-ehci",
725         .id             = 0,
726         .dev            = {
727                 .dma_mask               = &ehci_dmamask,
728                 .coherent_dma_mask      = DMA_BIT_MASK(32),
729                 .platform_data          = &orion_ehci_data,
730         },
731 };
732
733 void __init orion_ehci_init(unsigned long mapbase,
734                             unsigned long irq,
735                             enum orion_ehci_phy_ver phy_version)
736 {
737         orion_ehci_data.phy_version = phy_version;
738         fill_resources_irq(&orion_ehci, orion_ehci_resources, mapbase, SZ_4K - 1,
739                        irq);
740
741         platform_device_register(&orion_ehci);
742 }
743
744 /*****************************************************************************
745  * EHCI1
746  ****************************************************************************/
747 static struct resource orion_ehci_1_resources[2];
748
749 static struct platform_device orion_ehci_1 = {
750         .name           = "orion-ehci",
751         .id             = 1,
752         .dev            = {
753                 .dma_mask               = &ehci_dmamask,
754                 .coherent_dma_mask      = DMA_BIT_MASK(32),
755                 .platform_data          = &orion_ehci_data,
756         },
757 };
758
759 void __init orion_ehci_1_init(unsigned long mapbase,
760                               unsigned long irq)
761 {
762         fill_resources_irq(&orion_ehci_1, orion_ehci_1_resources,
763                        mapbase, SZ_4K - 1, irq);
764
765         platform_device_register(&orion_ehci_1);
766 }
767
768 /*****************************************************************************
769  * EHCI2
770  ****************************************************************************/
771 static struct resource orion_ehci_2_resources[2];
772
773 static struct platform_device orion_ehci_2 = {
774         .name           = "orion-ehci",
775         .id             = 2,
776         .dev            = {
777                 .dma_mask               = &ehci_dmamask,
778                 .coherent_dma_mask      = DMA_BIT_MASK(32),
779                 .platform_data          = &orion_ehci_data,
780         },
781 };
782
783 void __init orion_ehci_2_init(unsigned long mapbase,
784                               unsigned long irq)
785 {
786         fill_resources_irq(&orion_ehci_2, orion_ehci_2_resources,
787                        mapbase, SZ_4K - 1, irq);
788
789         platform_device_register(&orion_ehci_2);
790 }
791
792 /*****************************************************************************
793  * SATA
794  ****************************************************************************/
795 static struct resource orion_sata_resources[2] = {
796         {
797                 .name   = "sata base",
798         }, {
799                 .name   = "sata irq",
800         },
801 };
802
803 static struct platform_device orion_sata = {
804         .name           = "sata_mv",
805         .id             = 0,
806         .dev            = {
807                 .coherent_dma_mask      = DMA_BIT_MASK(32),
808         },
809 };
810
811 void __init orion_sata_init(struct mv_sata_platform_data *sata_data,
812                             unsigned long mapbase,
813                             unsigned long irq)
814 {
815         orion_sata.dev.platform_data = sata_data;
816         fill_resources_irq(&orion_sata, orion_sata_resources,
817                        mapbase, 0x5000 - 1, irq);
818
819         platform_device_register(&orion_sata);
820 }
821
822 /*****************************************************************************
823  * Cryptographic Engines and Security Accelerator (CESA)
824  ****************************************************************************/
825 static struct resource orion_crypto_resources[] = {
826         {
827                 .name   = "regs",
828         }, {
829                 .name   = "crypto interrupt",
830         }, {
831                 .name   = "sram",
832                 .flags  = IORESOURCE_MEM,
833         },
834 };
835
836 static struct platform_device orion_crypto = {
837         .name           = "mv_crypto",
838         .id             = -1,
839 };
840
841 void __init orion_crypto_init(unsigned long mapbase,
842                               unsigned long srambase,
843                               unsigned long sram_size,
844                               unsigned long irq)
845 {
846         fill_resources_irq(&orion_crypto, orion_crypto_resources,
847                        mapbase, 0xffff, irq);
848         orion_crypto.num_resources = 3;
849         orion_crypto_resources[2].start = srambase;
850         orion_crypto_resources[2].end = srambase + sram_size - 1;
851
852         platform_device_register(&orion_crypto);
853 }