May have bricked my GPU

Connor Behan connor.behan at gmail.com
Sun Mar 25 14:39:50 PDT 2012


I really hope some one here is knowledgeable about this...

My r128 card hangs indefinitely if any kind of acceleration is enabled. 
Running startx results in a black screen and I have to reboot with 
Alt+SysRq+REISUB. This was not caused by upgrading between any official 
releases of linux, xorg or my driver. It was caused because I was trying 
to hack my driver and I can tell you exactly how.

I was working on adding EXA support to xf86-video-r128. I successfully 
got as far as https://bugs.freedesktop.org/show_bug.cgi?id=47866 and I 
still suggest that you accept this patch since it does not contain the 
dangerous part. The dangerous part came when I tried to support 
compositing as this needed some OUT_RING and OUTREG commands. I based 
this on the KAA approach: 
http://cgit.freedesktop.org/xorg/xserver/tree/hw/kdrive/ati?id=0cd662ea80579c317d706ebe04971bb29d0f9b4f 
r128_composite.c. When I was finished, I ended up with an r128_exa.c 
file that looked like this: http://pastebin.com/HHsESs9q. Now I realize 
that I may be asking a difficult question as many of you haven't worked 
on this stuff for years, but here's how it went.

I installed this new DDX and first tried to start the X server with EXA 
and DRI but the composite extension turned off. Just to make sure that 
everything that worked before still worked. However, it did not work. It 
gave me this log file: http://pastebin.com/XWYbtTcL showing the lines: 
R128(0): R128CCEWaitForIdle: (DEBUG) CCE idle took i = 1025 and R128(0): 
Idle timed out, resetting engine...

I then stupidly thought "okay, maybe the composite code that has been 
added hangs if composite is disabled so I'll enable composite as well as 
EXA and DRI" Doing that gave me the log file: 
http://pastebin.com/3RJBNhAx with the lines: (**) R128(0): Idle timed 
out: 64 entries, stat=0x80400040, probe=0x00200000, (EE) R128(0): Idle 
timed out, resetting engine..., (EE) R128(0): R128WaitForIdle: CCE stop 
-22, (EE) R128(0): R128WaitForIdle: CCE reset -22 and (EE) R128(0): 
R128WaitForIdle: CCE start -22

I get the same error if I switch back to XAA with DRI on. If I use XAA 
with DRI off, I get the log file: http://pastebin.com/VLEbsAfx with the 
line: (EE) R128(0): Idle timed out, resetting engine... As of this 
morning, the ONLY way for me to use X, regardless of what my package 
versions are is to specify "NoAccel" which is slow as hell. I've seen 
R128 infinite loop idling errors posted to mailing lists in the past. 
They are mostly posted by PPC users for whom the r128 driver never 
worked properly in the first place. They all say that they "fix" it by 
turning off acceleration. I obviously don't want this since my card 
worked perfectly with 2D and 3D acceleration for years and it's only my 
foolishness right now that broke it.

Does anyone know a way this can be fixed? Does ATI provide a tool that 
will reflash a VBIOS and get rid of this error? Or does one of you have 
/ know how to write this kind of utility? Is it common to permanently 
brick a GPU if you try writing the wrong bit to a register? Like the 
ones that are written to in my r128_exa.c? If so I have even more 
respect for open source driver hackers.


More information about the xorg-devel mailing list