Geode LX / ThinCan / General Software BIOS - DDC failing / no EDID info

Bart Trojanowski bart at jukie.net
Thu Jan 17 11:48:39 PST 2008


I got back to looking at why we get no EDID info from some units with
General Software BIOS.  I am trying to debug why this is happening.

I would love for someone that knows DDC/EDID to suggest things to try at
this point.

It was mentioned to me in passing that there is a chance that the serial
port could be wired on the same pins that are responsible for the
DDC/EDID data.  If that is the case, is there an /easy/ way to find out
if that has been done on this unit?

More reading below...

-Bart

-- 8< --

I have a ThinCan DBE61 running Ubuntu/Gutsy and xserver-xorg-core with
patches that fix the freeze [1]

[1] http://www.jukie.net/~bart/patches/xorg-server/20080115/0001-Ubuntu-Gutsy-Apply-patches-to-fix-improper-emulation-of-PCI-acces.patch

With this setup I am getting X to start up in 800x600 VGA mode.  In the
logs I see:

(II) AMD(0): VESA VBE DDC read failed

Looking at the actual code ...

We make two calls to the BIOS to get DDC info.  The first is to find out
if the capabilities even exist, the second is to get the DDC info.

So the first call, from vbeProbeDDC(), looks like this:

|       pVbe->pInt10->ax = 0x4F15;
|       pVbe->pInt10->bx = 0;
|       pVbe->pInt10->cx = 0;
|       pVbe->pInt10->es = 0;
|       pVbe->pInt10->di = 0;
|       pVbe->pInt10->num = 0x10;
|   
|       xf86ExecX86int10(pVbe->pInt10);

The state of the emulated registers after the INT 10 call is:

|       AX  004f
|       BX  0301
|       CX  1000
|       DX  0000
|       ES  0000
|       SI  0000
|       DI  0000
|       BP  0000

The AX register indicates success.  BX indicates 3 seconds to perform
the operation, and that 'DDC 1' is supported while 'DDC 2' is not
supported.

The second call, from vbeReadEDID(), looks like this:

|       pVbe->pInt10->ax = 0x4F15;
|       pVbe->pInt10->bx = 0x01;
|       pVbe->pInt10->cx = 0;
|       pVbe->pInt10->dx = 0;
|       pVbe->pInt10->es = SEG_ADDR(RealOff);
|       pVbe->pInt10->di = SEG_OFF(RealOff);
|       pVbe->pInt10->num = 0x10;
|   
|       xf86ExecX86int10(pVbe->pInt10);

The state of the emulated registers after the INT 10 call is:

|       AX  014f
|       BX  4358
|       CX  0000
|       DX  03da
|       ES  0000
|       SI  0000
|       DI  2000
|       BP  0000

I see that we are failing here with a listed error code; AH=0x01
indicates failure (e.g. non-DDC monitor).

I don't know if there are any better references then the "VGA BIOS OEM
Reference Guide" [2], but it's not very forthcoming about the reason of
the failure.

[2] http://www.versalogic.com/support/downloads/pdf/69030bg.pdf

-- 
				WebSig: http://www.jukie.net/~bart/sig/



More information about the xorg mailing list