Patchwork powerpc/pci: Move pseries code into pseries platform specific area

login
register
mail settings
Submitter Kumar Gala
Date April 30, 2009, 2:14 p.m.
Message ID <1241100846-14216-1-git-send-email-galak@kernel.crashing.org>
Download mbox | patch
Permalink /patch/26695/
State Superseded
Headers show

Comments

Kumar Gala - April 30, 2009, 2:14 p.m.
There doesn't appear to be any specific reason that we need to setup the
pseries specific notifier in generic arch pci code.  Move it into pseries
land.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
 arch/powerpc/kernel/pci_dn.c           |   28 +---------------------------
 arch/powerpc/platforms/pseries/setup.c |   27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 27 deletions(-)
Michael Ellerman - April 30, 2009, 2:49 p.m.
On Thu, 2009-04-30 at 09:14 -0500, Kumar Gala wrote:
> There doesn't appear to be any specific reason that we need to setup the
> pseries specific notifier in generic arch pci code.  Move it into pseries
> land.

Yeah I guess. Although if some other platform ever wants to do PCI
hotplug it probably wants to call update_dn_pci_info() also.

> --- a/arch/powerpc/platforms/pseries/setup.c
> +++ b/arch/powerpc/platforms/pseries/setup.c
> @@ -254,6 +255,31 @@ static void __init pseries_discover_pic(void)
>                " interrupt-controller\n");
>  }
>  
> +extern void * update_dn_pci_info(struct device_node *dn, void *data);

Ahem :)

cheers
Kumar Gala - April 30, 2009, 3:35 p.m.
On Apr 30, 2009, at 9:49 AM, Michael Ellerman wrote:

> On Thu, 2009-04-30 at 09:14 -0500, Kumar Gala wrote:
>> There doesn't appear to be any specific reason that we need to  
>> setup the
>> pseries specific notifier in generic arch pci code.  Move it into  
>> pseries
>> land.
>
> Yeah I guess. Although if some other platform ever wants to do PCI
> hotplug it probably wants to call update_dn_pci_info() also.

when that happens we can worry about, also the code I moved is pretty  
pseries specific  (seeing as the event is called PSERIES_RECONFIG_ADD)

>> --- a/arch/powerpc/platforms/pseries/setup.c
>> +++ b/arch/powerpc/platforms/pseries/setup.c
>> @@ -254,6 +255,31 @@ static void __init pseries_discover_pic(void)
>>               " interrupt-controller\n");
>> }
>>
>> +extern void * update_dn_pci_info(struct device_node *dn, void  
>> *data);
>
> Ahem :)

Yeah, was being lazy.  I'll move it into asm/pci-bridge.h

- k
Michael Ellerman - April 30, 2009, 10:52 p.m.
On Thu, 2009-04-30 at 10:35 -0500, Kumar Gala wrote:
> On Apr 30, 2009, at 9:49 AM, Michael Ellerman wrote:
> 
> > On Thu, 2009-04-30 at 09:14 -0500, Kumar Gala wrote:
> >> There doesn't appear to be any specific reason that we need to  
> >> setup the
> >> pseries specific notifier in generic arch pci code.  Move it into  
> >> pseries
> >> land.
> >
> > Yeah I guess. Although if some other platform ever wants to do PCI
> > hotplug it probably wants to call update_dn_pci_info() also.
> 
> when that happens we can worry about, also the code I moved is pretty  
> pseries specific  (seeing as the event is called PSERIES_RECONFIG_ADD)

Yeah I agree.

> >> --- a/arch/powerpc/platforms/pseries/setup.c
> >> +++ b/arch/powerpc/platforms/pseries/setup.c
> >> @@ -254,6 +255,31 @@ static void __init pseries_discover_pic(void)
> >>               " interrupt-controller\n");
> >> }
> >>
> >> +extern void * update_dn_pci_info(struct device_node *dn, void  
> >> *data);
> >
> > Ahem :)
> 
> Yeah, was being lazy.  I'll move it into asm/pci-bridge.h

Please do :)

cheers

Patch

diff --git a/arch/powerpc/kernel/pci_dn.c b/arch/powerpc/kernel/pci_dn.c
index 1c67de5..d5e36e5 100644
--- a/arch/powerpc/kernel/pci_dn.c
+++ b/arch/powerpc/kernel/pci_dn.c
@@ -27,7 +27,6 @@ 
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
-#include <asm/pSeries_reconfig.h>
 #include <asm/ppc-pci.h>
 #include <asm/firmware.h>
 
@@ -35,7 +34,7 @@ 
  * Traverse_func that inits the PCI fields of the device node.
  * NOTE: this *must* be done before read/write config to the device.
  */
-static void * __devinit update_dn_pci_info(struct device_node *dn, void *data)
+void * __devinit update_dn_pci_info(struct device_node *dn, void *data)
 {
 	struct pci_controller *phb = data;
 	const int *type =
@@ -184,29 +183,6 @@  struct device_node *fetch_dev_dn(struct pci_dev *dev)
 }
 EXPORT_SYMBOL(fetch_dev_dn);
 
-static int pci_dn_reconfig_notifier(struct notifier_block *nb, unsigned long action, void *node)
-{
-	struct device_node *np = node;
-	struct pci_dn *pci = NULL;
-	int err = NOTIFY_OK;
-
-	switch (action) {
-	case PSERIES_RECONFIG_ADD:
-		pci = np->parent->data;
-		if (pci)
-			update_dn_pci_info(np, pci->phb);
-		break;
-	default:
-		err = NOTIFY_DONE;
-		break;
-	}
-	return err;
-}
-
-static struct notifier_block pci_dn_reconfig_nb = {
-	.notifier_call = pci_dn_reconfig_notifier,
-};
-
 /** 
  * pci_devs_phb_init - Initialize phbs and pci devs under them.
  * 
@@ -223,6 +199,4 @@  void __init pci_devs_phb_init(void)
 	/* This must be done first so the device nodes have valid pci info! */
 	list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
 		pci_devs_phb_init_dynamic(phb);
-
-	pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb);
 }
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index ec34170..096ea1b 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -63,6 +63,7 @@ 
 #include <asm/smp.h>
 #include <asm/firmware.h>
 #include <asm/eeh.h>
+#include <asm/pSeries_reconfig.h>
 
 #include "plpar_wrappers.h"
 #include "pseries.h"
@@ -254,6 +255,31 @@  static void __init pseries_discover_pic(void)
 	       " interrupt-controller\n");
 }
 
+extern void * update_dn_pci_info(struct device_node *dn, void *data);
+
+static int pci_dn_reconfig_notifier(struct notifier_block *nb, unsigned long action, void *node)
+{
+	struct device_node *np = node;
+	struct pci_dn *pci = NULL;
+	int err = NOTIFY_OK;
+
+	switch (action) {
+	case PSERIES_RECONFIG_ADD:
+		pci = np->parent->data;
+		if (pci)
+			update_dn_pci_info(np, pci->phb);
+		break;
+	default:
+		err = NOTIFY_DONE;
+		break;
+	}
+	return err;
+}
+
+static struct notifier_block pci_dn_reconfig_nb = {
+	.notifier_call = pci_dn_reconfig_notifier,
+};
+
 static void __init pSeries_setup_arch(void)
 {
 	/* Discover PIC type and setup ppc_md accordingly */
@@ -271,6 +297,7 @@  static void __init pSeries_setup_arch(void)
 	/* Find and initialize PCI host bridges */
 	init_pci_config_tokens();
 	find_and_init_phbs();
+	pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb);
 	eeh_init();
 
 	pSeries_nvram_init();