diff options
-rw-r--r-- | drivers/char/agp/generic.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index c39200161688..ca4629f66d17 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) { |