[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
-gerrit
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"
http://www.coreboot.org/pipermail/coreboot/2010-October/061508.html
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:
...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...
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;
-#if CONFIG_VGA_BRIDGE_SETUP == 1
- set_vga_bridge_bits();
-#endif
-
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.");
+#if CONFIG_VGA_BRIDGE_SETUP == 1
+ set_vga_bridge_bits();
+#endif
+
printk(BIOS_INFO, "Done allocating resources.\n");
}
More information about the coreboot
mailing list