diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/char/agp/generic.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index cc5ea347a8a7..0dcdb363923f 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
| @@ -568,25 +568,34 @@ static void agp_v3_parse_one(u32 *requested_mode, u32 *bridge_agpstat, u32 *vga_ | |||
| 568 | *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); | 568 | *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); |
| 569 | goto done; | 569 | goto done; |
| 570 | 570 | ||
| 571 | } else if (*requested_mode & AGPSTAT3_4X) { | ||
| 572 | *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | ||
| 573 | *bridge_agpstat |= AGPSTAT3_4X; | ||
| 574 | goto done; | ||
| 575 | |||
| 571 | } else { | 576 | } else { |
| 572 | 577 | ||
| 573 | /* | 578 | /* |
| 574 | * If we didn't specify AGPx8, we can only do x4. | 579 | * If we didn't specify an AGP mode, we see if both |
| 575 | * If the hardware can't do x4, we're up shit creek, and never | 580 | * the graphics card, and the bridge can do x8, and use if so. |
| 576 | * should have got this far. | 581 | * If not, we fall back to x4 mode. |
| 577 | */ | 582 | */ |
| 578 | *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | 583 | if ((*bridge_agpstat & AGPSTAT3_8X) && (*vga_agpstat & AGPSTAT3_8X)) { |
| 579 | if ((*bridge_agpstat & AGPSTAT3_4X) && (*vga_agpstat & AGPSTAT3_4X)) | 584 | printk(KERN_INFO PFX "No AGP mode specified. Setting to highest mode supported by bridge & card (x8).\n"); |
| 580 | *bridge_agpstat |= AGPSTAT3_4X; | 585 | *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); |
| 581 | else { | 586 | *vga_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); |
| 582 | printk(KERN_INFO PFX "Badness. Don't know which AGP mode to set. " | 587 | } else { |
| 583 | "[bridge_agpstat:%x vga_agpstat:%x fell back to:- bridge_agpstat:%x vga_agpstat:%x]\n", | 588 | printk(KERN_INFO PFX "Fell back to AGPx4 mode because"); |
| 584 | origbridge, origvga, *bridge_agpstat, *vga_agpstat); | 589 | if (!(*bridge_agpstat & AGPSTAT3_8X)) { |
| 585 | if (!(*bridge_agpstat & AGPSTAT3_4X)) | 590 | printk("bridge couldn't do x8. bridge_agpstat:%x (orig=%x)\n", *bridge_agpstat, origbridge); |
| 586 | printk(KERN_INFO PFX "Bridge couldn't do AGP x4.\n"); | 591 | *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); |
| 587 | if (!(*vga_agpstat & AGPSTAT3_4X)) | 592 | *bridge_agpstat |= AGPSTAT3_4X; |
| 588 | printk(KERN_INFO PFX "Graphic card couldn't do AGP x4.\n"); | 593 | } |
| 589 | return; | 594 | if (!(*vga_agpstat & AGPSTAT3_8X)) { |
| 595 | printk("graphics card couldn't do x8. vga_agpstat:%x (orig=%x)\n", *vga_agpstat, origvga); | ||
| 596 | *vga_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | ||
| 597 | *vga_agpstat |= AGPSTAT3_4X; | ||
| 598 | } | ||
| 590 | } | 599 | } |
| 591 | } | 600 | } |
| 592 | 601 | ||
