[coreboot] Patch set updated for coreboot: b7929ad Fix multipleVGA cards resource conflict on Windows

Kerry Sheh (shekairui@gmail.com) gerrit at coreboot.org
Wed Jan 4 13:06:40 CET 2012

Kerry Sheh (shekairui at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/489


commit b7929add7bf1b40795e0a16ab08fc47858971ccc
Author: Kerry Sheh <shekairui at gmail.com>
Date:   Wed Jan 4 20:51:47 2012 +0800

    Fix multipleVGA cards resource conflict on Windows
    If multiple VGA-compatible legacy graphic cards decode the IO range
    3B0-3BB, 3C0-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 discussion 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 vga-compatible graphic device take any IO/MEM resources.
    Following log printed by enable_resources() shows the problem:
    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
    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
    The IO & MEM decoding on the second vga graphic device should be disabled.
    Please reference PCI spec. section 3.10 in detail.
    set_vga_bridge_bits() would do this work for us, it did the right thing,
    but was put to the wrong place, the setting would be overwritten by
    assign_resources() later.
    In order to make sure the set_vga_bridge_bits() setting not be
    overwritten by others, moving the call of set_vga_bridge_bits()
    to the end of dev_configure(), instead of at the beginning.
    This patch resolved the dual graphic cards resource conflict in windows7,
    multiple vga-compatible graphic cards can work together in windows7.
    Signed-off-by: Kerry Sheh <shekairui at gmail.com>
    Signed-off-by: Kerry Sheh <kerry.she at amd.com>
    Change-Id: I0de5e3761b51e2723d9c1dc0c39fff692e3a779d
 src/devices/device.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/devices/device.c b/src/devices/device.c
index a2619bf..8ad9787 100644
--- a/src/devices/device.c
+++ b/src/devices/device.c
@@ -932,10 +932,6 @@ void dev_configure(void)
 	struct device *root;
 	struct device *child;
-	set_vga_bridge_bits();
 	printk(BIOS_INFO, "Allocating resources...\n");
 	root = &dev_root;
@@ -1028,6 +1024,10 @@ void dev_configure(void)
 	printk(BIOS_INFO, "Done setting resources.\n");
 	print_resource_tree(root, BIOS_SPEW, "After assigning values.");
+	set_vga_bridge_bits();
 	printk(BIOS_INFO, "Done allocating resources.\n");

More information about the coreboot mailing list