diff options
Diffstat (limited to 'drivers/char/agp/generic.c')
-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 | ||