提交 3641b536 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart

* master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart:
  [AGPGART] VIA and SiS AGP chipsets are x86-only
  [AGPGART] agp-amd64: section mismatches with HOTPLUG=n
  [AGPGART] Fix up misprogrammed bridges with incorrect AGPv2 rates.
...@@ -86,7 +86,7 @@ config AGP_NVIDIA ...@@ -86,7 +86,7 @@ config AGP_NVIDIA
config AGP_SIS config AGP_SIS
tristate "SiS chipset support" tristate "SiS chipset support"
depends on AGP depends on AGP && X86
help help
This option gives you AGP support for the GLX component of This option gives you AGP support for the GLX component of
X on Silicon Integrated Systems [SiS] chipsets. X on Silicon Integrated Systems [SiS] chipsets.
...@@ -103,7 +103,7 @@ config AGP_SWORKS ...@@ -103,7 +103,7 @@ config AGP_SWORKS
config AGP_VIA config AGP_VIA
tristate "VIA chipset support" tristate "VIA chipset support"
depends on AGP depends on AGP && X86
help help
This option gives you AGP support for the GLX component of This option gives you AGP support for the GLX component of
X on VIA MVP3/Apollo Pro chipsets. X on VIA MVP3/Apollo Pro chipsets.
......
...@@ -419,6 +419,31 @@ static void agp_v2_parse_one(u32 *requested_mode, u32 *bridge_agpstat, u32 *vga_ ...@@ -419,6 +419,31 @@ static void agp_v2_parse_one(u32 *requested_mode, u32 *bridge_agpstat, u32 *vga_
*requested_mode &= ~AGP2_RESERVED_MASK; *requested_mode &= ~AGP2_RESERVED_MASK;
} }
/*
* Some dumb bridges are programmed to disobey the AGP2 spec.
* This is likely a BIOS misprogramming rather than poweron default, or
* it would be a lot more common.
* https://bugs.freedesktop.org/show_bug.cgi?id=8816
* AGPv2 spec 6.1.9 states:
* The RATE field indicates the data transfer rates supported by this
* device. A.G.P. devices must report all that apply.
* Fix them up as best we can.
*/
switch (*bridge_agpstat & 7) {
case 4:
*bridge_agpstat |= (AGPSTAT2_2X | AGPSTAT2_1X);
printk(KERN_INFO PFX "BIOS bug. AGP bridge claims to only support x4 rate"
"Fixing up support for x2 & x1\n");
break;
case 2:
*bridge_agpstat |= AGPSTAT2_1X;
printk(KERN_INFO PFX "BIOS bug. AGP bridge claims to only support x2 rate"
"Fixing up support for x1\n");
break;
default:
break;
}
/* Check the speed bits make sense. Only one should be set. */ /* Check the speed bits make sense. Only one should be set. */
tmp = *requested_mode & 7; tmp = *requested_mode & 7;
switch (tmp) { switch (tmp) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册