Commit 2b591616ada6cf499a4e83bf453761e40dc53059

Authored by Bjorn Helgaas
Committed by Jesse Barnes
1 parent 1a300107b5

sparc32, leon/PCI: convert to pci_scan_root_bus() for correct root bus resources

Convert from pci_scan_bus_parented() to pci_scan_root_bus() and remove root
bus resource fixups.  This fixes the problem of "early" and "header" quirks
seeing incorrect root bus resources.

pci_scan_root_bus() also includes the pci_bus_add_devices() so we don't
need to do that separately.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>

Showing 1 changed file with 8 additions and 17 deletions Side-by-side Diff

arch/sparc/kernel/leon_pci.c
... ... @@ -19,22 +19,22 @@
19 19 */
20 20 void leon_pci_init(struct platform_device *ofdev, struct leon_pci_info *info)
21 21 {
  22 + LIST_HEAD(resources);
22 23 struct pci_bus *root_bus;
23 24  
24   - root_bus = pci_scan_bus_parented(&ofdev->dev, 0, info->ops, info);
25   - if (root_bus) {
26   - root_bus->resource[0] = &info->io_space;
27   - root_bus->resource[1] = &info->mem_space;
28   - root_bus->resource[2] = NULL;
  25 + pci_add_resource(&resources, &info->io_space);
  26 + pci_add_resource(&resources, &info->mem_space);
29 27  
30   - /* Init all PCI devices into PCI tree */
31   - pci_bus_add_devices(root_bus);
32   -
  28 + root_bus = pci_scan_root_bus(&ofdev->dev, 0, info->ops, info,
  29 + &resources);
  30 + if (root_bus) {
33 31 /* Setup IRQs of all devices using custom routines */
34 32 pci_fixup_irqs(pci_common_swizzle, info->map_irq);
35 33  
36 34 /* Assign devices with resources */
37 35 pci_assign_unassigned_resources();
  36 + } else {
  37 + pci_free_resource_list(&resources);
38 38 }
39 39 }
40 40  
... ... @@ -82,15 +82,6 @@
82 82 struct pci_dev *dev;
83 83 int i, has_io, has_mem;
84 84 u16 cmd;
85   -
86   - /* Generic PCI bus probing sets these to point at
87   - * &io{port,mem}_resouce which is wrong for us.
88   - */
89   - if (pbus->self == NULL) {
90   - pbus->resource[0] = &info->io_space;
91   - pbus->resource[1] = &info->mem_space;
92   - pbus->resource[2] = NULL;
93   - }
94 85  
95 86 list_for_each_entry(dev, &pbus->devices, bus_list) {
96 87 /*