[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-driver-geode mailing list