[patch 15/29] PCI: remove PCI_BRIDGE_CTL_VGA handling from setup-bus.c

Greg KH
2005-07-30T00:50:40Z

From: Ivan Kokshaysky <ink@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 <ink@jurassic.park.msu.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
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-29 11:29:50.000000000 -0700
+++ gregkh-2.6/drivers/pci/probe.c 2005-07-29 11:36:23.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-29 11:29:50.000000000 -0700
+++ gregkh-2.6/drivers/pci/setup-bus.c 2005-07-29 11:36:23.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)

--