summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2007-10-13 14:36:49 -0700
committerAaron Plattner <aplattner@nvidia.com>2007-10-13 15:15:31 -0700
commit1003bcbe4381201f1d7b34dc1af72f57b2943b67 (patch)
tree87a56138229f8bba22a2d9f9012dccd4a8a0f986
parent1e12277650dff10b1083915cb73961525e21a471 (diff)
G80 bug #12637: Unwedge the hardware if the BIOS left it stuck.
-rw-r--r--src/g80_display.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/g80_display.c b/src/g80_display.c
index 6c95773..dda1c7f 100644
--- a/src/g80_display.c
+++ b/src/g80_display.c
@@ -250,6 +250,7 @@ Bool
G80DispInit(ScrnInfoPtr pScrn)
{
G80Ptr pNv = G80PTR(pScrn);
+ CARD32 val;
if(pNv->reg[0x00610024/4] & 0x100) {
pNv->reg[0x00610024/4] = 0x100;
@@ -258,7 +259,15 @@ G80DispInit(ScrnInfoPtr pScrn)
}
pNv->reg[0x00610200/4] = 0x2b00;
- while((pNv->reg[0x00610200/4] & 0x1e0000) != 0);
+ do {
+ val = pNv->reg[0x00610200/4];
+
+ if ((val & 0x9f0000) == 0x20000)
+ pNv->reg[0x00610200/4] = val | 0x800000;
+
+ if ((val & 0x3f0000) == 0x30000)
+ pNv->reg[0x00610200/4] = val | 0x200000;
+ } while ((val & 0x1e0000) != 0);
pNv->reg[0x00610300/4] = 1;
pNv->reg[0x00610200/4] = 0x1000b03;
while(!(pNv->reg[0x00610200/4] & 0x40000000));