[PATCH] dlpar enable for OF pci probe
John Rose
johnrose at austin.ibm.com
Sat Nov 5 08:30:56 EST 2005
This patch contains the arch/ppc64 bits for enabling DLPAR and PCI
Hotplug for the new OF-based PCI probe mechanism. This code path is
currently broken. Please apply if appropriate.
Thanks-
John
Signed-off-by: John Rose <johnrose at austin.ibm.com>
diff -puN arch/ppc64/kernel/rtas_pci.c~base_changes arch/ppc64/kernel/rtas_pci.c
--- 2_6_linus/arch/ppc64/kernel/rtas_pci.c~base_changes 2005-11-04 13:54:50.000000000 -0600
+++ 2_6_linus-johnrose/arch/ppc64/kernel/rtas_pci.c 2005-11-04 13:54:50.000000000 -0600
@@ -440,7 +440,6 @@ struct pci_controller * __devinit init_p
struct device_node *root = of_find_node_by_path("/");
unsigned int root_size_cells = 0;
struct pci_controller *phb;
- struct pci_bus *bus;
int primary;
root_size_cells = prom_n_size_cells(root);
@@ -456,10 +455,7 @@ struct pci_controller * __devinit init_p
of_node_put(root);
pci_devs_phb_init_dynamic(phb);
- phb->last_busno = 0xff;
- bus = pci_scan_bus(phb->first_busno, phb->ops, phb->arch_data);
- phb->bus = bus;
- phb->last_busno = bus->subordinate;
+ scan_phb(phb);
return phb;
}
diff -puN arch/ppc64/kernel/pci.c~base_changes arch/ppc64/kernel/pci.c
--- 2_6_linus/arch/ppc64/kernel/pci.c~base_changes 2005-11-04 13:54:50.000000000 -0600
+++ 2_6_linus-johnrose/arch/ppc64/kernel/pci.c 2005-11-04 13:54:50.000000000 -0600
@@ -295,8 +295,8 @@ static void pci_parse_of_addrs(struct de
}
}
-static struct pci_dev *of_create_pci_dev(struct device_node *node,
- struct pci_bus *bus, int devfn)
+struct pci_dev *of_create_pci_dev(struct device_node *node,
+ struct pci_bus *bus, int devfn)
{
struct pci_dev *dev;
const char *type;
@@ -354,10 +354,9 @@ static struct pci_dev *of_create_pci_dev
return dev;
}
+EXPORT_SYMBOL(of_create_pci_dev);
-static void of_scan_pci_bridge(struct device_node *node, struct pci_dev *dev);
-
-static void __devinit of_scan_bus(struct device_node *node,
+void __devinit of_scan_bus(struct device_node *node,
struct pci_bus *bus)
{
struct device_node *child = NULL;
@@ -381,9 +380,10 @@ static void __devinit of_scan_bus(struct
do_bus_setup(bus);
}
+EXPORT_SYMBOL(of_scan_bus);
-static void __devinit of_scan_pci_bridge(struct device_node *node,
- struct pci_dev *dev)
+void __devinit of_scan_pci_bridge(struct device_node *node,
+ struct pci_dev *dev)
{
struct pci_bus *bus;
u32 *busrange, *ranges;
@@ -464,9 +464,10 @@ static void __devinit of_scan_pci_bridge
else if (mode == PCI_PROBE_NORMAL)
pci_scan_child_bus(bus);
}
+EXPORT_SYMBOL(of_scan_pci_bridge);
#endif /* CONFIG_PPC_MULTIPLATFORM */
-static void __devinit scan_phb(struct pci_controller *hose)
+void __devinit scan_phb(struct pci_controller *hose)
{
struct pci_bus *bus;
struct device_node *node = hose->arch_data;
diff -puN include/asm-ppc64/pci.h~base_changes include/asm-ppc64/pci.h
--- 2_6_linus/include/asm-ppc64/pci.h~base_changes 2005-11-04 13:54:50.000000000 -0600
+++ 2_6_linus-johnrose/include/asm-ppc64/pci.h 2005-11-04 13:54:50.000000000 -0600
@@ -162,6 +162,14 @@ pcibios_fixup_device_resources(struct pc
extern struct pci_controller *init_phb_dynamic(struct device_node *dn);
+extern struct pci_dev *of_create_pci_dev(struct device_node *node,
+ struct pci_bus *bus, int devfn);
+
+extern void of_scan_pci_bridge(struct device_node *node,
+ struct pci_dev *dev);
+
+extern void of_scan_bus(struct device_node *node, struct pci_bus *bus);
+
extern int pci_read_irq_line(struct pci_dev *dev);
extern void pcibios_add_platform_entries(struct pci_dev *dev);
diff -puN include/asm-powerpc/ppc-pci.h~base_changes include/asm-powerpc/ppc-pci.h
--- 2_6_linus/include/asm-powerpc/ppc-pci.h~base_changes 2005-11-04 13:54:50.000000000 -0600
+++ 2_6_linus-johnrose/include/asm-powerpc/ppc-pci.h 2005-11-04 13:54:50.000000000 -0600
@@ -34,6 +34,7 @@ void *traverse_pci_devices(struct device
void pci_devs_phb_init(void);
void pci_devs_phb_init_dynamic(struct pci_controller *phb);
+void __devinit scan_phb(struct pci_controller *hose);
/* PCI address cache management routines */
void pci_addr_cache_insert_device(struct pci_dev *dev);
_
More information about the Linuxppc64-dev
mailing list