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> 16 #include <linux/device.h> 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); 102