Blame view
arch/arm/mach-orion5x/rd88f5182-setup.c
7.59 KB
817eb2109 [ARM] OrionNAS RD... |
1 |
/* |
9dd0b194b Orion: orion -> o... |
2 |
* arch/arm/mach-orion5x/rd88f5182-setup.c |
817eb2109 [ARM] OrionNAS RD... |
3 4 5 6 7 |
* * Marvell Orion-NAS Reference Design Setup * * Maintainer: Ronen Shitrit <rshitrit@marvell.com> * |
159ffb3a0 Orion: general cl... |
8 9 |
* This file is licensed under the terms of the GNU General Public * License version 2. This program is licensed "as is" without any |
817eb2109 [ARM] OrionNAS RD... |
10 11 |
* warranty of any kind, whether express or implied. */ |
2f8163baa ARM: gpio: conver... |
12 |
#include <linux/gpio.h> |
817eb2109 [ARM] OrionNAS RD... |
13 14 15 16 17 18 19 |
#include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> #include <linux/pci.h> #include <linux/irq.h> #include <linux/mtd/physmap.h> #include <linux/mv643xx_eth.h> |
f244baa3c [ARM] Orion: Use ... |
20 |
#include <linux/ata_platform.h> |
817eb2109 [ARM] OrionNAS RD... |
21 22 |
#include <linux/i2c.h> #include <asm/mach-types.h> |
817eb2109 [ARM] OrionNAS RD... |
23 24 25 |
#include <asm/leds.h> #include <asm/mach/arch.h> #include <asm/mach/pci.h> |
a09e64fbc [ARM] Move includ... |
26 |
#include <mach/orion5x.h> |
817eb2109 [ARM] OrionNAS RD... |
27 |
#include "common.h" |
19cfd5c09 [ARM] Orion: rewo... |
28 |
#include "mpp.h" |
817eb2109 [ARM] OrionNAS RD... |
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
/***************************************************************************** * RD-88F5182 Info ****************************************************************************/ /* * 512K NOR flash Device bus boot chip select */ #define RD88F5182_NOR_BOOT_BASE 0xf4000000 #define RD88F5182_NOR_BOOT_SIZE SZ_512K /* * 16M NOR flash on Device bus chip select 1 */ #define RD88F5182_NOR_BASE 0xfc000000 #define RD88F5182_NOR_SIZE SZ_16M /* * PCI */ #define RD88F5182_PCI_SLOT0_OFFS 7 #define RD88F5182_PCI_SLOT0_IRQ_A_PIN 7 #define RD88F5182_PCI_SLOT0_IRQ_B_PIN 6 /* * GPIO Debug LED */ #define RD88F5182_GPIO_DBG_LED 0 /***************************************************************************** * 16M NOR Flash on Device bus CS1 ****************************************************************************/ static struct physmap_flash_data rd88f5182_nor_flash_data = { .width = 1, }; static struct resource rd88f5182_nor_flash_resource = { .flags = IORESOURCE_MEM, .start = RD88F5182_NOR_BASE, .end = RD88F5182_NOR_BASE + RD88F5182_NOR_SIZE - 1, }; static struct platform_device rd88f5182_nor_flash = { .name = "physmap-flash", .id = 0, .dev = { .platform_data = &rd88f5182_nor_flash_data, }, .num_resources = 1, .resource = &rd88f5182_nor_flash_resource, }; #ifdef CONFIG_LEDS /***************************************************************************** * Use GPIO debug led as CPU active indication ****************************************************************************/ static void rd88f5182_dbgled_event(led_event_t evt) { int val; if (evt == led_idle_end) val = 1; else if (evt == led_idle_start) val = 0; else return; gpio_set_value(RD88F5182_GPIO_DBG_LED, val); } static int __init rd88f5182_dbgled_init(void) { int pin; if (machine_is_rd88f5182()) { pin = RD88F5182_GPIO_DBG_LED; if (gpio_request(pin, "DBGLED") == 0) { if (gpio_direction_output(pin, 0) != 0) { printk(KERN_ERR "rd88f5182_dbgled_init failed " "to set output pin %d ", pin); gpio_free(pin); return 0; } } else { printk(KERN_ERR "rd88f5182_dbgled_init failed " "to request gpio %d ", pin); return 0; } leds_event = rd88f5182_dbgled_event; } |
e7068ad33 [ARM] Orion: fix ... |
130 |
|
817eb2109 [ARM] OrionNAS RD... |
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
return 0; } __initcall(rd88f5182_dbgled_init); #endif /***************************************************************************** * PCI ****************************************************************************/ void __init rd88f5182_pci_preinit(void) { int pin; /* * Configure PCI GPIO IRQ pins */ pin = RD88F5182_PCI_SLOT0_IRQ_A_PIN; if (gpio_request(pin, "PCI IntA") == 0) { if (gpio_direction_input(pin) == 0) { |
6845664a6 arm: Cleanup the ... |
152 |
irq_set_irq_type(gpio_to_irq(pin), IRQ_TYPE_LEVEL_LOW); |
817eb2109 [ARM] OrionNAS RD... |
153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
} else { printk(KERN_ERR "rd88f5182_pci_preinit faield to " "set_irq_type pin %d ", pin); gpio_free(pin); } } else { printk(KERN_ERR "rd88f5182_pci_preinit failed to request gpio %d ", pin); } pin = RD88F5182_PCI_SLOT0_IRQ_B_PIN; if (gpio_request(pin, "PCI IntB") == 0) { if (gpio_direction_input(pin) == 0) { |
6845664a6 arm: Cleanup the ... |
167 |
irq_set_irq_type(gpio_to_irq(pin), IRQ_TYPE_LEVEL_LOW); |
817eb2109 [ARM] OrionNAS RD... |
168 169 170 171 172 173 174 175 176 177 178 |
} else { printk(KERN_ERR "rd88f5182_pci_preinit faield to " "set_irq_type pin %d ", pin); gpio_free(pin); } } else { printk(KERN_ERR "rd88f5182_pci_preinit failed to gpio_request %d ", pin); } } |
d5341942d PCI: Make the str... |
179 180 |
static int __init rd88f5182_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) |
817eb2109 [ARM] OrionNAS RD... |
181 |
{ |
92b913b08 [ARM] Orion: fix ... |
182 |
int irq; |
817eb2109 [ARM] OrionNAS RD... |
183 |
/* |
92b913b08 [ARM] Orion: fix ... |
184 |
* Check for devices with hard-wired IRQs. |
817eb2109 [ARM] OrionNAS RD... |
185 |
*/ |
92b913b08 [ARM] Orion: fix ... |
186 187 188 |
irq = orion5x_pci_map_irq(dev, slot, pin); if (irq != -1) return irq; |
817eb2109 [ARM] OrionNAS RD... |
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
/* * PCI IRQs are connected via GPIOs */ switch (slot - RD88F5182_PCI_SLOT0_OFFS) { case 0: if (pin == 1) return gpio_to_irq(RD88F5182_PCI_SLOT0_IRQ_A_PIN); else return gpio_to_irq(RD88F5182_PCI_SLOT0_IRQ_B_PIN); default: return -1; } } static struct hw_pci rd88f5182_pci __initdata = { .nr_controllers = 2, .preinit = rd88f5182_pci_preinit, .swizzle = pci_std_swizzle, |
9dd0b194b Orion: orion -> o... |
208 209 |
.setup = orion5x_pci_sys_setup, .scan = orion5x_pci_sys_scan_bus, |
817eb2109 [ARM] OrionNAS RD... |
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
.map_irq = rd88f5182_pci_map_irq, }; static int __init rd88f5182_pci_init(void) { if (machine_is_rd88f5182()) pci_common_init(&rd88f5182_pci); return 0; } subsys_initcall(rd88f5182_pci_init); /***************************************************************************** * Ethernet ****************************************************************************/ static struct mv643xx_eth_platform_data rd88f5182_eth_data = { |
ac840605f mv643xx_eth: remo... |
228 |
.phy_addr = MV643XX_ETH_PHY_ADDR(8), |
817eb2109 [ARM] OrionNAS RD... |
229 230 231 232 233 234 |
}; /***************************************************************************** * RTC DS1338 on I2C bus ****************************************************************************/ static struct i2c_board_info __initdata rd88f5182_i2c_rtc = { |
3760f7367 i2c: Convert most... |
235 |
I2C_BOARD_INFO("ds1338", 0x68), |
817eb2109 [ARM] OrionNAS RD... |
236 237 238 |
}; /***************************************************************************** |
f244baa3c [ARM] Orion: Use ... |
239 240 241 |
* Sata ****************************************************************************/ static struct mv_sata_platform_data rd88f5182_sata_data = { |
e7068ad33 [ARM] Orion: fix ... |
242 |
.n_ports = 2, |
f244baa3c [ARM] Orion: Use ... |
243 244 245 |
}; /***************************************************************************** |
817eb2109 [ARM] OrionNAS RD... |
246 247 |
* General Setup ****************************************************************************/ |
554cdaefd ARM: orion5x: Ref... |
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
static unsigned int rd88f5182_mpp_modes[] __initdata = { MPP0_GPIO, /* Debug Led */ MPP1_GPIO, /* Reset Switch */ MPP2_UNUSED, MPP3_GPIO, /* RTC Int */ MPP4_GPIO, MPP5_GPIO, MPP6_GPIO, /* PCI_intA */ MPP7_GPIO, /* PCI_intB */ MPP8_UNUSED, MPP9_UNUSED, MPP10_UNUSED, MPP11_UNUSED, MPP12_SATA_LED, /* SATA 0 presence */ MPP13_SATA_LED, /* SATA 1 presence */ MPP14_SATA_LED, /* SATA 0 active */ MPP15_SATA_LED, /* SATA 1 active */ MPP16_UNUSED, MPP17_UNUSED, MPP18_UNUSED, MPP19_UNUSED, 0, |
19cfd5c09 [ARM] Orion: rewo... |
270 |
}; |
817eb2109 [ARM] OrionNAS RD... |
271 272 273 274 275 |
static void __init rd88f5182_init(void) { /* * Setup basic Orion functions. Need to be called early. */ |
9dd0b194b Orion: orion -> o... |
276 |
orion5x_init(); |
817eb2109 [ARM] OrionNAS RD... |
277 |
|
19cfd5c09 [ARM] Orion: rewo... |
278 |
orion5x_mpp_conf(rd88f5182_mpp_modes); |
817eb2109 [ARM] OrionNAS RD... |
279 |
/* |
817eb2109 [ARM] OrionNAS RD... |
280 281 282 283 284 285 286 |
* MPP[20] PCI Clock to MV88F5182 * MPP[21] PCI Clock to mini PCI CON11 * MPP[22] USB 0 over current indication * MPP[23] USB 1 over current indication * MPP[24] USB 1 over current enable * MPP[25] USB 0 over current enable */ |
044f6c7c4 [ARM] Orion: move... |
287 288 289 290 291 |
/* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); |
9dd0b194b Orion: orion -> o... |
292 |
orion5x_eth_init(&rd88f5182_eth_data); |
044f6c7c4 [ARM] Orion: move... |
293 |
orion5x_i2c_init(); |
9dd0b194b Orion: orion -> o... |
294 |
orion5x_sata_init(&rd88f5182_sata_data); |
044f6c7c4 [ARM] Orion: move... |
295 |
orion5x_uart0_init(); |
1d5a1a6e9 [ARM] Orion: Inst... |
296 |
orion5x_xor_init(); |
044f6c7c4 [ARM] Orion: move... |
297 298 299 300 301 302 303 304 |
orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, RD88F5182_NOR_BOOT_SIZE); orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); platform_device_register(&rd88f5182_nor_flash); i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); |
817eb2109 [ARM] OrionNAS RD... |
305 306 307 308 |
} MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") /* Maintainer: Ronen Shitrit <rshitrit@marvell.com> */ |
65aa1b1ea ARM: mach-orion5x... |
309 |
.atag_offset = 0x100, |
817eb2109 [ARM] OrionNAS RD... |
310 |
.init_machine = rd88f5182_init, |
9dd0b194b Orion: orion -> o... |
311 |
.map_io = orion5x_map_io, |
4ee1f6b57 ARM: Remove depen... |
312 |
.init_early = orion5x_init_early, |
9dd0b194b Orion: orion -> o... |
313 314 |
.init_irq = orion5x_init_irq, .timer = &orion5x_timer, |
764cbcc2e ARM: restart: ori... |
315 |
.restart = orion5x_restart, |
817eb2109 [ARM] OrionNAS RD... |
316 |
MACHINE_END |