[Xorg-driver-geode] GeodeLX freeze with General Software BIOS saga continues
Bart Trojanowski
bart at jukie.net
Thu Jan 10 20:54:09 PST 2008
* Bart Trojanowski <bart at jukie.net> [080110 22:30]:
> The xserver x86emu dies on this sequence...
>
> [e000:10e2] MOV DX=0004,SI=0000
> [e000:10e4] ADD DX=0000,20
> [e000:10e7] DATA:
> [e000:10e8] MOV EAX,18
> [e000:10ed] DATA:
> [e000:10ee] OUT DX=0020,EAX=00000018 <-- freeze
I looked higher up and found the source of the SI=0000. It seems that
if the hw/xfree86/os-support/bus/Pci.c code is used to emulate read the
0xCFC port, then it gets 0xE0000000. Which is later truncated to 0.
I modified hw/xfree86/int10/helper_exec.c to issue real IN/OUT
instructions for ports in the 0xCF8-0xCFF range.
This got me X running at 800x600 and a nice message in the logs
telling me why it's only 800x600...
(II) AMD(0): VESA VBE DDC read failed
Where to go from here?
I still thing that x86emu needs a way to not execute bad instructions,
like a write to some of the double digit port numbers. It's better to
backtrace()/exit(1) at this point then it would be to freeze the system.
I don't know much about 0xCF8-0xCFF and what it's doing -- I'll try to
learn more. I also need to get a better understanding what the Pci.c
code is trying to do.
Can someone tell me why we don't access 0xCF8-0xCFF directly but emulate
them by a read them from PCI memory?
Cheers!
-Bart
--
WebSig: http://www.jukie.net/~bart/sig/
More information about the xorg
mailing list