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