https://bugs.freedesktop.org/show_bug.cgi?id=59982
--- Comment #8 from Jerome Glisse glisse@freedesktop.org --- Here is how we try to figure out atombios stuck. We use the atombios disasm :
git://people.freedesktop.org/~mhopf/AtomDis
To produce a readable file ./atomdis bios.rom > bios.txt
Then when you get a message such as :
*ERROR* atombios stuck executing C898 (len 62, WS 0, PS 0) @ 0xC8B4
It means it's stuck executing function that is at offset 0xc898 (look for c898 in your disasm output it's EnableCRTC. Inside that atombios function it's stuck in a loop. 0xC8B4 is the offset of the instruction at which the loop was interrupted (from one run to the other this offset might point to a different instruction in the same loop).
So when you look at EnableCRTC it's stuck executing 0xC8B4 - 0xC898 = 0x1c which is :
001c: 4aa59c1b01 TEST reg[1b9c] [.X..] <- 01 0021: 491c00 JUMP_NotEqual 001c
So test here test that register (0x1b9c << 2) ie register 0x6e70 as value of : 0x..01.... or if you prefer : (READREG(0x6e70) & 0x00ff0000) == 0x00010000
Lucas if you have any more atombios stuck don't hesitate to add them here.
To find the register meaning you can grep the various header files of drivers/gpu/drm/radeon/ mostly evergreen one and modesetting one.