When loading an option ROM use the class stored in the device to
authorMark Marshall <mark.marshall@csr.com>
Thu, 5 Nov 2009 08:10:12 +0000 (08:10 +0000)
committerStefan Reinauer <stepan@openbios.org>
Thu, 5 Nov 2009 08:10:12 +0000 (08:10 +0000)
decide whether the option ROM is a special VGA type.

An S3 card that I've got has the wrong class in the VGA BIOS.
(A Stealth 64 DRAM T PCI, from 1994 - BIOS V2.02)

Signed-off-by: Mark Marshall <mark.marshall@csr.com>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4909 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

src/devices/pci_rom.c

index f64a9e8c5521d8c7252d2d118449a0405e651d8d..cafeed4897b2428a667937f45aa5802df09a2ba4 100644 (file)
@@ -116,7 +116,10 @@ struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_heade
 
        rom_size = rom_header->size * 512;
 
-       if (PCI_CLASS_DISPLAY_VGA == rom_data->class_hi) {
+       // We check to see if the device thinks it is a VGA device not
+       // whether the ROM image is for a VGA device because some
+       // devices have a mismatch between the hardware and the ROM
+       if (PCI_CLASS_DISPLAY_VGA == (dev->class >> 8)) {
 #if CONFIG_CONSOLE_VGA == 1 && CONFIG_CONSOLE_VGA_MULTI == 0
                extern device_t vga_pri;        // the primary vga device, defined in device.c
                if (dev != vga_pri) return NULL; // only one VGA supported