Failure to detect TMDS-1 on intel GM45/ICH9
garrone
pgarrone at optusnet.com.au
Mon Dec 15 23:16:21 PST 2008
Hi,
When first starting X up, the Xorg server never detects the TMDS-1 output channel,
on an intel GM45/I965 dual cpu ICH9 module motherboard, PCI-ID 8086:2a42. Instead,
xrandr indicates "HDMI-1" as the detected device.
Using a debugger, it is seen that a failure in the I2C channel on the very first
I2CAddress call to address 0x70 occurs. Indeed, with gdb, it is possible to
jump back, successfully detect the device, and proceed. To recreate the bug,
it is always necessary to reboot the machine.
To illustrate the error, following is an extract of the gdb log at the point where
the I2CAddress functions fails in the I2CPutByte call. At xf86i2c.c:line 250, it is returning
FALSE, and causing the transmission fail.
My xserver is at commit f1c9b5ab23...
My xf86-video-intel is at commit 30fb0ef53e1...
*******************************************************************************
(gdb) n
250 r = FALSE;
(gdb) where
#0 I2CPutByte (d=0x82660e0, data=112 'p') at xf86i2c.c:250
#1 0x081eb93b in I2CAddress (d=0x82660e0, addr=112) at xf86i2c.c:336
#2 0x081eba7e in I2CWriteRead (d=0x82660e0, WriteBuffer=0xbfd27d60 "", nWrite=1, ReadBuffer=0xbfd27e94 "À\"&\bÀ\"&\bÀ\"&\b\r", nRead=1) at xf86i2c.c:416
#3 0x081ebb85 in xf86I2CWriteRead (d=0x82660e0, WriteBuffer=0xbfd27d60 "", nWrite=1, ReadBuffer=0xbfd27e94 "À\"&\bÀ\"&\bÀ\"&\b\r", nRead=1) at xf86i2c.c:448
#4 0x081ebc0a in xf86I2CReadByte (d=0x82660e0, subaddr=0 '\0', pbyte=0xbfd27e94 "À\"&\bÀ\"&\bÀ\"&\b\r") at xf86i2c.c:466
#5 0xb7a26903 in i830_sdvo_read_byte_quiet (output=0x8264ee0, addr=0, ch=0xbfd27e94 "À\"&\bÀ\"&\bÀ\"&\b\r") at i830_sdvo.c:172
#6 0xb7a29d53 in i830_sdvo_init (pScrn=0x82622c0, output_device=397632) at i830_sdvo.c:1827
#7 0xb7a09e3c in I830SetupOutputs (pScrn=0x82622c0) at i830_driver.c:916
#8 0xb7a0c372 in I830AccelMethodInit (pScrn=0x82622c0) at i830_driver.c:1595
#9 0xb7a0cc13 in I830PreInit (pScrn=0x82622c0, flags=0) at i830_driver.c:1861
#10 0x080bb715 in InitOutput (pScreenInfo=0x824f1c0, argc=8, argv=0xbfd281c4) at xf86Init.c:1007
#11 0x08068d34 in main (argc=8, argv=0xbfd281c4, envp=0xbfd281e8) at main.c:308
(gdb) l
235 b->I2CUDelay(b, b->RiseFallTime);
236
237 r = I2CRaiseSCL(b, 1, b->HoldTime);
238
239 if (r) {
240 for (i = d->AcknTimeout; i > 0; i -= b->HoldTime) {
241 b->I2CUDelay(b, b->HoldTime);
242 b->I2CGetBits(b, &scl, &sda);
243 if (sda == 0) break;
244 }
245
246 if (i <= 0) {
247 I2C_TIMEOUT(ErrorF("[I2CPutByte(<%s>, 0x%02x, %d, %d, %d) timeout]",
248 b->BusName, data, d->BitTimeout,
249 d->ByteTimeout, d->AcknTimeout));
250 r = FALSE;
251 }
252
253 I2C_TRACE(ErrorF("W%02x%c ", (int) data, sda ? '-' : '+'));
254 }
255
256 b->I2CPutBits(b, 0, 1);
257 b->I2CUDelay(b, b->HoldTime);
258
259 return r;
260 }
261
*******************************************************************************
More information about the xorg
mailing list