Commit 2b591616ada6cf499a4e83bf453761e40dc53059
Committed by
Jesse Barnes
1 parent
1a300107b5
Exists in
master
and in
6 other branches
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 | /* |