blob: 15679b427f4404bba2efc90941bfe9b2e0d3c128 [file] [log] [blame]
Anoop P Aec9ac742011-01-25 23:24:09 +05301/*
2 * The setup file for ethernet related hardware on PMC-Sierra MSP processors.
3 *
4 * Copyright 2010 PMC-Sierra, Inc.
5 *
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.
10 *
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.
21 *
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.
25 */
26
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>
35
36
37#define MSP_ETHERNET_GPIO0 14
38#define MSP_ETHERNET_GPIO1 15
39#define MSP_ETHERNET_GPIO2 16
40
Anoop P Aec9ac742011-01-25 23:24:09 +053041#define MSP_ETH_ID "pmc_mspeth"
42#define MSP_ETH_SIZE 0xE0
43static 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,
48 },
49 [1] = {
50 .start = MSP_INT_MAC0,
51 .end = MSP_INT_MAC0,
52 .flags = IORESOURCE_IRQ,
53 },
54};
55
56static 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,
61 },
62 [1] = {
63 .start = MSP_INT_MAC1,
64 .end = MSP_INT_MAC1,
65 .flags = IORESOURCE_IRQ,
66 },
67};
68
69
70
71static 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,
77 },
78 [1] = {
79 .name = MSP_ETH_ID,
80 .id = 1,
81 .num_resources = ARRAY_SIZE(msp_eth1_resources),
82 .resource = msp_eth1_resources,
83 },
84
85};
86#define msp_eth_devs mspeth_device
87
Anoop P Aec9ac742011-01-25 23:24:09 +053088int __init msp_eth_setup(void)
89{
90 int i, ret = 0;
91
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);
95
Anoop P Aec9ac742011-01-25 23:24:09 +053096 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;
102 }
103 }
104
105 if (ret)
106 printk(KERN_WARNING "Could not initialize "
107 "MSPETH device structures.\n");
108
109 return ret;
110}
111subsys_initcall(msp_eth_setup);