From ink@jurassic.park.msu.ru Thu Jul 14 04:56:54 2005 Date: Thu, 14 Jul 2005 15:53:44 +0400 From: Ivan Kokshaysky To: Greg KH , Andrew Morton Cc: Jon Smirl Subject: PCI: remove PCI_BRIDGE_CTL_VGA handling from setup-bus.c Message-ID: <20050714155344.A27478@jurassic.park.msu.ru> The setup-bus code doesn't work correctly for configurations with more than one display adapter in the same PCI domain. This stuff actually is a leftover of an early 2.4 PCI setup code and apparently it stopped working after some "bridge_ctl" changes. So the best thing we can do is just to remove it and rely on the fact that any firmware *has* to configure VGA port forwarding for the boot display device properly. But then we need to ensure that the bus->bridge_ctl will always contain valid information collected at the probe time, therefore the following change in pci_scan_bridge() is needed. Signed-off-by: Ivan Kokshaysky Signed-off-by: Greg Kroah-Hartman --- drivers/pci/probe.c | 2 +- drivers/pci/setup-bus.c | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) --- gregkh-2.6.orig/drivers/pci/probe.c 2005-07-26 16:28:31.000000000 -0700 +++ gregkh-2.6/drivers/pci/probe.c 2005-07-26 16:38:11.000000000 -0700 @@ -507,7 +507,7 @@ pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses); if (!is_cardbus) { - child->bridge_ctl = PCI_BRIDGE_CTL_NO_ISA; + child->bridge_ctl = bctl | PCI_BRIDGE_CTL_NO_ISA; /* * Adjust subordinate busnr in parent buses. * We do this before scanning for children because --- gregkh-2.6.orig/drivers/pci/setup-bus.c 2005-07-13 09:45:06.000000000 -0700 +++ gregkh-2.6/drivers/pci/setup-bus.c 2005-07-26 16:38:11.000000000 -0700 @@ -51,8 +51,6 @@ struct resource_list head, *list, *tmp; int idx; - bus->bridge_ctl &= ~PCI_BRIDGE_CTL_VGA; - head.next = NULL; list_for_each_entry(dev, &bus->devices, bus_list) { u16 class = dev->class >> 8; @@ -62,10 +60,6 @@ class == PCI_CLASS_BRIDGE_HOST) continue; - if (class == PCI_CLASS_DISPLAY_VGA || - class == PCI_CLASS_NOT_DEFINED_VGA) - bus->bridge_ctl |= PCI_BRIDGE_CTL_VGA; - pdev_sort_resources(dev, &head); } @@ -509,12 +503,6 @@ pbus_assign_resources_sorted(bus); - if (bus->bridge_ctl & PCI_BRIDGE_CTL_VGA) { - /* Propagate presence of the VGA to upstream bridges */ - for (b = bus; b->parent; b = b->parent) { - b->bridge_ctl |= PCI_BRIDGE_CTL_VGA; - } - } list_for_each_entry(dev, &bus->devices, bus_list) { b = dev->subordinate; if (!b)