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: Kumar Gala <galak@kernel.crashing.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
58513dc40d
Коммит
2eb4afb69f
|
@ -223,6 +223,7 @@ struct pci_dn {
|
|||
#define PCI_DN(dn) ((struct pci_dn *) (dn)->data)
|
||||
|
||||
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
|
||||
* in the case where the sysdata is incorrect and needs to be fixed
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,29 @@ static void __init pseries_discover_pic(void)
|
|||
" 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)
|
||||
{
|
||||
/* Discover PIC type and setup ppc_md accordingly */
|
||||
|
@ -271,6 +295,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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче