1 /* 2 * Renesas R0P7757LC0012RL Support. 3 * 4 * Copyright (C) 2009 - 2010 Renesas Solutions Corp. 5 * 6 * This file is subject to the terms and conditions of the GNU General Public 7 * License. See the file "COPYING" in the main directory of this archive 8 * for more details. 9 */ 10 11 #include <linux/init.h> 12 #include <linux/platform_device.h> 13 #include <linux/gpio.h> 14 #include <linux/irq.h> 15 #include <linux/spi/spi.h> 16 #include <linux/spi/flash.h> 17 #include <linux/io.h> 18 #include <cpu/sh7757.h> 19 #include <asm/sh_eth.h> 20 #include <asm/heartbeat.h> 21 22 static struct resource heartbeat_resource = { 23 .start = 0xffec005c, /* PUDR */ 24 .end = 0xffec005c, 25 .flags = IORESOURCE_MEM | IORESOURCE_MEM_8BIT, 26 }; 27 28 static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3 }; 29 30 static struct heartbeat_data heartbeat_data = { 31 .bit_pos = heartbeat_bit_pos, 32 .nr_bits = ARRAY_SIZE(heartbeat_bit_pos), 33 .flags = HEARTBEAT_INVERTED, 34 }; 35 36 static struct platform_device heartbeat_device = { 37 .name = "heartbeat", 38 .id = -1, 39 .dev = { 40 .platform_data = &heartbeat_data, 41 }, 42 .num_resources = 1, 43 .resource = &heartbeat_resource, 44 }; 45 46 /* Fast Ethernet */ 47 static struct resource sh_eth0_resources[] = { 48 { 49 .start = 0xfef00000, 50 .end = 0xfef001ff, 51 .flags = IORESOURCE_MEM, 52 }, { 53 .start = 84, 54 .end = 84, 55 .flags = IORESOURCE_IRQ, 56 }, 57 }; 58 59 static struct sh_eth_plat_data sh7757_eth0_pdata = { 60 .phy = 1, 61 .edmac_endian = EDMAC_LITTLE_ENDIAN, 62 }; 63 64 static struct platform_device sh7757_eth0_device = { 65 .name = "sh-eth", 66 .resource = sh_eth0_resources, 67 .id = 0, 68 .num_resources = ARRAY_SIZE(sh_eth0_resources), 69 .dev = { 70 .platform_data = &sh7757_eth0_pdata, 71 }, 72 }; 73 74 static struct resource sh_eth1_resources[] = { 75 { 76 .start = 0xfef00800, 77 .end = 0xfef009ff, 78 .flags = IORESOURCE_MEM, 79 }, { 80 .start = 84, 81 .end = 84, 82 .flags = IORESOURCE_IRQ, 83 }, 84 }; 85 86 static struct sh_eth_plat_data sh7757_eth1_pdata = { 87 .phy = 1, 88 .edmac_endian = EDMAC_LITTLE_ENDIAN, 89 }; 90 91 static struct platform_device sh7757_eth1_device = { 92 .name = "sh-eth", 93 .resource = sh_eth1_resources, 94 .id = 1, 95 .num_resources = ARRAY_SIZE(sh_eth1_resources), 96 .dev = { 97 .platform_data = &sh7757_eth1_pdata, 98 }, 99 }; 100 101 static struct platform_device *sh7757lcr_devices[] __initdata = { 102 &heartbeat_device, 103 &sh7757_eth0_device, 104 &sh7757_eth1_device, 105 }; 106 107 static int __init sh7757lcr_devices_setup(void) 108 { 109 /* RGMII (PTA) */ 110 gpio_request(GPIO_FN_ET0_MDC, NULL); 111 gpio_request(GPIO_FN_ET0_MDIO, NULL); 112 gpio_request(GPIO_FN_ET1_MDC, NULL); 113 gpio_request(GPIO_FN_ET1_MDIO, NULL); 114 115 /* ONFI (PTB, PTZ) */ 116 gpio_request(GPIO_FN_ON_NRE, NULL); 117 gpio_request(GPIO_FN_ON_NWE, NULL); 118 gpio_request(GPIO_FN_ON_NWP, NULL); 119 gpio_request(GPIO_FN_ON_NCE0, NULL); 120 gpio_request(GPIO_FN_ON_R_B0, NULL); 121 gpio_request(GPIO_FN_ON_ALE, NULL); 122 gpio_request(GPIO_FN_ON_CLE, NULL); 123 124 gpio_request(GPIO_FN_ON_DQ7, NULL); 125 gpio_request(GPIO_FN_ON_DQ6, NULL); 126 gpio_request(GPIO_FN_ON_DQ5, NULL); 127 gpio_request(GPIO_FN_ON_DQ4, NULL); 128 gpio_request(GPIO_FN_ON_DQ3, NULL); 129 gpio_request(GPIO_FN_ON_DQ2, NULL); 130 gpio_request(GPIO_FN_ON_DQ1, NULL); 131 gpio_request(GPIO_FN_ON_DQ0, NULL); 132 133 /* IRQ8 to 0 (PTB, PTC) */ 134 gpio_request(GPIO_FN_IRQ8, NULL); 135 gpio_request(GPIO_FN_IRQ7, NULL); 136 gpio_request(GPIO_FN_IRQ6, NULL); 137 gpio_request(GPIO_FN_IRQ5, NULL); 138 gpio_request(GPIO_FN_IRQ4, NULL); 139 gpio_request(GPIO_FN_IRQ3, NULL); 140 gpio_request(GPIO_FN_IRQ2, NULL); 141 gpio_request(GPIO_FN_IRQ1, NULL); 142 gpio_request(GPIO_FN_IRQ0, NULL); 143 144 /* SPI0 (PTD) */ 145 gpio_request(GPIO_FN_SP0_MOSI, NULL); 146 gpio_request(GPIO_FN_SP0_MISO, NULL); 147 gpio_request(GPIO_FN_SP0_SCK, NULL); 148 gpio_request(GPIO_FN_SP0_SCK_FB, NULL); 149 gpio_request(GPIO_FN_SP0_SS0, NULL); 150 gpio_request(GPIO_FN_SP0_SS1, NULL); 151 gpio_request(GPIO_FN_SP0_SS2, NULL); 152 gpio_request(GPIO_FN_SP0_SS3, NULL); 153 154 /* RMII 0/1 (PTE, PTF) */ 155 gpio_request(GPIO_FN_RMII0_CRS_DV, NULL); 156 gpio_request(GPIO_FN_RMII0_TXD1, NULL); 157 gpio_request(GPIO_FN_RMII0_TXD0, NULL); 158 gpio_request(GPIO_FN_RMII0_TXEN, NULL); 159 gpio_request(GPIO_FN_RMII0_REFCLK, NULL); 160 gpio_request(GPIO_FN_RMII0_RXD1, NULL); 161 gpio_request(GPIO_FN_RMII0_RXD0, NULL); 162 gpio_request(GPIO_FN_RMII0_RX_ER, NULL); 163 gpio_request(GPIO_FN_RMII1_CRS_DV, NULL); 164 gpio_request(GPIO_FN_RMII1_TXD1, NULL); 165 gpio_request(GPIO_FN_RMII1_TXD0, NULL); 166 gpio_request(GPIO_FN_RMII1_TXEN, NULL); 167 gpio_request(GPIO_FN_RMII1_REFCLK, NULL); 168 gpio_request(GPIO_FN_RMII1_RXD1, NULL); 169 gpio_request(GPIO_FN_RMII1_RXD0, NULL); 170 gpio_request(GPIO_FN_RMII1_RX_ER, NULL); 171 172 /* eMMC (PTG) */ 173 gpio_request(GPIO_FN_MMCCLK, NULL); 174 gpio_request(GPIO_FN_MMCCMD, NULL); 175 gpio_request(GPIO_FN_MMCDAT7, NULL); 176 gpio_request(GPIO_FN_MMCDAT6, NULL); 177 gpio_request(GPIO_FN_MMCDAT5, NULL); 178 gpio_request(GPIO_FN_MMCDAT4, NULL); 179 gpio_request(GPIO_FN_MMCDAT3, NULL); 180 gpio_request(GPIO_FN_MMCDAT2, NULL); 181 gpio_request(GPIO_FN_MMCDAT1, NULL); 182 gpio_request(GPIO_FN_MMCDAT0, NULL); 183 184 /* LPC (PTG, PTH, PTQ, PTU) */ 185 gpio_request(GPIO_FN_SERIRQ, NULL); 186 gpio_request(GPIO_FN_LPCPD, NULL); 187 gpio_request(GPIO_FN_LDRQ, NULL); 188 gpio_request(GPIO_FN_WP, NULL); 189 gpio_request(GPIO_FN_FMS0, NULL); 190 gpio_request(GPIO_FN_LAD3, NULL); 191 gpio_request(GPIO_FN_LAD2, NULL); 192 gpio_request(GPIO_FN_LAD1, NULL); 193 gpio_request(GPIO_FN_LAD0, NULL); 194 gpio_request(GPIO_FN_LFRAME, NULL); 195 gpio_request(GPIO_FN_LRESET, NULL); 196 gpio_request(GPIO_FN_LCLK, NULL); 197 gpio_request(GPIO_FN_LGPIO7, NULL); 198 gpio_request(GPIO_FN_LGPIO6, NULL); 199 gpio_request(GPIO_FN_LGPIO5, NULL); 200 gpio_request(GPIO_FN_LGPIO4, NULL); 201 202 /* SPI1 (PTH) */ 203 gpio_request(GPIO_FN_SP1_MOSI, NULL); 204 gpio_request(GPIO_FN_SP1_MISO, NULL); 205 gpio_request(GPIO_FN_SP1_SCK, NULL); 206 gpio_request(GPIO_FN_SP1_SCK_FB, NULL); 207 gpio_request(GPIO_FN_SP1_SS0, NULL); 208 gpio_request(GPIO_FN_SP1_SS1, NULL); 209 210 /* SDHI (PTI) */ 211 gpio_request(GPIO_FN_SD_WP, NULL); 212 gpio_request(GPIO_FN_SD_CD, NULL); 213 gpio_request(GPIO_FN_SD_CLK, NULL); 214 gpio_request(GPIO_FN_SD_CMD, NULL); 215 gpio_request(GPIO_FN_SD_D3, NULL); 216 gpio_request(GPIO_FN_SD_D2, NULL); 217 gpio_request(GPIO_FN_SD_D1, NULL); 218 gpio_request(GPIO_FN_SD_D0, NULL); 219 220 /* SCIF3/4 (PTJ, PTW) */ 221 gpio_request(GPIO_FN_RTS3, NULL); 222 gpio_request(GPIO_FN_CTS3, NULL); 223 gpio_request(GPIO_FN_TXD3, NULL); 224 gpio_request(GPIO_FN_RXD3, NULL); 225 gpio_request(GPIO_FN_RTS4, NULL); 226 gpio_request(GPIO_FN_RXD4, NULL); 227 gpio_request(GPIO_FN_TXD4, NULL); 228 gpio_request(GPIO_FN_CTS4, NULL); 229 230 /* SERMUX (PTK, PTL, PTO, PTV) */ 231 gpio_request(GPIO_FN_COM2_TXD, NULL); 232 gpio_request(GPIO_FN_COM2_RXD, NULL); 233 gpio_request(GPIO_FN_COM2_RTS, NULL); 234 gpio_request(GPIO_FN_COM2_CTS, NULL); 235 gpio_request(GPIO_FN_COM2_DTR, NULL); 236 gpio_request(GPIO_FN_COM2_DSR, NULL); 237 gpio_request(GPIO_FN_COM2_DCD, NULL); 238 gpio_request(GPIO_FN_COM2_RI, NULL); 239 gpio_request(GPIO_FN_RAC_RXD, NULL); 240 gpio_request(GPIO_FN_RAC_RTS, NULL); 241 gpio_request(GPIO_FN_RAC_CTS, NULL); 242 gpio_request(GPIO_FN_RAC_DTR, NULL); 243 gpio_request(GPIO_FN_RAC_DSR, NULL); 244 gpio_request(GPIO_FN_RAC_DCD, NULL); 245 gpio_request(GPIO_FN_RAC_TXD, NULL); 246 gpio_request(GPIO_FN_COM1_TXD, NULL); 247 gpio_request(GPIO_FN_COM1_RXD, NULL); 248 gpio_request(GPIO_FN_COM1_RTS, NULL); 249 gpio_request(GPIO_FN_COM1_CTS, NULL); 250 251 writeb(0x10, 0xfe470000); /* SMR0: SerMux mode 0 */ 252 253 /* IIC (PTM, PTR, PTS) */ 254 gpio_request(GPIO_FN_SDA7, NULL); 255 gpio_request(GPIO_FN_SCL7, NULL); 256 gpio_request(GPIO_FN_SDA6, NULL); 257 gpio_request(GPIO_FN_SCL6, NULL); 258 gpio_request(GPIO_FN_SDA5, NULL); 259 gpio_request(GPIO_FN_SCL5, NULL); 260 gpio_request(GPIO_FN_SDA4, NULL); 261 gpio_request(GPIO_FN_SCL4, NULL); 262 gpio_request(GPIO_FN_SDA3, NULL); 263 gpio_request(GPIO_FN_SCL3, NULL); 264 gpio_request(GPIO_FN_SDA2, NULL); 265 gpio_request(GPIO_FN_SCL2, NULL); 266 gpio_request(GPIO_FN_SDA1, NULL); 267 gpio_request(GPIO_FN_SCL1, NULL); 268 gpio_request(GPIO_FN_SDA0, NULL); 269 gpio_request(GPIO_FN_SCL0, NULL); 270 271 /* USB (PTN) */ 272 gpio_request(GPIO_FN_VBUS_EN, NULL); 273 gpio_request(GPIO_FN_VBUS_OC, NULL); 274 275 /* SGPIO1/0 (PTN, PTO) */ 276 gpio_request(GPIO_FN_SGPIO1_CLK, NULL); 277 gpio_request(GPIO_FN_SGPIO1_LOAD, NULL); 278 gpio_request(GPIO_FN_SGPIO1_DI, NULL); 279 gpio_request(GPIO_FN_SGPIO1_DO, NULL); 280 gpio_request(GPIO_FN_SGPIO0_CLK, NULL); 281 gpio_request(GPIO_FN_SGPIO0_LOAD, NULL); 282 gpio_request(GPIO_FN_SGPIO0_DI, NULL); 283 gpio_request(GPIO_FN_SGPIO0_DO, NULL); 284 285 /* WDT (PTN) */ 286 gpio_request(GPIO_FN_SUB_CLKIN, NULL); 287 288 /* System (PTT) */ 289 gpio_request(GPIO_FN_STATUS1, NULL); 290 gpio_request(GPIO_FN_STATUS0, NULL); 291 292 /* PWMX (PTT) */ 293 gpio_request(GPIO_FN_PWMX1, NULL); 294 gpio_request(GPIO_FN_PWMX0, NULL); 295 296 /* R-SPI (PTV) */ 297 gpio_request(GPIO_FN_R_SPI_MOSI, NULL); 298 gpio_request(GPIO_FN_R_SPI_MISO, NULL); 299 gpio_request(GPIO_FN_R_SPI_RSPCK, NULL); 300 gpio_request(GPIO_FN_R_SPI_SSL0, NULL); 301 gpio_request(GPIO_FN_R_SPI_SSL1, NULL); 302 303 /* EVC (PTV, PTW) */ 304 gpio_request(GPIO_FN_EVENT7, NULL); 305 gpio_request(GPIO_FN_EVENT6, NULL); 306 gpio_request(GPIO_FN_EVENT5, NULL); 307 gpio_request(GPIO_FN_EVENT4, NULL); 308 gpio_request(GPIO_FN_EVENT3, NULL); 309 gpio_request(GPIO_FN_EVENT2, NULL); 310 gpio_request(GPIO_FN_EVENT1, NULL); 311 gpio_request(GPIO_FN_EVENT0, NULL); 312 313 /* LED for heartbeat */ 314 gpio_request(GPIO_PTU3, NULL); 315 gpio_direction_output(GPIO_PTU3, 1); 316 gpio_request(GPIO_PTU2, NULL); 317 gpio_direction_output(GPIO_PTU2, 1); 318 gpio_request(GPIO_PTU1, NULL); 319 gpio_direction_output(GPIO_PTU1, 1); 320 gpio_request(GPIO_PTU0, NULL); 321 gpio_direction_output(GPIO_PTU0, 1); 322 323 /* control for MDIO of Gigabit Ethernet */ 324 gpio_request(GPIO_PTT4, NULL); 325 gpio_direction_output(GPIO_PTT4, 1); 326 327 /* control for eMMC */ 328 gpio_request(GPIO_PTT7, NULL); /* eMMC_RST# */ 329 gpio_direction_output(GPIO_PTT7, 0); 330 gpio_request(GPIO_PTT6, NULL); /* eMMC_INDEX# */ 331 gpio_direction_output(GPIO_PTT6, 0); 332 gpio_request(GPIO_PTT5, NULL); /* eMMC_PRST# */ 333 gpio_direction_output(GPIO_PTT5, 1); 334 335 /* General platform */ 336 return platform_add_devices(sh7757lcr_devices, 337 ARRAY_SIZE(sh7757lcr_devices)); 338 } 339 arch_initcall(sh7757lcr_devices_setup); 340 341 /* Initialize IRQ setting */ 342 void __init init_sh7757lcr_IRQ(void) 343 { 344 plat_irq_setup_pins(IRQ_MODE_IRQ7654); 345 plat_irq_setup_pins(IRQ_MODE_IRQ3210); 346 } 347 348 /* Initialize the board */ 349 static void __init sh7757lcr_setup(char **cmdline_p) 350 { 351 printk(KERN_INFO "Renesas R0P7757LC0012RL support.\n"); 352 } 353 354 static int sh7757lcr_mode_pins(void) 355 { 356 int value = 0; 357 358 /* These are the factory default settings of S3 (Low active). 359 * If you change these dip switches then you will need to 360 * adjust the values below as well. 361 */ 362 value |= MODE_PIN0; /* Clock Mode: 1 */ 363 364 return value; 365 } 366 367 /* The Machine Vector */ 368 static struct sh_machine_vector mv_sh7757lcr __initmv = { 369 .mv_name = "SH7757LCR", 370 .mv_setup = sh7757lcr_setup, 371 .mv_init_irq = init_sh7757lcr_IRQ, 372 .mv_mode_pins = sh7757lcr_mode_pins, 373 }; 374 375