Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10f4338c authored by Ivan Kokshaysky's avatar Ivan Kokshaysky Committed by Linus Torvalds
Browse files

[PATCH] PCI: remove PCI_BRIDGE_CTL_VGA handling from setup-bus.c



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: default avatarIvan Kokshaysky <ink@jurassic.park.msu.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 761a3ac0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -507,7 +507,7 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max
		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
+0 −12
Original line number Diff line number Diff line
@@ -51,8 +51,6 @@ pbus_assign_resources_sorted(struct pci_bus *bus)
	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 @@ pbus_assign_resources_sorted(struct pci_bus *bus)
		    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 @@ pci_bus_assign_resources(struct pci_bus *bus)

	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)