Hi,

I have an IBM thinkpad 560 with Trident TGUI 9660/Cyber9382 card
and a 12.1" TFT. XF86 3.3.6 works fine on this computer, 4.2.0 does
not. The LCD becomes garbled and an external monitor doesn't sync.
Fiddling with the XF86Config settings doesn't seem to help, so I
wrote a simple register dump tool to find out exactly what 4.2.0
does different from 3.3.6, and what presumeably causes it to break.

Here are the diff'ing registers, I hope someone who has access to
the documentation for this chip can help me out. I doubt trident
will send it to me if I ask :(

diff is 3.3.6 vs 4.2.0, i.e.
< means 3.3.6
> means 4.2.0:


< 0x3c4:0xd(NewMode2) = 0x0(0)
< 0x3c4:0xe(OldMode1) = 0x2(2)
< 0x3c4:0xe(NewMode1) = 0x2(2)
< 0x3d4:0x14(Underline) = 0x40(64)
-
> 0x3c4:0xd(NewMode2) = 0x20(32)
> 0x3c4:0xe(OldMode1) = 0xc0(192)
> 0x3c4:0xe(NewMode1) = 0xc0(192)
> 0x3d4:0x14(Underline) = 0x0(0)
-
< 0x3d4:0x3a(DRAMControl) = 0x0(0)
> 0x3d4:0x3a(DRAMControl) = 0x30(48)
-
< 0x3d4:0x40(CursorXLow) = 0x0(0)
< 0x3d4:0x41(CursorXHigh) = 0x0(0)
< 0x3d4:0x42(CursorYLow) = 0x0(0)
< 0x3d4:0x43(CursorYHigh) = 0x0(0)
< 0x3d4:0x44(CursorLocLow) = 0x0(0)
< 0x3d4:0x45(CursorLocHigh) = 0x0(0)
< 0x3d4:0x4c(CursorBG1) = 0x0(0)
< 0x3d4:0x50(CursorControl) = 0x0(0)
-
> 0x3d4:0x40(CursorXLow) = 0x89(137)
> 0x3d4:0x41(CursorXHigh) = 0x1(1)
> 0x3d4:0x42(CursorYLow) = 0x25(37)
> 0x3d4:0x43(CursorYHigh) = 0x1(1)
> 0x3d4:0x44(CursorLocLow) = 0xfc(252)
> 0x3d4:0x45(CursorLocHigh) = 0x3(3)
> 0x3d4:0x4c(CursorBG1) = 0x1(1)
> 0x3d4:0x50(CursorControl) = 0xc1(193)
-
< 0x3d4:0x55(PCIRetry) = 0x0(0)
< 0x3d4:0x56(PreEndControl) = 0x0(0)
< 0x3d4:0x57(PreEndFetch) = 0xff(255)
< 0x3ce:0xf(MiscExtFunc) = 0x17(23)
-
> 0x3d4:0x55(PCIRetry) = 0x1f(31)
> 0x3d4:0x56(PreEndControl) = 0x2(2)
> 0x3d4:0x57(PreEndFetch) = 0x74(116)
> 0x3ce:0xf(MiscExtFunc) = 0x12(18)
-
< 0x3ce:0x52(VertStretch) = 0x32(50)
< 0x3ce:0x53(HorStretch) = 0x22(34)
< 0x3ce:0x5c(BiosMode) = 0xa2(162)
-
> 0x3ce:0x52(VertStretch) = 0xb0(176)
> 0x3ce:0x53(HorStretch) = 0xa0(160)
> 0x3ce:0x5c(BiosMode) = 0x5e(94)
-
< 0x3ce:0x5c(BiosNewMode2) = 0xa2(162)
< 0x3ce:0x5d(BiosReg) = 0x3f(63)
-
> 0x3ce:0x5c(BiosNewMode2) = 0x5e(94)
> 0x3ce:0x5d(BiosReg) = 0x0(0)

This is the modeline used:
Modeline "IBM" 40.09 800 840 864 992 600 601 605 626 +hsync +vsync

And the complete register dump from when 3.3.6 is running:

0x3c4:0x9(RevisionID) = 0x42(66)
0x3c4:0xc(ConfPort1) = 0xf8(248)
0x3c4:0xc(ConfPort2) = 0xf8(248)
0x3c4:0xd(NewMode2) = 0x0(0)
0x3c4:0x0(OldMode2) = 0x3(3)
0x3c4:0xe(OldMode1) = 0x2(2)
0x3c4:0xe(NewMode1) = 0x2(2)
0x3c4:0x11(Protection) = 0x0(0)
0x3c4:0x16(MCLKLow) = 0x0(0)
0x3c4:0x17(MCLKHigh) = 0x0(0)
0x3c4:0x18(ClockLow) = 0x0(0)
0x3c4:0x19(ClockHigh) = 0x0(0)
0x3c4:0x20(SSetup) = 0x3(3)
0x3c4:0x37(SKey) = 0x0(0)
0x3c4:0x57(SPKey) = 0x0(0)
0x3d4:0x13(Offset) = 0x64(100)
0x3d4:0x14(Underline) = 0x40(64)
0x3d4:0x17(CRTCMode) = 0xc3(195)
0x3d4:0x1e(CRTCModuleTest) = 0x80(128)
0x3d4:0x20(FIFOControl) = 0x30(48)
0x3d4:0x21(LinearAddReg) = 0x20(32)
0x3d4:0x23(DRAMTiming) = 0xc8(200)
0x3d4:0x23(New32) = 0xc8(200)
0x3d4:0x25(RAMDACTiming) = 0x7(7)
0x3d4:0x27(CRTHiOrd) = 0x8(8)
0x3d4:0x29(AddColReg) = 0x8c(140)
0x3d4:0x2a(InterfaceSel) = 0x54(84)
0x3d4:0x2b(HorizOverflow) = 0x0(0)
0x3d4:0x2d(GETest) = 0x0(0)
0x3d4:0x2f(Performance) = 0x5f(95)
0x3d4:0x36(GraphEngReg) = 0x0(0)
0x3d4:0x37(I2C) = 0x0(0)
0x3d4:0x38(PixelBusReg) = 0x0(0)
0x3d4:0x39(PCIReg) = 0x6(6)
0x3d4:0x3a(DRAMControl) = 0x0(0)
0x3d4:0x3c(MiscContReg) = 0x0(0)
0x3d4:0x40(CursorXLow) = 0x0(0)
0x3d4:0x41(CursorXHigh) = 0x0(0)
0x3d4:0x42(CursorYLow) = 0x0(0)
0x3d4:0x43(CursorYHigh) = 0x0(0)
0x3d4:0x44(CursorLocLow) = 0x0(0)
0x3d4:0x45(CursorLocHigh) = 0x0(0)
0x3d4:0x46(CursorXOffset) = 0x0(0)
0x3d4:0x47(CursorYOffset) = 0x0(0)
0x3d4:0x48(CursorFG1) = 0x0(0)
0x3d4:0x49(CursorFG2) = 0x0(0)
0x3d4:0x4a(CursorFG3) = 0x0(0)
0x3d4:0x4b(CursorFG4) = 0x0(0)
0x3d4:0x4c(CursorBG1) = 0x0(0)
0x3d4:0x4d(CursorBG2) = 0x0(0)
0x3d4:0x4e(CursorBG3) = 0x0(0)
0x3d4:0x4f(CursorBG4) = 0x0(0)
0x3d4:0x50(CursorControl) = 0x0(0)
0x3d4:0x55(PCIRetry) = 0x0(0)
0x3d4:0x56(PreEndControl) = 0x0(0)
0x3d4:0x57(PreEndFetch) = 0xff(255)
0x3d4:0x60(PCIMaster) = 0x0(0)
0x3d4:0x62(Enhancement0) = 0x0(0)
0x3d4:0x64(NewEDO) = 0x0(0)
0x3d4:0xc0(TVinterface) = 0x0(0)
0x3d4:0xc1(TVMode) = 0x0(0)
0x3d4:0xcf(ClockControl) = 0x0(0)
0x3ce:0xf(MiscExtFunc) = 0x17(23)
0x3ce:0x2f(MiscIntContReg) = 0xa7(167)
0x3ce:0x30(CyberControl) = 0x0(0)
0x3ce:0x31(CyberEnhance) = 0x10(16)
0x3ce:0x33(FPConfig) = 0x30(48)
0x3ce:0x52(VertStretch) = 0x32(50)
0x3ce:0x53(HorStretch) = 0x22(34)
0x3ce:0x5c(BiosMode) = 0xa2(162)
0x3ce:0x5a(BiosNewMode1) = 0x51(81)
0x3ce:0x5c(BiosNewMode2) = 0xa2(162)
0x3ce:0x5d(BiosReg) = 0x3f(63)

Since MCLKLow = MCLKHigh = 0 I fear that my program may not be 100%
accurate in querying the card. Do I need some different routine to read it?
I hope someone can make some sense out of this, I'm pretty much stuck.

Cheers,
Tobias Nygren
[EMAIL PROTECTED]


_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert

Reply via email to