Commit 2eb4afb6 authored by Kumar Gala's avatar Kumar Gala Committed by Benjamin Herrenschmidt

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

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: default avatarKumar Gala <galak@kernel.crashing.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 58513dc4
...@@ -223,6 +223,7 @@ struct pci_dn { ...@@ -223,6 +223,7 @@ struct pci_dn {
#define PCI_DN(dn) ((struct pci_dn *) (dn)->data) #define PCI_DN(dn) ((struct pci_dn *) (dn)->data)
extern struct device_node *fetch_dev_dn(struct pci_dev *dev); extern struct device_node *fetch_dev_dn(struct pci_dev *dev);
extern void * update_dn_pci_info(struct device_node *dn, void *data);
/* Get a device_node from a pci_dev. This code must be fast except /* Get a device_node from a pci_dev. This code must be fast except
* in the case where the sysdata is incorrect and needs to be fixed * in the case where the sysdata is incorrect and needs to be fixed
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/pci-bridge.h> #include <asm/pci-bridge.h>
#include <asm/pSeries_reconfig.h>
#include <asm/ppc-pci.h> #include <asm/ppc-pci.h>
#include <asm/firmware.h> #include <asm/firmware.h>
...@@ -35,7 +34,7 @@ ...@@ -35,7 +34,7 @@
* Traverse_func that inits the PCI fields of the device node. * Traverse_func that inits the PCI fields of the device node.
* NOTE: this *must* be done before read/write config to the device. * 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; struct pci_controller *phb = data;
const int *type = const int *type =
...@@ -184,29 +183,6 @@ struct device_node *fetch_dev_dn(struct pci_dev *dev) ...@@ -184,29 +183,6 @@ struct device_node *fetch_dev_dn(struct pci_dev *dev)
} }
EXPORT_SYMBOL(fetch_dev_dn); 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. * pci_devs_phb_init - Initialize phbs and pci devs under them.
* *
...@@ -223,6 +199,4 @@ void __init pci_devs_phb_init(void) ...@@ -223,6 +199,4 @@ void __init pci_devs_phb_init(void)
/* This must be done first so the device nodes have valid pci info! */ /* This must be done first so the device nodes have valid pci info! */
list_for_each_entry_safe(phb, tmp, &hose_list, list_node) list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
pci_devs_phb_init_dynamic(phb); pci_devs_phb_init_dynamic(phb);
pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb);
} }
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/firmware.h> #include <asm/firmware.h>
#include <asm/eeh.h> #include <asm/eeh.h>
#include <asm/pSeries_reconfig.h>
#include "plpar_wrappers.h" #include "plpar_wrappers.h"
#include "pseries.h" #include "pseries.h"
...@@ -254,6 +255,29 @@ static void __init pseries_discover_pic(void) ...@@ -254,6 +255,29 @@ static void __init pseries_discover_pic(void)
" interrupt-controller\n"); " interrupt-controller\n");
} }
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) static void __init pSeries_setup_arch(void)
{ {
/* Discover PIC type and setup ppc_md accordingly */ /* Discover PIC type and setup ppc_md accordingly */
...@@ -271,6 +295,7 @@ static void __init pSeries_setup_arch(void) ...@@ -271,6 +295,7 @@ static void __init pSeries_setup_arch(void)
/* Find and initialize PCI host bridges */ /* Find and initialize PCI host bridges */
init_pci_config_tokens(); init_pci_config_tokens();
find_and_init_phbs(); find_and_init_phbs();
pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb);
eeh_init(); eeh_init();
pSeries_nvram_init(); pSeries_nvram_init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment