[coreboot] New patch to review for coreboot: 19c16ed Simplify VGA card discovery

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Fri Jul 20 14:28:27 CEST 2012


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1255

-gerrit

commit 19c16edf950bd34d28ae06413bdcc31c75cfa821
Author: Patrick Georgi <patrick.georgi at secunet.com>
Date:   Fri Jul 20 12:16:17 2012 +0200

    Simplify VGA card discovery
    
    We were handling vga, vga_first, vga_last, vga_onboard just to determine
    an onboard chip and the first plugin card.
    We were also traversing the devices manually instead of using the utility
    functions we have, for the chance that there are non-VGA cards we need to
    cope with (but why would they require VGA-style handling?)
    
    Change-Id: I8aa73aefa102725a64287f78a59de3d5dda1c7f2
    Signed-off-by: Patrick Georgi <patrick.georgi at secunet.com>
---
 src/devices/device.c |   43 +++++++++++++------------------------------
 1 files changed, 13 insertions(+), 30 deletions(-)

diff --git a/src/devices/device.c b/src/devices/device.c
index de27e88..9753de8 100644
--- a/src/devices/device.c
+++ b/src/devices/device.c
@@ -715,52 +715,35 @@ static void set_vga_bridge_bits(void)
 	 */
 
 	/* FIXME: Handle the VGA palette snooping. */
-	struct device *dev, *vga, *vga_onboard, *vga_first, *vga_last;
+	struct device *dev, *vga, *vga_onboard;
 	struct bus *bus;
 
 	bus = 0;
 	vga = 0;
 	vga_onboard = 0;
-	vga_first = 0;
-	vga_last = 0;
-
-	for (dev = all_devices; dev; dev = dev->next) {
 
+	dev = NULL;
+	while ((dev = dev_find_class(PCI_CLASS_DISPLAY_VGA << 8, dev))) {
 		if (!dev->enabled)
 			continue;
 
-		if (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
-		    ((dev->class >> 8) != PCI_CLASS_DISPLAY_OTHER)) {
-			if (!vga_first) {
-				if (dev->on_mainboard)
-					vga_onboard = dev;
-				else
-					vga_first = dev;
-			} else {
-				if (dev->on_mainboard)
-					vga_onboard = dev;
-				else
-					vga_last = dev;
-			}
+		printk(BIOS_DEBUG, "found VGA at %s\n", dev_path(dev));
 
-			/* It isn't safe to enable other VGA cards. */
-			dev->command &= ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO);
+		if (dev->on_mainboard) {
+			vga_onboard = dev;
+		} else if (!vga) {
+			vga = dev;
 		}
-	}
 
-	vga = vga_last;
+		/* It isn't safe to enable all VGA cards. */
+		dev->command &= ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO);
+	};
 
 	if (!vga)
-		vga = vga_first;
+		vga = vga_onboard;
 
-#if CONFIG_ONBOARD_VGA_IS_PRIMARY
-	if (vga_onboard)	/* Will use onboard VGA as primary. */
-#else
-	if (!vga)		/* Will use last add-on adapter as primary. */
-#endif
-	{
+	if (CONFIG_ONBOARD_VGA_IS_PRIMARY && vga_onboard)
 		vga = vga_onboard;
-	}
 
 	/* If we prefer plugin VGA over chipset VGA, the chipset might
 	   want to know. */




More information about the coreboot mailing list