aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandre Bounine <alexandre.bounine@idt.com>2011-03-23 19:43:04 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-23 22:46:42 -0400
commit2f809985d2cbc78078b8da1cbed1f1ce1f4a0d5f (patch)
tree6ce67e43f25700ca08f84e4a87b74c0be0d7ee7f
parent388b78adc9899f0299128610f566051d0b1a57f6 (diff)
rapidio: modify subsystem and driver initialization sequence
Subsystem initialization sequence modified to support presence of multiple RapidIO controllers in the system. The new sequence is compatible with initialization of PCI devices. Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: Matt Porter <mporter@kernel.crashing.org> Cc: Li Yang <leoli@freescale.com> Cc: Thomas Moll <thomas.moll@sysgo.com> Cc: Micha Nelissen <micha@neli.hopto.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/powerpc/sysdev/fsl_rio.c10
-rw-r--r--drivers/net/rionet.c2
-rw-r--r--drivers/rapidio/rio.c6
-rw-r--r--include/linux/rio.h1
4 files changed, 6 insertions, 13 deletions
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
index f95cb5636d19..576b8066089e 100644
--- a/arch/powerpc/sysdev/fsl_rio.c
+++ b/arch/powerpc/sysdev/fsl_rio.c
@@ -1574,18 +1574,10 @@ err_ops:
1574 */ 1574 */
1575static int __devinit fsl_of_rio_rpn_probe(struct platform_device *dev) 1575static int __devinit fsl_of_rio_rpn_probe(struct platform_device *dev)
1576{ 1576{
1577 int rc;
1578 printk(KERN_INFO "Setting up RapidIO peer-to-peer network %s\n", 1577 printk(KERN_INFO "Setting up RapidIO peer-to-peer network %s\n",
1579 dev->dev.of_node->full_name); 1578 dev->dev.of_node->full_name);
1580 1579
1581 rc = fsl_rio_setup(dev); 1580 return fsl_rio_setup(dev);
1582 if (rc)
1583 goto out;
1584
1585 /* Enumerate all registered ports */
1586 rc = rio_init_mports();
1587out:
1588 return rc;
1589}; 1581};
1590 1582
1591static const struct of_device_id fsl_of_rio_rpn_ids[] = { 1583static const struct of_device_id fsl_of_rio_rpn_ids[] = {
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
index 678e5777da81..26afbaae23f0 100644
--- a/drivers/net/rionet.c
+++ b/drivers/net/rionet.c
@@ -571,5 +571,5 @@ static void __exit rionet_exit(void)
571 rio_unregister_driver(&rionet_driver); 571 rio_unregister_driver(&rionet_driver);
572} 572}
573 573
574module_init(rionet_init); 574late_initcall(rionet_init);
575module_exit(rionet_exit); 575module_exit(rionet_exit);
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index d520dbaede80..f861b728f80e 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -1134,8 +1134,6 @@ static int __devinit rio_init(void)
1134 return 0; 1134 return 0;
1135} 1135}
1136 1136
1137device_initcall(rio_init);
1138
1139int __devinit rio_init_mports(void) 1137int __devinit rio_init_mports(void)
1140{ 1138{
1141 int rc = 0; 1139 int rc = 0;
@@ -1158,10 +1156,14 @@ int __devinit rio_init_mports(void)
1158 rio_disc_mport(port); 1156 rio_disc_mport(port);
1159 } 1157 }
1160 1158
1159 rio_init();
1160
1161 out: 1161 out:
1162 return rc; 1162 return rc;
1163} 1163}
1164 1164
1165device_initcall_sync(rio_init_mports);
1166
1165void rio_register_mport(struct rio_mport *port) 1167void rio_register_mport(struct rio_mport *port)
1166{ 1168{
1167 list_add_tail(&port->node, &rio_mports); 1169 list_add_tail(&port->node, &rio_mports);
diff --git a/include/linux/rio.h b/include/linux/rio.h
index efed116efe9c..b6bcb1632749 100644
--- a/include/linux/rio.h
+++ b/include/linux/rio.h
@@ -395,7 +395,6 @@ union rio_pw_msg {
395}; 395};
396 396
397/* Architecture and hardware-specific functions */ 397/* Architecture and hardware-specific functions */
398extern int rio_init_mports(void);
399extern void rio_register_mport(struct rio_mport *); 398extern void rio_register_mport(struct rio_mport *);
400extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); 399extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int);
401extern void rio_close_inb_mbox(struct rio_mport *, int); 400extern void rio_close_inb_mbox(struct rio_mport *, int);