fsl_soc.c (d4429f608abde89e8bc1e24b43cd503feb95c496) | fsl_soc.c (126512e3f274802ca65ebeca8660237f0361ad48) |
---|---|
1/* 2 * FSL SoC setup code 3 * 4 * Maintained by Kumar Gala (see MAINTAINERS for contact information) 5 * 6 * 2006 (c) MontaVista Software, Inc. 7 * Vitaly Bordug <vbordug@ru.mvista.com> 8 * --- 195 unchanged lines hidden (view full) --- 204 } 205 } 206 207 return 0; 208} 209arch_initcall(of_add_fixed_phys); 210#endif /* CONFIG_FIXED_PHY */ 211 | 1/* 2 * FSL SoC setup code 3 * 4 * Maintained by Kumar Gala (see MAINTAINERS for contact information) 5 * 6 * 2006 (c) MontaVista Software, Inc. 7 * Vitaly Bordug <vbordug@ru.mvista.com> 8 * --- 195 unchanged lines hidden (view full) --- 204 } 205 } 206 207 return 0; 208} 209arch_initcall(of_add_fixed_phys); 210#endif /* CONFIG_FIXED_PHY */ 211 |
212static enum fsl_usb2_phy_modes determine_usb_phy(const char *phy_type) 213{ 214 if (!phy_type) 215 return FSL_USB2_PHY_NONE; 216 if (!strcasecmp(phy_type, "ulpi")) 217 return FSL_USB2_PHY_ULPI; 218 if (!strcasecmp(phy_type, "utmi")) 219 return FSL_USB2_PHY_UTMI; 220 if (!strcasecmp(phy_type, "utmi_wide")) 221 return FSL_USB2_PHY_UTMI_WIDE; 222 if (!strcasecmp(phy_type, "serial")) 223 return FSL_USB2_PHY_SERIAL; 224 225 return FSL_USB2_PHY_NONE; 226} 227 228static int __init fsl_usb_of_init(void) 229{ 230 struct device_node *np; 231 unsigned int i = 0; 232 struct platform_device *usb_dev_mph = NULL, *usb_dev_dr_host = NULL, 233 *usb_dev_dr_client = NULL; 234 int ret; 235 236 for_each_compatible_node(np, NULL, "fsl-usb2-mph") { 237 struct resource r[2]; 238 struct fsl_usb2_platform_data usb_data; 239 const unsigned char *prop = NULL; 240 241 memset(&r, 0, sizeof(r)); 242 memset(&usb_data, 0, sizeof(usb_data)); 243 244 ret = of_address_to_resource(np, 0, &r[0]); 245 if (ret) 246 goto err; 247 248 of_irq_to_resource(np, 0, &r[1]); 249 250 usb_dev_mph = 251 platform_device_register_simple("fsl-ehci", i, r, 2); 252 if (IS_ERR(usb_dev_mph)) { 253 ret = PTR_ERR(usb_dev_mph); 254 goto err; 255 } 256 257 usb_dev_mph->dev.coherent_dma_mask = 0xffffffffUL; 258 usb_dev_mph->dev.dma_mask = &usb_dev_mph->dev.coherent_dma_mask; 259 260 usb_data.operating_mode = FSL_USB2_MPH_HOST; 261 262 prop = of_get_property(np, "port0", NULL); 263 if (prop) 264 usb_data.port_enables |= FSL_USB2_PORT0_ENABLED; 265 266 prop = of_get_property(np, "port1", NULL); 267 if (prop) 268 usb_data.port_enables |= FSL_USB2_PORT1_ENABLED; 269 270 prop = of_get_property(np, "phy_type", NULL); 271 usb_data.phy_mode = determine_usb_phy(prop); 272 273 ret = 274 platform_device_add_data(usb_dev_mph, &usb_data, 275 sizeof(struct 276 fsl_usb2_platform_data)); 277 if (ret) 278 goto unreg_mph; 279 i++; 280 } 281 282 for_each_compatible_node(np, NULL, "fsl-usb2-dr") { 283 struct resource r[2]; 284 struct fsl_usb2_platform_data usb_data; 285 const unsigned char *prop = NULL; 286 287 if (!of_device_is_available(np)) 288 continue; 289 290 memset(&r, 0, sizeof(r)); 291 memset(&usb_data, 0, sizeof(usb_data)); 292 293 ret = of_address_to_resource(np, 0, &r[0]); 294 if (ret) 295 goto unreg_mph; 296 297 of_irq_to_resource(np, 0, &r[1]); 298 299 prop = of_get_property(np, "dr_mode", NULL); 300 301 if (!prop || !strcmp(prop, "host")) { 302 usb_data.operating_mode = FSL_USB2_DR_HOST; 303 usb_dev_dr_host = platform_device_register_simple( 304 "fsl-ehci", i, r, 2); 305 if (IS_ERR(usb_dev_dr_host)) { 306 ret = PTR_ERR(usb_dev_dr_host); 307 goto err; 308 } 309 } else if (prop && !strcmp(prop, "peripheral")) { 310 usb_data.operating_mode = FSL_USB2_DR_DEVICE; 311 usb_dev_dr_client = platform_device_register_simple( 312 "fsl-usb2-udc", i, r, 2); 313 if (IS_ERR(usb_dev_dr_client)) { 314 ret = PTR_ERR(usb_dev_dr_client); 315 goto err; 316 } 317 } else if (prop && !strcmp(prop, "otg")) { 318 usb_data.operating_mode = FSL_USB2_DR_OTG; 319 usb_dev_dr_host = platform_device_register_simple( 320 "fsl-ehci", i, r, 2); 321 if (IS_ERR(usb_dev_dr_host)) { 322 ret = PTR_ERR(usb_dev_dr_host); 323 goto err; 324 } 325 usb_dev_dr_client = platform_device_register_simple( 326 "fsl-usb2-udc", i, r, 2); 327 if (IS_ERR(usb_dev_dr_client)) { 328 ret = PTR_ERR(usb_dev_dr_client); 329 goto err; 330 } 331 } else { 332 ret = -EINVAL; 333 goto err; 334 } 335 336 prop = of_get_property(np, "phy_type", NULL); 337 usb_data.phy_mode = determine_usb_phy(prop); 338 339 if (usb_dev_dr_host) { 340 usb_dev_dr_host->dev.coherent_dma_mask = 0xffffffffUL; 341 usb_dev_dr_host->dev.dma_mask = &usb_dev_dr_host-> 342 dev.coherent_dma_mask; 343 if ((ret = platform_device_add_data(usb_dev_dr_host, 344 &usb_data, sizeof(struct 345 fsl_usb2_platform_data)))) 346 goto unreg_dr; 347 } 348 if (usb_dev_dr_client) { 349 usb_dev_dr_client->dev.coherent_dma_mask = 0xffffffffUL; 350 usb_dev_dr_client->dev.dma_mask = &usb_dev_dr_client-> 351 dev.coherent_dma_mask; 352 if ((ret = platform_device_add_data(usb_dev_dr_client, 353 &usb_data, sizeof(struct 354 fsl_usb2_platform_data)))) 355 goto unreg_dr; 356 } 357 i++; 358 } 359 return 0; 360 361unreg_dr: 362 if (usb_dev_dr_host) 363 platform_device_unregister(usb_dev_dr_host); 364 if (usb_dev_dr_client) 365 platform_device_unregister(usb_dev_dr_client); 366unreg_mph: 367 if (usb_dev_mph) 368 platform_device_unregister(usb_dev_mph); 369err: 370 return ret; 371} 372 373arch_initcall(fsl_usb_of_init); 374 | |
375#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx) 376static __be32 __iomem *rstcr; 377 378static int __init setup_rstcr(void) 379{ 380 struct device_node *np; | 212#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx) 213static __be32 __iomem *rstcr; 214 215static int __init setup_rstcr(void) 216{ 217 struct device_node *np; |
381 382 for_each_node_by_name(np, "global-utilities") { 383 if ((of_get_property(np, "fsl,has-rstcr", NULL))) { 384 rstcr = of_iomap(np, 0) + 0xb0; 385 if (!rstcr) 386 printk (KERN_ERR "Error: reset control " 387 "register not mapped!\n"); 388 break; 389 } 390 } 391 392 if (!rstcr && ppc_md.restart == fsl_rstcr_restart) | 218 np = of_find_node_by_name(NULL, "global-utilities"); 219 if ((np && of_get_property(np, "fsl,has-rstcr", NULL))) { 220 rstcr = of_iomap(np, 0) + 0xb0; 221 if (!rstcr) 222 printk (KERN_EMERG "Error: reset control register " 223 "not mapped!\n"); 224 } else if (ppc_md.restart == fsl_rstcr_restart) |
393 printk(KERN_ERR "No RSTCR register, warm reboot won't work\n"); 394 395 if (np) 396 of_node_put(np); | 225 printk(KERN_ERR "No RSTCR register, warm reboot won't work\n"); 226 227 if (np) 228 of_node_put(np); |
397 | |
398 return 0; 399} 400 401arch_initcall(setup_rstcr); 402 403void fsl_rstcr_restart(char *cmd) 404{ 405 local_irq_disable(); --- 12 unchanged lines hidden --- | 229 return 0; 230} 231 232arch_initcall(setup_rstcr); 233 234void fsl_rstcr_restart(char *cmd) 235{ 236 local_irq_disable(); --- 12 unchanged lines hidden --- |