forked from Minki/linux
[PATCH] pci: fixup parent subordinate busnr
I believe the change that broke things is introduction of pci_fixup_parent_subordinate_busnr(). The patch here does two things: - hunk #1 should fix the problems you've seen when you boot without additional "pci" kernel options; - hunk #2 supposedly fixes boot with "pci=assign-busses" option which otherwise hangs Acer TM81xx machines as reported. Please try this with and without "pci=assign-busses". If it boots, I'd like to see 'lspci -vvx' for both cases. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
bfab08c097
commit
12f44f46bc
@ -402,6 +402,12 @@ static void pci_enable_crs(struct pci_dev *dev)
|
||||
static void __devinit pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
|
||||
{
|
||||
struct pci_bus *parent = child->parent;
|
||||
|
||||
/* Attempts to fix that up are really dangerous unless
|
||||
we're going to re-assign all bus numbers. */
|
||||
if (!pcibios_assign_all_busses())
|
||||
return;
|
||||
|
||||
while (parent->parent && parent->subordinate < max) {
|
||||
parent->subordinate = max;
|
||||
pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
|
||||
@ -478,8 +484,18 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max
|
||||
* We need to assign a number to this bus which we always
|
||||
* do in the second pass.
|
||||
*/
|
||||
if (!pass)
|
||||
if (!pass) {
|
||||
if (pcibios_assign_all_busses())
|
||||
/* Temporarily disable forwarding of the
|
||||
configuration cycles on all bridges in
|
||||
this bus segment to avoid possible
|
||||
conflicts in the second pass between two
|
||||
bridges programmed with overlapping
|
||||
bus ranges. */
|
||||
pci_write_config_dword(dev, PCI_PRIMARY_BUS,
|
||||
buses & ~0xffffff);
|
||||
return max;
|
||||
}
|
||||
|
||||
/* Clear errors */
|
||||
pci_write_config_word(dev, PCI_STATUS, 0xffff);
|
||||
|
Loading…
Reference in New Issue
Block a user