android_kernel_samsung_sm8650/drivers/pci
Bjorn Helgaas b126b4703a PCI: allocate bus resources from the top down
Allocate space from the highest-address PCI bus resource first, then work
downward.

Previously, we looked for space in PCI host bridge windows in the order
we discovered the windows.  For example, given the following windows
(discovered via an ACPI _CRS method):

    pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff]
    pci_root PNP0A03:00: host bridge window [mem 0x000c0000-0x000effff]
    pci_root PNP0A03:00: host bridge window [mem 0x000f0000-0x000fffff]
    pci_root PNP0A03:00: host bridge window [mem 0xbff00000-0xf7ffffff]
    pci_root PNP0A03:00: host bridge window [mem 0xff980000-0xff980fff]
    pci_root PNP0A03:00: host bridge window [mem 0xff97c000-0xff97ffff]
    pci_root PNP0A03:00: host bridge window [mem 0xfed20000-0xfed9ffff]

we attempted to allocate from [mem 0x000a0000-0x000bffff] first, then
[mem 0x000c0000-0x000effff], and so on.

With this patch, we allocate from [mem 0xff980000-0xff980fff] first, then
[mem 0xff97c000-0xff97ffff], [mem 0xfed20000-0xfed9ffff], etc.

Allocating top-down follows Windows practice, so we're less likely to
trip over BIOS defects in the _CRS description.

On the machine above (a Dell T3500), the [mem 0xbff00000-0xbfffffff] region
doesn't actually work and is likely a BIOS defect.  The symptom is that we
move the AHCI controller to 0xbff00000, which leads to "Boot has failed,
sleeping forever," a BUG in ahci_stop_engine(), or some other boot failure.

Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c43
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=620313
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=629933
Reported-by: Brian Bloniarz <phunge0@hotmail.com>
Reported-and-tested-by: Stefan Becker <chemobejk@gmail.com>
Reported-by: Denys Vlasenko <dvlasenk@redhat.com>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2010-10-26 15:33:37 -07:00
..
hotplug PCI hotplug: ibmphp-hpc: semaphore cleanup 2010-10-15 13:09:48 -07:00
pcie PCI/PCIe/AER: Disable native AER service if BIOS has precedence 2010-10-15 13:09:50 -07:00
.gitignore Add some basic .gitignore files 2005-10-18 08:26:15 -07:00
access.c PCI: output FW warning in pci_read/write_vpd 2010-05-18 15:00:25 -07:00
bus.c PCI: allocate bus resources from the top down 2010-10-26 15:33:37 -07:00
dmar.c Merge git://git.infradead.org/iommu-2.6 2010-05-21 17:25:01 -07:00
hotplug-pci.c PCI: fix section mismatch warning in pci_scan_child_bus 2008-03-04 15:07:03 -08:00
hotplug.c Driver core: change add_uevent_var to use a struct 2007-10-12 14:51:01 -07:00
htirq.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
intel-iommu.c Merge git://git.infradead.org/iommu-2.6 2010-09-27 12:25:10 -07:00
intr_remapping.c Merge git://git.infradead.org/iommu-2.6 2010-08-15 17:34:20 -07:00
intr_remapping.h intr-remap: generic support for remapping HPET MSIs 2009-08-27 23:33:20 +02:00
ioapic.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
iov.c PCI: fix pci_resource_alignment prototype 2010-09-09 13:41:25 -07:00
iova.c intel-iommu: Remove superfluous iova_alloc_lock from IOVA code 2009-07-15 08:17:02 +01:00
irq.c PCI: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-07 11:12:23 -08:00
Kconfig PCI: change PCI_MSI help text to recommend enabling 2010-05-11 12:01:10 -07:00
Makefile PCI: use new ccflags variable in Makefile 2010-10-17 20:03:04 -07:00
msi.c PCI: MSI: Restore read_msi_msg_desc(); add get_cached_msi_msg_desc() 2010-07-30 09:41:39 -07:00
msi.h PCI: add PCI_MSIX_TABLE/PBA defines 2010-10-17 20:03:03 -07:00
pci-acpi.c Merge branch 'acpica' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2010-08-07 17:08:30 -07:00
pci-driver.c PCI: change device runtime PM settings for probe and remove 2010-07-30 09:29:09 -07:00
pci-label.c PCI: update for owner removal from struct device_attribute 2010-08-04 14:23:55 -07:00
pci-stub.c PCI: pci-stub: add pci_stub.ids parameter 2009-09-09 13:44:34 -07:00
pci-sysfs.c PCI: export SMBIOS provided firmware instance and label to sysfs 2010-07-30 09:36:01 -07:00
pci.c PCI: Add support for polling PME state on suspended legacy PCI devices 2010-10-17 20:03:06 -07:00
pci.h PCI: Export some PCI PM functionality 2010-10-17 20:03:06 -07:00
probe.c PCI: log vendor/device ID always 2010-10-17 20:03:05 -07:00
proc.c PCI: kill BKL in /proc/pci 2010-10-15 13:09:47 -07:00
quirks.c PCI: add quirk for non-symmetric-mode irq routing to versions 0 and 4 of the MCP55 northbridge 2010-10-15 13:09:50 -07:00
remove.c PCI: eliminate redundant pci_stop_dev() call from pci_destroy_dev() 2009-06-11 12:04:19 -07:00
rom.c PCI: fix rom.c kernel-doc warning 2009-02-13 12:01:56 -08:00
search.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-bus.c PCI hotplug: make sure child bridges are enabled at hotplug time 2010-07-30 09:29:16 -07:00
setup-irq.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-res.c PCI: fix message typo 2010-10-17 20:03:05 -07:00
slot.c PCI: bus speed strings should be const 2010-08-31 15:28:00 -07:00
syscall.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
vpd.c pci: Add helper to search for VPD keywords 2010-02-28 00:43:33 -08:00