Kerry Sheh ([email protected]) just uploaded a new patch set to gerrit, which 
you can find at http://review.coreboot.org/489

-gerrit

commit 23660d2e26e4c63b8b2eca3c59d3bf756acadf5d
Author: Kerry Sheh <[email protected]>
Date:   Fri Dec 16 11:58:47 2011 +0800

    Fix multipleVGA cards resource conflict on Windows
    
    If both legacy graphic cards decode the IO range 3B0-3DF and
    MEM range A00000-BFFFF, Windows 7 complain a resource conflict,
    so only one VGA card can works at the same time.
    
    There is a discuss in coreboot mail list before,
    please reference thread: "how to prevent legacy resource conflictwith   
multipleVGA cards"
    
    Linux using VGA Arbiter module(vgaarb) to resolve this resource conflict,
    Please see the following linux dmesg log, more information can be found in
    Linux source dir Documentation/vgaarbiter.txt.
    But it seems that windows don't dealwith this conflict.
    ~# dmesg | grep -i vgaarb
    [    0.774076] vgaarb: device added: 
PCI:0000:00:01.0,decodes=io+mem,owns=io+mem
    [    0.776065] vgaarb: device added: 
PCI:0000:01:00.0,decodes=io+mem,owns=none,l
    [    0.780051] vgaarb: loaded
    [    0.784049] vgaarb: bridge control possible 0000:01:00.0
    [    0.788050] vgaarb: bridge control possible 0000:00:01.0
    
    For the second legacy graphic device, coreboot already disabled the
    IO and MEM decode in function set_vga_bridge_bits().
    But it will be enabled again in function pci_set_resource(),
    if the second legacy graphic device take any IO/MEM resources.
    
    Following log printed by enable_resources() shows the problem:
    ...snip...
    PCI: 00:00.0 cmd <- 06
    PCI: 00:01.0 subsystem <- 1022/1410
    PCI: 00:01.0 cmd <- 07                <== The first graphic device
    PCI: 00:01.1 subsystem <- 1022/1410
    PCI: 00:01.1 cmd <- 02
    PCI: 00:02.0 bridge ctrl <- 0003
    PCI: 00:02.0 cmd <- 07
    ...snip...
    PCI: 01:00.0 cmd <- 03                <== The second graphic device
    PCI: 01:00.1 cmd <- 02
    PCI: 02:00.0 cmd <- 02
    PCI: 03:00.0 cmd <- 03
    done.
    ...snip...
    
    This patch tries to disable IO & MEM decode for the second graphic device,
    the resource conflict in windows7 resolved.
    
    Signed-off-by: Kerry Sheh <[email protected]>
    Signed-off-by: Kerry Sheh <[email protected]>
    Change-Id: I0de5e3761b51e2723d9c1dc0c39fff692e3a779d
---
 src/devices/pci_device.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c
index 2ccb38a..0d57977 100644
--- a/src/devices/pci_device.c
+++ b/src/devices/pci_device.c
@@ -494,6 +494,20 @@ static void pci_set_resource(struct device *dev, struct 
resource *resource)
                        dev->command |= PCI_COMMAND_IO;
                if (resource->flags & IORESOURCE_PCI_BRIDGE)
                        dev->command |= PCI_COMMAND_MASTER;
+
+               /* It isn't safe to enable other VGA cards,
+                * otherwise windows will report resource conflict when
+                * more than one legacy graphic card in the system.
+                */
+#if CONFIG_VGA_BRIDGE_SETUP == 1
+               extern device_t vga_pri;
+               if (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
+                       ((dev->class >> 8) != PCI_CLASS_DISPLAY_OTHER)) {
+                       if (dev != vga_pri) {
+                               dev->command &= ~(PCI_COMMAND_IO | 
PCI_COMMAND_MEMORY);
+                       }
+               }
+#endif
        }
 
        /* Get the base address. */

-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to