]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * arch/ppc/platforms/chrp_pegasos_eth.c | |
3 | * | |
4 | * Copyright (C) 2005 Sven Luther <sl@bplan-gmbh.de> | |
5 | * Thanks to : | |
6 | * Dale Farnsworth <dale@farnsworth.org> | |
7 | * Mark A. Greer <mgreer@mvista.com> | |
8 | * Nicolas DET <nd@bplan-gmbh.de> | |
9 | * Benjamin Herrenschmidt <benh@kernel.crashing.org> | |
10 | * And anyone else who helped me on this. | |
11 | */ | |
12 | ||
13 | #include <linux/types.h> | |
14 | #include <linux/init.h> | |
15 | #include <linux/ioport.h> | |
d052d1be | 16 | #include <linux/platform_device.h> |
1da177e4 LT |
17 | #include <linux/mv643xx.h> |
18 | #include <linux/pci.h> | |
19 | ||
20 | /* Pegasos 2 specific Marvell MV 64361 gigabit ethernet port setup */ | |
21 | static struct resource mv643xx_eth_shared_resources[] = { | |
22 | [0] = { | |
23 | .name = "ethernet shared base", | |
24 | .start = 0xf1000000 + MV643XX_ETH_SHARED_REGS, | |
25 | .end = 0xf1000000 + MV643XX_ETH_SHARED_REGS + | |
26 | MV643XX_ETH_SHARED_REGS_SIZE - 1, | |
27 | .flags = IORESOURCE_MEM, | |
28 | }, | |
29 | }; | |
30 | ||
31 | static struct platform_device mv643xx_eth_shared_device = { | |
32 | .name = MV643XX_ETH_SHARED_NAME, | |
33 | .id = 0, | |
34 | .num_resources = ARRAY_SIZE(mv643xx_eth_shared_resources), | |
35 | .resource = mv643xx_eth_shared_resources, | |
36 | }; | |
37 | ||
38 | static struct resource mv643xx_eth0_resources[] = { | |
39 | [0] = { | |
40 | .name = "eth0 irq", | |
41 | .start = 9, | |
42 | .end = 9, | |
43 | .flags = IORESOURCE_IRQ, | |
44 | }, | |
45 | }; | |
46 | ||
47 | static struct mv643xx_eth_platform_data eth0_pd; | |
48 | ||
49 | static struct platform_device eth0_device = { | |
50 | .name = MV643XX_ETH_NAME, | |
51 | .id = 0, | |
52 | .num_resources = ARRAY_SIZE(mv643xx_eth0_resources), | |
53 | .resource = mv643xx_eth0_resources, | |
54 | .dev = { | |
55 | .platform_data = ð0_pd, | |
56 | }, | |
57 | }; | |
58 | ||
59 | static struct resource mv643xx_eth1_resources[] = { | |
60 | [0] = { | |
61 | .name = "eth1 irq", | |
62 | .start = 9, | |
63 | .end = 9, | |
64 | .flags = IORESOURCE_IRQ, | |
65 | }, | |
66 | }; | |
67 | ||
68 | static struct mv643xx_eth_platform_data eth1_pd; | |
69 | ||
70 | static struct platform_device eth1_device = { | |
71 | .name = MV643XX_ETH_NAME, | |
72 | .id = 1, | |
73 | .num_resources = ARRAY_SIZE(mv643xx_eth1_resources), | |
74 | .resource = mv643xx_eth1_resources, | |
75 | .dev = { | |
76 | .platform_data = ð1_pd, | |
77 | }, | |
78 | }; | |
79 | ||
80 | static struct platform_device *mv643xx_eth_pd_devs[] __initdata = { | |
81 | &mv643xx_eth_shared_device, | |
82 | ð0_device, | |
83 | ð1_device, | |
84 | }; | |
85 | ||
86 | ||
87 | int | |
88 | mv643xx_eth_add_pds(void) | |
89 | { | |
90 | int ret = 0; | |
91 | static struct pci_device_id pci_marvell_mv64360[] = { | |
92 | { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, PCI_DEVICE_ID_MARVELL_MV64360) }, | |
93 | { } | |
94 | }; | |
95 | ||
96 | if (pci_dev_present(pci_marvell_mv64360)) { | |
97 | ret = platform_add_devices(mv643xx_eth_pd_devs, ARRAY_SIZE(mv643xx_eth_pd_devs)); | |
98 | } | |
99 | return ret; | |
100 | } | |
101 | device_initcall(mv643xx_eth_add_pds); |