aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/parisc
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2011-10-28 18:27:17 -0400
committerJesse Barnes <jbarnes@virtuousgeek.org>2012-01-06 15:11:05 -0500
commitf4d9ea9abf04a6ad9643df5497e6243fbf64196e (patch)
tree04085c4f34f1a48ea6e28a1168486001ecb78154 /drivers/parisc
parent7590e500ad83d9ac1e55eed4720e053eff14b8e5 (diff)
parisc/PCI: lba: deal with LMMIO/PAT overlaps before creating PCI root bus
This moves the truncate_pat_collision() call out of the pcibios_fixup_bus() path so that when a future patch builds a list of root bus resources for pci_create_bus(), it can use the truncated LMMIO range. truncate_pat_collision() used to be called in this path: pci_scan_bus_parented pci_create_bus pci_scan_child_bus pcibios_fixup_bus lba_fixup_bus truncate_pat_collision All of the PAT and lba_dev resource setup must be done before we call pci_scan_bus_parented(), so it should be safe to move the truncate_pat_collision() to just before pci_scan_bus_parented(). CC: linux-parisc@vger.kernel.org Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/parisc')
-rw-r--r--drivers/parisc/lba_pci.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c
index 3aeb3279c92a..2c7edf3a6cd0 100644
--- a/drivers/parisc/lba_pci.c
+++ b/drivers/parisc/lba_pci.c
@@ -689,23 +689,7 @@ lba_fixup_bus(struct pci_bus *bus)
689 bus->resource[i++] = &(ldev->hba.elmmio_space); 689 bus->resource[i++] = &(ldev->hba.elmmio_space);
690 } 690 }
691 691
692 692 if (ldev->hba.lmmio_space.flags) {
693 /* Overlaps with elmmio can (and should) fail here.
694 * We will prune (or ignore) the distributed range.
695 *
696 * FIXME: SBA code should register all elmmio ranges first.
697 * that would take care of elmmio ranges routed
698 * to a different rope (already discovered) from
699 * getting registered *after* LBA code has already
700 * registered it's distributed lmmio range.
701 */
702 if (truncate_pat_collision(&iomem_resource,
703 &(ldev->hba.lmmio_space))) {
704
705 printk(KERN_WARNING "LBA: lmmio_space [%lx/%lx] duplicate!\n",
706 (long)ldev->hba.lmmio_space.start,
707 (long)ldev->hba.lmmio_space.end);
708 } else {
709 err = request_resource(&iomem_resource, &(ldev->hba.lmmio_space)); 693 err = request_resource(&iomem_resource, &(ldev->hba.lmmio_space));
710 if (err < 0) { 694 if (err < 0) {
711 printk(KERN_ERR "FAILED: lba_fixup_bus() request for " 695 printk(KERN_ERR "FAILED: lba_fixup_bus() request for "
@@ -1518,6 +1502,23 @@ lba_driver_probe(struct parisc_device *dev)
1518 if (lba_dev->hba.bus_num.start < lba_next_bus) 1502 if (lba_dev->hba.bus_num.start < lba_next_bus)
1519 lba_dev->hba.bus_num.start = lba_next_bus; 1503 lba_dev->hba.bus_num.start = lba_next_bus;
1520 1504
1505 /* Overlaps with elmmio can (and should) fail here.
1506 * We will prune (or ignore) the distributed range.
1507 *
1508 * FIXME: SBA code should register all elmmio ranges first.
1509 * that would take care of elmmio ranges routed
1510 * to a different rope (already discovered) from
1511 * getting registered *after* LBA code has already
1512 * registered it's distributed lmmio range.
1513 */
1514 if (truncate_pat_collision(&iomem_resource,
1515 &(lba_dev->hba.lmmio_space))) {
1516 printk(KERN_WARNING "LBA: lmmio_space [%lx/%lx] duplicate!\n",
1517 (long)lba_dev->hba.lmmio_space.start,
1518 (long)lba_dev->hba.lmmio_space.end);
1519 lba_dev->hba.lmmio_space.flags = 0;
1520 }
1521
1521 dev->dev.platform_data = lba_dev; 1522 dev->dev.platform_data = lba_dev;
1522 lba_bus = lba_dev->hba.hba_bus = 1523 lba_bus = lba_dev->hba.hba_bus =
1523 pci_scan_bus_parented(&dev->dev, lba_dev->hba.bus_num.start, 1524 pci_scan_bus_parented(&dev->dev, lba_dev->hba.bus_num.start,