• Bjorn Helgaas's avatar
    x86/PCI: fix bogus host bridge window start/end alignment from _CRS · 03db42ad
    Bjorn Helgaas authored
    PCI device BARs are guaranteed to start and end on at least a four-byte
    (I/O) or a sixteen-byte (MMIO) boundary because they're aligned on their
    size and the low BAR bits are reserved.  PCI-to-PCI bridge apertures
    have even larger alignment restrictions.
    
    However, some BIOSes (e.g., HP DL360 BIOS P31) report host bridge windows
    like "[io  0x0000-0x2cfe]".  This is wrong because it excludes the last
    port at 0x2cff: it's impossible for a downstream device to claim 0x2cfe
    without also claiming 0x2cff.  In fact, this BIOS configures a device
    behind the bridge to "[io  0x2c00-0x2cff]", so we know the window actually
    does include 0x2cff.
    
    This patch rounds the start and end of apertures to the appropriate
    boundary.  I experimentally determined that Windows contains a similar
    workaround; details here:
    
        http://bugzilla.kernel.org/show_bug.cgi?id=14337Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    03db42ad
acpi.c 7.43 KB