diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2011-10-28 18:27:53 -0400 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2012-01-06 15:11:11 -0500 |
commit | 1a300107b5a49e3b7da080ae4827a9ee17c49a25 (patch) | |
tree | 86952156aec5378df93cc59fb54481189af39f1a /arch/sparc | |
parent | 6f17dd1ba96bb857fc1e8ab0357a6a0a09935baf (diff) |
sparc/PCI: convert to pci_create_root_bus()
Convert from pci_create_bus() to pci_create_root_bus(). This way the root
bus resources are correct immediately. This patch doesn't fix a problem
because sparc fixed the resources before scanning the bus, but it makes
sparc more consistent with other architectures.
v2: fix build error (from sfr)
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/kernel/pci.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c index 130f07ac4d61..bb8bc2e519ac 100644 --- a/arch/sparc/kernel/pci.c +++ b/arch/sparc/kernel/pci.c | |||
@@ -685,23 +685,25 @@ static void __devinit pci_bus_register_of_sysfs(struct pci_bus *bus) | |||
685 | struct pci_bus * __devinit pci_scan_one_pbm(struct pci_pbm_info *pbm, | 685 | struct pci_bus * __devinit pci_scan_one_pbm(struct pci_pbm_info *pbm, |
686 | struct device *parent) | 686 | struct device *parent) |
687 | { | 687 | { |
688 | LIST_HEAD(resources); | ||
688 | struct device_node *node = pbm->op->dev.of_node; | 689 | struct device_node *node = pbm->op->dev.of_node; |
689 | struct pci_bus *bus; | 690 | struct pci_bus *bus; |
690 | 691 | ||
691 | printk("PCI: Scanning PBM %s\n", node->full_name); | 692 | printk("PCI: Scanning PBM %s\n", node->full_name); |
692 | 693 | ||
693 | bus = pci_create_bus(parent, pbm->pci_first_busno, pbm->pci_ops, pbm); | 694 | pci_add_resource(&resources, &pbm->io_space); |
695 | pci_add_resource(&resources, &pbm->mem_space); | ||
696 | bus = pci_create_root_bus(parent, pbm->pci_first_busno, pbm->pci_ops, | ||
697 | pbm, &resources); | ||
694 | if (!bus) { | 698 | if (!bus) { |
695 | printk(KERN_ERR "Failed to create bus for %s\n", | 699 | printk(KERN_ERR "Failed to create bus for %s\n", |
696 | node->full_name); | 700 | node->full_name); |
701 | pci_free_resource_list(&resources); | ||
697 | return NULL; | 702 | return NULL; |
698 | } | 703 | } |
699 | bus->secondary = pbm->pci_first_busno; | 704 | bus->secondary = pbm->pci_first_busno; |
700 | bus->subordinate = pbm->pci_last_busno; | 705 | bus->subordinate = pbm->pci_last_busno; |
701 | 706 | ||
702 | bus->resource[0] = &pbm->io_space; | ||
703 | bus->resource[1] = &pbm->mem_space; | ||
704 | |||
705 | pci_of_scan_bus(pbm, node, bus); | 707 | pci_of_scan_bus(pbm, node, bus); |
706 | pci_bus_add_devices(bus); | 708 | pci_bus_add_devices(bus); |
707 | pci_bus_register_of_sysfs(bus); | 709 | pci_bus_register_of_sysfs(bus); |
@@ -711,13 +713,6 @@ struct pci_bus * __devinit pci_scan_one_pbm(struct pci_pbm_info *pbm, | |||
711 | 713 | ||
712 | void __devinit pcibios_fixup_bus(struct pci_bus *pbus) | 714 | void __devinit pcibios_fixup_bus(struct pci_bus *pbus) |
713 | { | 715 | { |
714 | struct pci_pbm_info *pbm = pbus->sysdata; | ||
715 | |||
716 | /* Generic PCI bus probing sets these to point at | ||
717 | * &io{port,mem}_resouce which is wrong for us. | ||
718 | */ | ||
719 | pbus->resource[0] = &pbm->io_space; | ||
720 | pbus->resource[1] = &pbm->mem_space; | ||
721 | } | 716 | } |
722 | 717 | ||
723 | void pcibios_update_irq(struct pci_dev *pdev, int irq) | 718 | void pcibios_update_irq(struct pci_dev *pdev, int irq) |