https://bugs.freedesktop.org/show_bug.cgi?id=56139
--- Comment #6 from Alexandre Demers alexandre.f.demers@gmail.com --- (In reply to comment #5)
Created attachment 69113 [details] [review] possible fix
(In reply to comment #4)
the bug appeared. So it seems blanking the display controllers with for(i = 0; i < rdev->num_crtc; i++) is not equivalent to the code that it replaces. The original code first wrote in the EVERGREEN_CRTC_UPDATE_LOCK registers, before setting EVERGREEN_CRTC_CONTROL registers and writing again in the EVERGREEN_CRTC_UPDATE_LOCK registers. On the other hand, the new code doesn't write in the EVERGREEN_CRTC_UPDATE_LOCK neither before nor after setting EVERGREEN_CRTC_CONTROL.
It should be equivalent. CRTC_UPDATE_LOCK turns off double buffering in the crtc which makes register updates atomic. The new code waits for the frame count to increase (the double buffered updates happen at vblank) so it should be equivalent. That said, it shouldn't hurt to take the lock. Does this patch help?
Sadly, it didn't help.