linux/arch/x86/pci
Bjorn Helgaas 2491762cfb x86/PCI: use host bridge _CRS info on ASRock ALiveSATA2-GLAN
This DMI quirk turns on "pci=use_crs" for the ALiveSATA2-GLAN because
amd_bus.c doesn't handle this system correctly.

The system has a single HyperTransport I/O chain, but has two PCI host
bridges to buses 00 and 80.  amd_bus.c learns the MMIO range associated
with buses 00-ff and that this range is routed to the HT chain hosted at
node 0, link 0:

    bus: [00, ff] on node 0 link 0
    bus: 00 index 1 [mem 0x80000000-0xfcffffffff]

This includes the address space for both bus 00 and bus 80, and amd_bus.c
assumes it's all routed to bus 00.

We find device 80:01.0, which BIOS left in the middle of that space, but
we don't find a bridge from bus 00 to bus 80, so we conclude that 80:01.0
is unreachable from bus 00, and we move it from the original, working,
address to something outside the bus 00 aperture, which does not work:

    pci 0000:80:01.0: reg 10: [mem 0xfebfc000-0xfebfffff 64bit]
    pci 0000:80:01.0: BAR 0: assigned [mem 0xfd00000000-0xfd00003fff 64bit]

The BIOS told us everything we need to know to handle this correctly,
so we're better off if we just pay attention, which lets us leave the
80:01.0 device at the original, working, address:

    ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-7f])
    pci_root PNP0A03:00: host bridge window [mem 0x80000000-0xff37ffff]
    ACPI: PCI Root Bridge [PCI1] (domain 0000 [bus 80-ff])
    pci_root PNP0A08:00: host bridge window [mem 0xfebfc000-0xfebfffff]

This was a regression between 2.6.33 and 2.6.34.  In 2.6.33, amd_bus.c
was used only when we found multiple HT chains.  3e3da00c01, which
enabled amd_bus.c even on systems with a single HT chain, caused this
failure.

This quirk was written by Graham.  If we ever enable "pci=use_crs" for
machines from 2006 or earlir, this quirk should be removed.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=16007

Cc: stable@kernel.org
Reported-by: Graham Ramsey <ramsey.graham@ntlworld.com>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2010-07-30 09:30:31 -07:00
..
acpi.c x86/PCI: use host bridge _CRS info on ASRock ALiveSATA2-GLAN 2010-07-30 09:30:31 -07:00
amd_bus.c x86: Change range end to start+size 2010-02-10 17:47:17 -08:00
broadcom_bus.c PCI: read memory ranges out of Broadcom CNB20LE host bridge 2010-05-21 14:43:46 -07:00
bus_numa.c Merge branch 'x86-bootmem-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-03-03 08:15:05 -08:00
bus_numa.h Merge branch 'x86-bootmem-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-03-03 08:15:05 -08:00
common.c x86/PCI: Add option to not assign BAR's if not already assigned 2010-07-30 09:29:12 -07:00
direct.c x86/PCI: Convert pci_config_lock to raw_spinlock 2010-05-11 12:01:09 -07:00
early.c x86/PCI: remove early PCI pr_debug statements 2009-11-24 15:25:19 -08:00
fixup.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2009-04-01 09:47:12 -07:00
i386.c PCI: fall back to original BIOS BAR addresses 2010-07-16 11:39:48 -07:00
init.c x86, olpc: Use pci subarch init for OLPC 2010-02-25 19:26:23 -08:00
irq.c x86/PCI: irq and pci_ids patch for additional Intel Cougar Point DeviceIDs 2010-05-11 12:01:40 -07:00
legacy.c x86/PCI: pci, fix section mismatch 2010-07-30 09:29:09 -07:00
Makefile PCI: read memory ranges out of Broadcom CNB20LE host bridge 2010-05-21 14:43:46 -07:00
mmconfig_32.c x86/PCI: Convert pci_config_lock to raw_spinlock 2010-05-11 12:01:09 -07:00
mmconfig_64.c x86/PCI: MMCONFIG: add lookup function 2009-11-24 15:30:36 -08:00
mmconfig-shared.c x86/PCI: make ACPI MCFG reserved error messages ACPI specific 2010-05-18 15:03:27 -07:00
mrst.c x86, pci, mrst: Add extra sanity check in walking the PCI extended cap chain 2010-07-16 16:52:15 -07:00
numaq_32.c x86/PCI: Convert pci_config_lock to raw_spinlock 2010-05-11 12:01:09 -07:00
olpc.c x86, olpc: Use pci subarch init for OLPC 2010-02-25 19:26:23 -08:00
pcbios.c x86/PCI: Convert pci_config_lock to raw_spinlock 2010-05-11 12:01:09 -07:00
visws.c x86: Move pci init function to x86_init 2010-02-19 16:12:29 -08:00