lkml.org 
[lkml]   [2011]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH v2 14/29] sparc/PCI: convert to pci_create_root_bus() for correct root bus resources
From
Date
Convert from pci_create_bus() to pci_create_root_bus().  This way the root
bus resources are correct immediately. This patch doesn't fix anything
because sparc fixed them before scanning the bus, but it makes it more
consistent with other architectures.

I didn't work out where pcibios_fixup_bus() is called. I don't see a
use of pci_scan_bus(), pci_scan_bus_parented(), or pci_scan_child_bus().

CC: David S. Miller <davem@davemloft.net>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
arch/sparc/kernel/pci.c | 18 +++++++-----------
1 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index 1e94f94..929e7a2 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -684,23 +684,26 @@ static void __devinit pci_bus_register_of_sysfs(struct pci_bus *bus)
struct pci_bus * __devinit pci_scan_one_pbm(struct pci_pbm_info *pbm,
struct device *parent)
{
+ struct list_head resources;
struct device_node *node = pbm->op->dev.of_node;
struct pci_bus *bus;

printk("PCI: Scanning PBM %s\n", node->full_name);

- bus = pci_create_bus(parent, pbm->pci_first_busno, pbm->pci_ops, pbm);
+ INIT_LIST_HEAD(&resources);
+ pci_add_resource(&resources, &pbm->io_space);
+ pci_add_resource(&resources, &pbm->mem_space);
+ bus = pci_create_root_bus(parent, pbm->pci_first_busno, pbm->pci_ops,
+ pbm, resources);
if (!bus) {
printk(KERN_ERR "Failed to create bus for %s\n",
node->full_name);
+ pci_free_resource_list(&resources);
return NULL;
}
bus->secondary = pbm->pci_first_busno;
bus->subordinate = pbm->pci_last_busno;

- bus->resource[0] = &pbm->io_space;
- bus->resource[1] = &pbm->mem_space;
-
pci_of_scan_bus(pbm, node, bus);
pci_bus_add_devices(bus);
pci_bus_register_of_sysfs(bus);
@@ -710,13 +713,6 @@ struct pci_bus * __devinit pci_scan_one_pbm(struct pci_pbm_info *pbm,

void __devinit pcibios_fixup_bus(struct pci_bus *pbus)
{
- struct pci_pbm_info *pbm = pbus->sysdata;
-
- /* Generic PCI bus probing sets these to point at
- * &io{port,mem}_resouce which is wrong for us.
- */
- pbus->resource[0] = &pbm->io_space;
- pbus->resource[1] = &pbm->mem_space;
}

void pcibios_update_irq(struct pci_dev *pdev, int irq)


\
 
 \ /
  Last update: 2011-10-14 06:31    [from the cache]
©2003-2011 Jasper Spaans