diff options
-rw-r--r-- | drivers/char/agp/Kconfig | 4 | ||||
-rw-r--r-- | drivers/char/agp/generic.c | 25 |
2 files changed, 27 insertions, 2 deletions
diff --git a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig index c603bf291580..a9f9c48c2424 100644 --- a/drivers/char/agp/Kconfig +++ b/drivers/char/agp/Kconfig | |||
@@ -86,7 +86,7 @@ config AGP_NVIDIA | |||
86 | 86 | ||
87 | config AGP_SIS | 87 | config AGP_SIS |
88 | tristate "SiS chipset support" | 88 | tristate "SiS chipset support" |
89 | depends on AGP | 89 | depends on AGP && X86 |
90 | help | 90 | help |
91 | This option gives you AGP support for the GLX component of | 91 | This option gives you AGP support for the GLX component of |
92 | X on Silicon Integrated Systems [SiS] chipsets. | 92 | X on Silicon Integrated Systems [SiS] chipsets. |
@@ -103,7 +103,7 @@ config AGP_SWORKS | |||
103 | 103 | ||
104 | config AGP_VIA | 104 | config AGP_VIA |
105 | tristate "VIA chipset support" | 105 | tristate "VIA chipset support" |
106 | depends on AGP | 106 | depends on AGP && X86 |
107 | help | 107 | help |
108 | This option gives you AGP support for the GLX component of | 108 | This option gives you AGP support for the GLX component of |
109 | X on VIA MVP3/Apollo Pro chipsets. | 109 | X on VIA MVP3/Apollo Pro chipsets. |
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index 5ff457b41efb..883a36a27833 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
@@ -419,6 +419,31 @@ static void agp_v2_parse_one(u32 *requested_mode, u32 *bridge_agpstat, u32 *vga_ | |||
419 | *requested_mode &= ~AGP2_RESERVED_MASK; | 419 | *requested_mode &= ~AGP2_RESERVED_MASK; |
420 | } | 420 | } |
421 | 421 | ||
422 | /* | ||
423 | * Some dumb bridges are programmed to disobey the AGP2 spec. | ||
424 | * This is likely a BIOS misprogramming rather than poweron default, or | ||
425 | * it would be a lot more common. | ||
426 | * https://bugs.freedesktop.org/show_bug.cgi?id=8816 | ||
427 | * AGPv2 spec 6.1.9 states: | ||
428 | * The RATE field indicates the data transfer rates supported by this | ||
429 | * device. A.G.P. devices must report all that apply. | ||
430 | * Fix them up as best we can. | ||
431 | */ | ||
432 | switch (*bridge_agpstat & 7) { | ||
433 | case 4: | ||
434 | *bridge_agpstat |= (AGPSTAT2_2X | AGPSTAT2_1X); | ||
435 | printk(KERN_INFO PFX "BIOS bug. AGP bridge claims to only support x4 rate" | ||
436 | "Fixing up support for x2 & x1\n"); | ||
437 | break; | ||
438 | case 2: | ||
439 | *bridge_agpstat |= AGPSTAT2_1X; | ||
440 | printk(KERN_INFO PFX "BIOS bug. AGP bridge claims to only support x2 rate" | ||
441 | "Fixing up support for x1\n"); | ||
442 | break; | ||
443 | default: | ||
444 | break; | ||
445 | } | ||
446 | |||
422 | /* Check the speed bits make sense. Only one should be set. */ | 447 | /* Check the speed bits make sense. Only one should be set. */ |
423 | tmp = *requested_mode & 7; | 448 | tmp = *requested_mode & 7; |
424 | switch (tmp) { | 449 | switch (tmp) { |