Linux 4.1.18
[linux/fpc-iii.git] / arch / mips / pmcs-msp71xx / msp_eth.c
blob15679b427f4404bba2efc90941bfe9b2e0d3c128
1 /*
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>
32 #include <msp_regs.h>
33 #include <msp_int.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 #define MSP_ETH_ID "pmc_mspeth"
42 #define MSP_ETH_SIZE 0xE0
43 static struct resource msp_eth0_resources[] = {
44 [0] = {
45 .start = MSP_MAC0_BASE,
46 .end = MSP_MAC0_BASE + MSP_ETH_SIZE - 1,
47 .flags = IORESOURCE_MEM,
49 [1] = {
50 .start = MSP_INT_MAC0,
51 .end = MSP_INT_MAC0,
52 .flags = IORESOURCE_IRQ,
56 static struct resource msp_eth1_resources[] = {
57 [0] = {
58 .start = MSP_MAC1_BASE,
59 .end = MSP_MAC1_BASE + MSP_ETH_SIZE - 1,
60 .flags = IORESOURCE_MEM,
62 [1] = {
63 .start = MSP_INT_MAC1,
64 .end = MSP_INT_MAC1,
65 .flags = IORESOURCE_IRQ,
71 static struct platform_device mspeth_device[] = {
72 [0] = {
73 .name = MSP_ETH_ID,
74 .id = 0,
75 .num_resources = ARRAY_SIZE(msp_eth0_resources),
76 .resource = msp_eth0_resources,
78 [1] = {
79 .name = MSP_ETH_ID,
80 .id = 1,
81 .num_resources = ARRAY_SIZE(msp_eth1_resources),
82 .resource = msp_eth1_resources,
86 #define msp_eth_devs mspeth_device
88 int __init msp_eth_setup(void)
90 int i, ret = 0;
92 /* Configure the GPIO and take the ethernet PHY out of reset */
93 msp_gpio_pin_mode(MSP_GPIO_OUTPUT, MSP_ETHERNET_GPIO0);
94 msp_gpio_pin_hi(MSP_ETHERNET_GPIO0);
96 for (i = 0; i < ARRAY_SIZE(msp_eth_devs); i++) {
97 ret = platform_device_register(&msp_eth_devs[i]);
98 printk(KERN_INFO "device: %d, return value = %d\n", i, ret);
99 if (ret) {
100 platform_device_unregister(&msp_eth_devs[i]);
101 break;
105 if (ret)
106 printk(KERN_WARNING "Could not initialize "
107 "MSPETH device structures.\n");
109 return ret;
111 subsys_initcall(msp_eth_setup);