]> git.baikalelectronics.ru Git - kernel.git/commit
PCI: fall back to original BIOS BAR addresses
authorBjorn Helgaas <bjorn.helgaas@hp.com>
Thu, 15 Jul 2010 15:41:42 +0000 (09:41 -0600)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 16 Jul 2010 18:39:48 +0000 (11:39 -0700)
commit870e96715e0ab87fa563fae3e9cbfa63c6e83e56
tree0104345d24d5fb79842ffd563ea69fdf2906931d
parent8b659b56144b0a96bc698ba53b442f358e3e1133
PCI: fall back to original BIOS BAR addresses

If we fail to assign resources to a PCI BAR, this patch makes us try the
original address from BIOS rather than leaving it disabled.

Linux tries to make sure all PCI device BARs are inside the upstream
PCI host bridge or P2P bridge apertures, reassigning BARs if necessary.
Windows does similar reassignment.

Before this patch, if we could not move a BAR into an aperture, we left
the resource unassigned, i.e., at address zero.  Windows leaves such BARs
at the original BIOS addresses, and this patch makes Linux do the same.

This is a bit ugly because we disable the resource long before we try to
reassign it, so we have to keep track of the BIOS BAR address somewhere.
For lack of a better place, I put it in the struct pci_dev.

I think it would be cleaner to attempt the assignment immediately when the
claim fails, so we could easily remember the original address.  But we
currently claim motherboard resources in the middle, after attempting to
claim PCI resources and before assigning new PCI resources, and changing
that is a fairly big job.

Addresses https://bugzilla.kernel.org/show_bug.cgi?id=16263

Reported-by: Andrew <nitr0@seti.kr.ua>
Tested-by: Andrew <nitr0@seti.kr.ua>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
arch/x86/pci/i386.c
drivers/pci/setup-res.c
include/linux/pci.h