You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci
* 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci: (80 commits) x86/PCI: Expand the x86_msi_ops to have a restore MSIs. PCI: Increase resource array mask bit size in pcim_iomap_regions() PCI: DEVICE_COUNT_RESOURCE should be equal to PCI_NUM_RESOURCES PCI: pci_ids: add device ids for STA2X11 device (aka ConneXT) PNP: work around Dell 1536/1546 BIOS MMCONFIG bug that breaks USB x86/PCI: amd: factor out MMCONFIG discovery PCI: Enable ATS at the device state restore PCI: msi: fix imbalanced refcount of msi irq sysfs objects PCI: kconfig: English typo in pci/pcie/Kconfig PCI/PM/Runtime: make PCI traces quieter PCI: remove pci_create_bus() xtensa/PCI: convert to pci_scan_root_bus() for correct root bus resources x86/PCI: convert to pci_create_root_bus() and pci_scan_root_bus() x86/PCI: use pci_scan_bus() instead of pci_scan_bus_parented() x86/PCI: read Broadcom CNB20LE host bridge info before PCI scan sparc32, leon/PCI: convert to pci_scan_root_bus() for correct root bus resources sparc/PCI: convert to pci_create_root_bus() sh/PCI: convert to pci_scan_root_bus() for correct root bus resources powerpc/PCI: convert to pci_create_root_bus() powerpc/PCI: split PHB part out of pcibios_map_io_space() ... Fix up conflicts in drivers/pci/msi.c and include/linux/pci_regs.h due to the same patches being applied in other branches.
This commit is contained in:
+23
-24
@@ -562,19 +562,6 @@ dino_fixup_bus(struct pci_bus *bus)
|
||||
/* Firmware doesn't set up card-mode dino, so we have to */
|
||||
if (is_card_dino(&dino_dev->hba.dev->id)) {
|
||||
dino_card_setup(bus, dino_dev->hba.base_addr);
|
||||
} else if(bus->parent == NULL) {
|
||||
/* must have a dino above it, reparent the resources
|
||||
* into the dino window */
|
||||
int i;
|
||||
struct resource *res = &dino_dev->hba.lmmio_space;
|
||||
|
||||
bus->resource[0] = &(dino_dev->hba.io_space);
|
||||
for(i = 0; i < DINO_MAX_LMMIO_RESOURCES; i++) {
|
||||
if(res[i].flags == 0)
|
||||
break;
|
||||
bus->resource[i+1] = &res[i];
|
||||
}
|
||||
|
||||
} else if (bus->parent) {
|
||||
int i;
|
||||
|
||||
@@ -927,6 +914,7 @@ static int __init dino_probe(struct parisc_device *dev)
|
||||
const char *version = "unknown";
|
||||
char *name;
|
||||
int is_cujo = 0;
|
||||
LIST_HEAD(resources);
|
||||
struct pci_bus *bus;
|
||||
unsigned long hpa = dev->hpa.start;
|
||||
|
||||
@@ -1003,26 +991,37 @@ static int __init dino_probe(struct parisc_device *dev)
|
||||
|
||||
dev->dev.platform_data = dino_dev;
|
||||
|
||||
pci_add_resource(&resources, &dino_dev->hba.io_space);
|
||||
if (dino_dev->hba.lmmio_space.flags)
|
||||
pci_add_resource(&resources, &dino_dev->hba.lmmio_space);
|
||||
if (dino_dev->hba.elmmio_space.flags)
|
||||
pci_add_resource(&resources, &dino_dev->hba.elmmio_space);
|
||||
if (dino_dev->hba.gmmio_space.flags)
|
||||
pci_add_resource(&resources, &dino_dev->hba.gmmio_space);
|
||||
|
||||
/*
|
||||
** It's not used to avoid chicken/egg problems
|
||||
** with configuration accessor functions.
|
||||
*/
|
||||
dino_dev->hba.hba_bus = bus = pci_scan_bus_parented(&dev->dev,
|
||||
dino_current_bus, &dino_cfg_ops, NULL);
|
||||
|
||||
if(bus) {
|
||||
/* This code *depends* on scanning being single threaded
|
||||
* if it isn't, this global bus number count will fail
|
||||
*/
|
||||
dino_current_bus = bus->subordinate + 1;
|
||||
pci_bus_assign_resources(bus);
|
||||
pci_bus_add_devices(bus);
|
||||
} else {
|
||||
dino_dev->hba.hba_bus = bus = pci_create_root_bus(&dev->dev,
|
||||
dino_current_bus, &dino_cfg_ops, NULL, &resources);
|
||||
if (!bus) {
|
||||
printk(KERN_ERR "ERROR: failed to scan PCI bus on %s (duplicate bus number %d?)\n",
|
||||
dev_name(&dev->dev), dino_current_bus);
|
||||
pci_free_resource_list(&resources);
|
||||
/* increment the bus number in case of duplicates */
|
||||
dino_current_bus++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bus->subordinate = pci_scan_child_bus(bus);
|
||||
|
||||
/* This code *depends* on scanning being single threaded
|
||||
* if it isn't, this global bus number count will fail
|
||||
*/
|
||||
dino_current_bus = bus->subordinate + 1;
|
||||
pci_bus_assign_resources(bus);
|
||||
pci_bus_add_devices(bus);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+40
-32
@@ -653,7 +653,7 @@ lba_fixup_bus(struct pci_bus *bus)
|
||||
}
|
||||
} else {
|
||||
/* Host-PCI Bridge */
|
||||
int err, i;
|
||||
int err;
|
||||
|
||||
DBG("lba_fixup_bus() %s [%lx/%lx]/%lx\n",
|
||||
ldev->hba.io_space.name,
|
||||
@@ -669,9 +669,6 @@ lba_fixup_bus(struct pci_bus *bus)
|
||||
lba_dump_res(&ioport_resource, 2);
|
||||
BUG();
|
||||
}
|
||||
/* advertize Host bridge resources to PCI bus */
|
||||
bus->resource[0] = &(ldev->hba.io_space);
|
||||
i = 1;
|
||||
|
||||
if (ldev->hba.elmmio_space.start) {
|
||||
err = request_resource(&iomem_resource,
|
||||
@@ -685,35 +682,17 @@ lba_fixup_bus(struct pci_bus *bus)
|
||||
|
||||
/* lba_dump_res(&iomem_resource, 2); */
|
||||
/* BUG(); */
|
||||
} else
|
||||
bus->resource[i++] = &(ldev->hba.elmmio_space);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Overlaps with elmmio can (and should) fail here.
|
||||
* We will prune (or ignore) the distributed range.
|
||||
*
|
||||
* FIXME: SBA code should register all elmmio ranges first.
|
||||
* that would take care of elmmio ranges routed
|
||||
* to a different rope (already discovered) from
|
||||
* getting registered *after* LBA code has already
|
||||
* registered it's distributed lmmio range.
|
||||
*/
|
||||
if (truncate_pat_collision(&iomem_resource,
|
||||
&(ldev->hba.lmmio_space))) {
|
||||
|
||||
printk(KERN_WARNING "LBA: lmmio_space [%lx/%lx] duplicate!\n",
|
||||
(long)ldev->hba.lmmio_space.start,
|
||||
(long)ldev->hba.lmmio_space.end);
|
||||
} else {
|
||||
if (ldev->hba.lmmio_space.flags) {
|
||||
err = request_resource(&iomem_resource, &(ldev->hba.lmmio_space));
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR "FAILED: lba_fixup_bus() request for "
|
||||
"lmmio_space [%lx/%lx]\n",
|
||||
(long)ldev->hba.lmmio_space.start,
|
||||
(long)ldev->hba.lmmio_space.end);
|
||||
} else
|
||||
bus->resource[i++] = &(ldev->hba.lmmio_space);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
@@ -728,7 +707,6 @@ lba_fixup_bus(struct pci_bus *bus)
|
||||
lba_dump_res(&iomem_resource, 2);
|
||||
BUG();
|
||||
}
|
||||
bus->resource[i++] = &(ldev->hba.gmmio_space);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1404,6 +1382,7 @@ static int __init
|
||||
lba_driver_probe(struct parisc_device *dev)
|
||||
{
|
||||
struct lba_device *lba_dev;
|
||||
LIST_HEAD(resources);
|
||||
struct pci_bus *lba_bus;
|
||||
struct pci_ops *cfg_ops;
|
||||
u32 func_class;
|
||||
@@ -1518,10 +1497,41 @@ lba_driver_probe(struct parisc_device *dev)
|
||||
if (lba_dev->hba.bus_num.start < lba_next_bus)
|
||||
lba_dev->hba.bus_num.start = lba_next_bus;
|
||||
|
||||
/* Overlaps with elmmio can (and should) fail here.
|
||||
* We will prune (or ignore) the distributed range.
|
||||
*
|
||||
* FIXME: SBA code should register all elmmio ranges first.
|
||||
* that would take care of elmmio ranges routed
|
||||
* to a different rope (already discovered) from
|
||||
* getting registered *after* LBA code has already
|
||||
* registered it's distributed lmmio range.
|
||||
*/
|
||||
if (truncate_pat_collision(&iomem_resource,
|
||||
&(lba_dev->hba.lmmio_space))) {
|
||||
printk(KERN_WARNING "LBA: lmmio_space [%lx/%lx] duplicate!\n",
|
||||
(long)lba_dev->hba.lmmio_space.start,
|
||||
(long)lba_dev->hba.lmmio_space.end);
|
||||
lba_dev->hba.lmmio_space.flags = 0;
|
||||
}
|
||||
|
||||
pci_add_resource(&resources, &lba_dev->hba.io_space);
|
||||
if (lba_dev->hba.elmmio_space.start)
|
||||
pci_add_resource(&resources, &lba_dev->hba.elmmio_space);
|
||||
if (lba_dev->hba.lmmio_space.flags)
|
||||
pci_add_resource(&resources, &lba_dev->hba.lmmio_space);
|
||||
if (lba_dev->hba.gmmio_space.flags)
|
||||
pci_add_resource(&resources, &lba_dev->hba.gmmio_space);
|
||||
|
||||
dev->dev.platform_data = lba_dev;
|
||||
lba_bus = lba_dev->hba.hba_bus =
|
||||
pci_scan_bus_parented(&dev->dev, lba_dev->hba.bus_num.start,
|
||||
cfg_ops, NULL);
|
||||
pci_create_root_bus(&dev->dev, lba_dev->hba.bus_num.start,
|
||||
cfg_ops, NULL, &resources);
|
||||
if (!lba_bus) {
|
||||
pci_free_resource_list(&resources);
|
||||
return 0;
|
||||
}
|
||||
|
||||
lba_bus->subordinate = pci_scan_child_bus(lba_bus);
|
||||
|
||||
/* This is in lieu of calling pci_assign_unassigned_resources() */
|
||||
if (is_pdc_pat()) {
|
||||
@@ -1551,10 +1561,8 @@ lba_driver_probe(struct parisc_device *dev)
|
||||
lba_dev->flags |= LBA_FLAG_SKIP_PROBE;
|
||||
}
|
||||
|
||||
if (lba_bus) {
|
||||
lba_next_bus = lba_bus->subordinate + 1;
|
||||
pci_bus_add_devices(lba_bus);
|
||||
}
|
||||
lba_next_bus = lba_bus->subordinate + 1;
|
||||
pci_bus_add_devices(lba_bus);
|
||||
|
||||
/* Whew! Finally done! Tell services we got this one covered. */
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user