1/* 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 41#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 88int __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 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; 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); 112