2 * The setup file for ethernet related hardware on PMC-Sierra MSP processors.
4 * Copyright 2010 PMC-Sierra, Inc.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
11 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
12 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
14 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
15 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
17 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
18 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
19 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
20 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22 * You should have received a copy of the GNU General Public License along
23 * with this program; if not, write to the Free Software Foundation, Inc.,
24 * 675 Mass Ave, Cambridge, MA 02139, USA.
27 #include <linux/init.h>
28 #include <linux/kernel.h>
29 #include <linux/ioport.h>
30 #include <linux/platform_device.h>
31 #include <linux/delay.h>
34 #include <msp_gpio_macros.h>
37 #define MSP_ETHERNET_GPIO0 14
38 #define MSP_ETHERNET_GPIO1 15
39 #define MSP_ETHERNET_GPIO2 16
41 #ifdef CONFIG_MSP_HAS_TSMAC
42 #define MSP_TSMAC_SIZE 0x10020
43 #define MSP_TSMAC_ID "pmc_tsmac"
45 static struct resource msp_tsmac0_resources
[] = {
47 .start
= MSP_MAC0_BASE
,
48 .end
= MSP_MAC0_BASE
+ MSP_TSMAC_SIZE
- 1,
49 .flags
= IORESOURCE_MEM
,
52 .start
= MSP_INT_MAC0
,
54 .flags
= IORESOURCE_IRQ
,
58 static struct resource msp_tsmac1_resources
[] = {
60 .start
= MSP_MAC1_BASE
,
61 .end
= MSP_MAC1_BASE
+ MSP_TSMAC_SIZE
- 1,
62 .flags
= IORESOURCE_MEM
,
65 .start
= MSP_INT_MAC1
,
67 .flags
= IORESOURCE_IRQ
,
70 static struct resource msp_tsmac2_resources
[] = {
72 .start
= MSP_MAC2_BASE
,
73 .end
= MSP_MAC2_BASE
+ MSP_TSMAC_SIZE
- 1,
74 .flags
= IORESOURCE_MEM
,
79 .flags
= IORESOURCE_IRQ
,
84 static struct platform_device tsmac_device
[] = {
88 .num_resources
= ARRAY_SIZE(msp_tsmac0_resources
),
89 .resource
= msp_tsmac0_resources
,
94 .num_resources
= ARRAY_SIZE(msp_tsmac1_resources
),
95 .resource
= msp_tsmac1_resources
,
100 .num_resources
= ARRAY_SIZE(msp_tsmac2_resources
),
101 .resource
= msp_tsmac2_resources
,
104 #define msp_eth_devs tsmac_device
107 /* If it is not TSMAC assume MSP_ETH (100Mbps) */
108 #define MSP_ETH_ID "pmc_mspeth"
109 #define MSP_ETH_SIZE 0xE0
110 static struct resource msp_eth0_resources
[] = {
112 .start
= MSP_MAC0_BASE
,
113 .end
= MSP_MAC0_BASE
+ MSP_ETH_SIZE
- 1,
114 .flags
= IORESOURCE_MEM
,
117 .start
= MSP_INT_MAC0
,
119 .flags
= IORESOURCE_IRQ
,
123 static struct resource msp_eth1_resources
[] = {
125 .start
= MSP_MAC1_BASE
,
126 .end
= MSP_MAC1_BASE
+ MSP_ETH_SIZE
- 1,
127 .flags
= IORESOURCE_MEM
,
130 .start
= MSP_INT_MAC1
,
132 .flags
= IORESOURCE_IRQ
,
138 static struct platform_device mspeth_device
[] = {
142 .num_resources
= ARRAY_SIZE(msp_eth0_resources
),
143 .resource
= msp_eth0_resources
,
148 .num_resources
= ARRAY_SIZE(msp_eth1_resources
),
149 .resource
= msp_eth1_resources
,
153 #define msp_eth_devs mspeth_device
156 int __init
msp_eth_setup(void)
160 /* Configure the GPIO and take the ethernet PHY out of reset */
161 msp_gpio_pin_mode(MSP_GPIO_OUTPUT
, MSP_ETHERNET_GPIO0
);
162 msp_gpio_pin_hi(MSP_ETHERNET_GPIO0
);
164 #ifdef CONFIG_MSP_HAS_TSMAC
165 /* 3 phys on boards with TSMAC */
166 msp_gpio_pin_mode(MSP_GPIO_OUTPUT
, MSP_ETHERNET_GPIO1
);
167 msp_gpio_pin_hi(MSP_ETHERNET_GPIO1
);
169 msp_gpio_pin_mode(MSP_GPIO_OUTPUT
, MSP_ETHERNET_GPIO2
);
170 msp_gpio_pin_hi(MSP_ETHERNET_GPIO2
);
172 for (i
= 0; i
< ARRAY_SIZE(msp_eth_devs
); i
++) {
173 ret
= platform_device_register(&msp_eth_devs
[i
]);
174 printk(KERN_INFO
"device: %d, return value = %d\n", i
, ret
);
176 platform_device_unregister(&msp_eth_devs
[i
]);
182 printk(KERN_WARNING
"Could not initialize "
183 "MSPETH device structures.\n");
187 subsys_initcall(msp_eth_setup
);