powerpc/PCI: register busn_res for root buses
Add the host bridge bus number aperture to the resource list. Like the MMIO and I/O port apertures, this is used when assigning resources to hot-added devices or in the case of conflicts. [bhelgaas: changelog] CC: Paul Mackerras <paulus@samba.org> CC: linuxppc-dev@lists.ozlabs.org CC: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
Родитель
3f1b540d46
Коммит
be8e60d8be
|
@ -30,6 +30,7 @@ struct pci_controller {
|
|||
int first_busno;
|
||||
int last_busno;
|
||||
int self_busno;
|
||||
struct resource busn;
|
||||
|
||||
void __iomem *io_base_virt;
|
||||
#ifdef CONFIG_PPC64
|
||||
|
|
|
@ -1637,6 +1637,11 @@ void __devinit pcibios_scan_phb(struct pci_controller *hose)
|
|||
/* Wire up PHB bus resources */
|
||||
pcibios_setup_phb_resources(hose, &resources);
|
||||
|
||||
hose->busn.start = hose->first_busno;
|
||||
hose->busn.end = hose->last_busno;
|
||||
hose->busn.flags = IORESOURCE_BUS;
|
||||
pci_add_resource(&resources, &hose->busn);
|
||||
|
||||
/* Create an empty bus for the toplevel */
|
||||
bus = pci_create_root_bus(hose->parent, hose->first_busno,
|
||||
hose->ops, hose, &resources);
|
||||
|
@ -1646,7 +1651,6 @@ void __devinit pcibios_scan_phb(struct pci_controller *hose)
|
|||
pci_free_resource_list(&resources);
|
||||
return;
|
||||
}
|
||||
bus->busn_res.start = hose->first_busno;
|
||||
hose->bus = bus;
|
||||
|
||||
/* Get probe mode and perform scan */
|
||||
|
@ -1654,13 +1658,14 @@ void __devinit pcibios_scan_phb(struct pci_controller *hose)
|
|||
if (node && ppc_md.pci_probe_mode)
|
||||
mode = ppc_md.pci_probe_mode(bus);
|
||||
pr_debug(" probe mode: %d\n", mode);
|
||||
if (mode == PCI_PROBE_DEVTREE) {
|
||||
bus->busn_res.end = hose->last_busno;
|
||||
if (mode == PCI_PROBE_DEVTREE)
|
||||
of_scan_bus(node, bus);
|
||||
}
|
||||
|
||||
if (mode == PCI_PROBE_NORMAL)
|
||||
hose->last_busno = bus->busn_res.end = pci_scan_child_bus(bus);
|
||||
if (mode == PCI_PROBE_NORMAL) {
|
||||
pci_bus_update_busn_res_end(bus, 255);
|
||||
hose->last_busno = pci_scan_child_bus(bus);
|
||||
pci_bus_update_busn_res_end(bus, hose->last_busno);
|
||||
}
|
||||
|
||||
/* Platform gets a chance to do some global fixups before
|
||||
* we proceed to resource allocation
|
||||
|
|
|
@ -240,7 +240,7 @@ void __devinit of_scan_pci_bridge(struct pci_dev *dev)
|
|||
}
|
||||
|
||||
bus->primary = dev->bus->number;
|
||||
bus->busn_res.end = busrange[1];
|
||||
pci_bus_insert_busn_res(bus, busrange[0], busrange[1]);
|
||||
bus->bridge_ctl = 0;
|
||||
|
||||
/* parse ranges property */
|
||||
|
|
Загрузка…
Ссылка в новой задаче