• Bjorn Helgaas's avatar
    PCI: Don't attempt to claim shadow copies of ROM · 16d917b1
    Bjorn Helgaas authored
    If we're using a shadow copy of a PCI device ROM, the shadow copy is in RAM
    and the device never sees accesses to it and doesn't respond to it.  We
    don't have to route the shadow range to the PCI device, and the device
    doesn't have to claim the range.
    
    Previously we treated the shadow copy as though it were the ROM BAR, and we
    failed to claim it because the region wasn't routed to the device:
    
      pci 0000:01:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
      pci_bus 0000:01: Allocating resources
      pci 0000:01:00.0: can't claim BAR 6 [mem 0x000c0000-0x000dffff]: no compatible bridge window
    
    The failure path of pcibios_allocate_dev_rom_resource() cleared out the
    resource start address, which also caused the following ioremap() warning:
    
      WARNING: CPU: 0 PID: 116 at /build/linux-akdJXO/linux-4.8.0/arch/x86/mm/ioremap.c:121 __ioremap_caller+0x1ec/0x370
      ioremap on RAM at 0x0000000000000000 - 0x000000000001ffff
    
    Handle an option ROM shadow copy as RAM, without trying to insert it into
    the iomem resource tree.
    
    This fixes a regression caused by 0c0e0736 ("PCI: Set ROM shadow
    location in arch code, not in PCI core"), which appeared in v4.6.  The
    regression causes video device initialization to fail.  This was reported
    on AMD Turks, but it likely affects others as well.
    
    Fixes: 0c0e0736 ("PCI: Set ROM shadow location in arch code, not in PCI core")
    Reported-and-tested-by: default avatarVecu Bosseur <vecu.bosseur@gmail.com>
    Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1627496
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=175391
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=1352272Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    CC: stable@vger.kernel.org	# v4.6+
    16d917b1
setup-res.c 10.5 KB