PCI: Workaround invalid P2P bridge bus numbers
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 20 Oct 2008 23:06:29 +0000 (10:06 +1100)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 22 Oct 2008 23:42:44 +0000 (16:42 -0700)
commita1c19894b786f10c76ac40e93c6b5d70c9b946d2
tree4a03c1d7b9958c6fe328eeea13ee31a0edbb4478
parent0b8b0dca9aad94878adaf4520f3f12bf9813f329
PCI: Workaround invalid P2P bridge bus numbers

Some firmware fail to properly configure P2P bridges, leaving them
with invalid bus numbers. In some cases, this happens on some embedded
4xx boards as the result of the kernel allocating different bus space
than the firmware does to host bridges while not setting
pcibios_assign_all_busses() for various reasons. In other cases, it can
just be bogus firmware.

This adds some sanity checking to the PCI probing code. If a bridge is
found whose primary bus number doesn't match the bus it's sitting on,
or whose secondary bus number not strictly above it's primary bus
number, then the bridge bus numbers are deconfigured in the first pass
of pci_scan_bridge() to be re-assigned in the second pass.

Tested-by: "Ayman El-Khashab" <AymanE@tanisys.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/probe.c