[Xorg-driver-geode] Geode LX video testing results

Bart Trojanowski bart at jukie.net
Sat Dec 22 12:47:07 PST 2007


A bit more info on the PIC change...

* Bart Trojanowski <bart at jukie.net> [071222 11:35]:
> * the emulator dies when executing outl(0x20, 00000018)
> 
>    This is *not* the first out() instruction.  It is the first port
>    operation on port 0x20.
> 
>    0x20 is the initialization port for the PIC.  Why any INT 10 routine
>    would need to (re)initialize the PIC is a mystery to me.

Here are the bits in port 0x20...

 7-5    0 (only used in 8080/8085 mode)
 4      ICW1 is being issued
 3      (LTIM)
        =0  edge triggered mode
        =1  level triggered mode
 2      interrupt vector size
        =0 successive interrupt vectors use 8 bytes (8080/8085)
        =1 successive interrupt vectors use 4 bytes (80x86)
 1      (SNGL)
        =0  cascade mode
        =1  single mode, no ICW3 needed
 0      ICW4 needed

... so 0x0018 means:

 - ICW1 is used
 - level triggerred
 - successive interrupt vectors use 8 bytes
 - cascade mode

> Some thoughts...
> 
> * Is it common for other VIDEO BIOS implementations to muck with the PIC?
> * What would happen if I ignored a write to port 20?

So I made the code skip over any writes to port 20.  Freeze is gone.  X
starts up in 800x600... looks like DDC is not working.  Also exiting
from X (ctrl-alt-bs) does not restore the display back to text mode.  I
get (pseudo-)random blue and green noise on the screen.

At startup, when vbeReadEDID() returns I get this in the log...

        (II) AMD(0): VESA VBE DDC read failed
        (II) AMD(0): Monitor0: Using default hsync range of 31.50-37.90 kHz
        (II) AMD(0): Monitor0: Using default vrefresh range of 50.00-70.00 Hz
        (WW) AMD(0): Unable to estimate virtual size
        (II) AMD(0): Clock range:  25.18 to 229.50 MHz

        ...

        (--) AMD(0): Virtual size is 800x600 (pitch 1024)
        (**) AMD(0): *Default mode "800x600": 40.0 MHz, 37.9 kHz, 60.3 Hz
        (II) AMD(0): Modeline "800x600"   40.00  800 840 968 1056  600 601 605 628 +hsync +vsync
        (**) AMD(0): *Default mode "800x600": 36.0 MHz, 35.2 kHz, 56.2 Hz
        (II) AMD(0): Modeline "800x600"   36.00  800 824 896 1024  600 601 603 625 +hsync +vsync
        (**) AMD(0): *Default mode "640x480": 25.2 MHz, 31.5 kHz, 59.9 Hz
        (II) AMD(0): Modeline "640x480"   25.18  640 656 752 800  480 490 492 525 -hsync -vsync
        (==) AMD(0): DPI set to (100, 100)

I think that the x86emu needs to have a black list of ports that it
should never ever touch even if the BIOS code it's executing requests
it.  It would seem that port 20 is one of them... but there ought to be
others.  Like port 0 for example; I don't know if this is a mistake or a real
port.  What's at port 0?

Anyway, I propose that we try this trivial patch against xorg-core on
some other hardware...

http://www.jukie.net/~bart/patches/xorg-server/20071222/0001-X86EMU-blacklist-I-O-port-20-for-INT-10-emulation.patch

The xorg-server and video-amd packages rebuilt for Ubuntu/Gutsy are
available here:

http://www.jukie.net/~bart/debian/xorg/xserver-xorg-core_1.3.0.0.dfsg-12ubuntu8_i386.deb
http://www.jukie.net/~bart/debian/xorg/xserver-xorg-video-amd_2.7.7.3-1_i386.deb

It starts up X for me, but does it work for you? :)

-Bart


More information about the Xorg-driver-geode mailing list