Custom resolutions on i855GME with modesetting

Matthew Hodgson matthew at arasphere.net
Fri Mar 2 04:45:12 PST 2007


On Thu, 1 Mar 2007, Matthew Hodgson wrote:

> Hi,
>
> I've just built a modular xorg from git head in order to play with the 
> modesetting branch of the intel drivers on an i855GME based motherboard 
> (http://www.ibase-i.com.tw/mb890.htm).  I want to use the motherboard as a TV 
> playout box, and as such I'm trying to feed it a modeline for displaying 
> widescreen progressive PAL (1024x576 at 50Hz) on a projector via DVI.  Nothing's 
> plugged into the HD15, LVDS or composite/s-video outputs on the board.
>
> My problem is twofold:
>
> a) The modesetting driver appears to ignore the modeline i've specified in my 
> xorg.conf, and instead generates only a 1024x768 at 60Hz picture.

This appears to be due to the VBIOS having a panel mode in it, which seems 
to clobber any other modes specified elsewhere in the config - at least 
for the pipe connected to the DVI output:

(II) intel(0): Found panel mode in BIOS VBT tables:
(II) intel(0): Modeline "1024x768"x0.0   65.00  1024 1048 1184 1344  768 771 777 806 (48.4 kHz)

This is obviously not ideal if you're hooking up to a DVI monitor rather 
than an LVDS panel.

The only way I've got it to pick up the custom resolution is to force 
i830_bios.c:i830_bios_get_panel_mode() to immediately return, as well as 
add a "monitor-TMDS" option to my screen section.

I've raised a bug at https://bugs.freedesktop.org/show_bug.cgi?id=10155 
for this.

> b) On killing Xorg, the box hangs solid.

After persuading xorg to pick up the custom modeline, X no longer hangs on 
exit.  Instead, there are a plethora of other problems:


1) Every time an X client app quits, the screen gets reinitialised. Every
     time this happens, the hardware accelerated cursor gets progressively
     corrupt (whilst looking initially fine when the xserver first starts).

In practice, I830ScreenInit() seems to be called every time a client 
quits, causing an explosion of:

(WW) Open ACPI failed (/var/run/acpid.socket) (No such file or directory)
(II) No APM support in BIOS or kernel
(II) intel(0): Kernel reported 104704 total, 1 used
(II) intel(0): I830CheckAvailableMemory: 418812 kB available
(**) intel(0): VideoRam: 131072 KB
(II) intel(0): Attempting memory allocation with tiled buffers and
                 large DRI memory manager reservation:
(II) intel(0): Allocating 3768 scanlines for pixmap cache
(II) intel(0): Success.
(II) intel(0): Memory allocation layout:
...

in the log.  The monitor loses sync as its CRTCs are reprogrammed.  Errors 
concerning swapinterval and blanking also appear during the 
reinitialisation:

(EE) DoSwapInterval: cx = 0x83692a0, GLX screen = 0x825aed0
...
(EE) intel(0): I830 Vblank Pipe Setup Failed 0


2) XV fails to work, and then causes X to lockup when the client app
     quits.

When running mplayer -vo xv, the log fills up with:

loops (1) maxed out for buffer 1
loops (1) maxed out for buffer 1
loops (1) maxed out for buffer 1

...and on hitting mplayer with SIGKILL...

loops (1) maxed out for buffer 1
(II) intel(0): [drm] removed 1 reserved context for kernel
(II) intel(0): [drm] unmapping 8192 bytes of SAREA 0xdfbb8000 at 0xb7b42000
Error in I830WaitLpRing(), now is 280912022, start is 280910021
pgetbl_ctl: 0x1ffe0001 pgetbl_err: 0x0
ipeir: 0 iphdr: 1810000
LP ring tail: 870 head: 2ec len: 1f001 start 0
eir: 0 esr: 0 emr: ffff
instdone: ffc0 instpm: 0
memmode: 108 instps: 0
hwstam: ffff ier: 0 imr: ffff iir: 0
space: 129652 wanted 131064

Fatal server error:
lockup

Backtrace:
0: X(xf86SigHandler+0x80) [0x80c0dd0]
1: [0xffffe420]
2: X(AbortDDX+0x87) [0x80a2777]
3: X(AbortServer+0x28) [0x81b8208]
4: X(FatalError+0x67) [0x81b8727]
5: /usr/local/src/xorg-modular/lib/xorg/modules//drivers/intel_drv.so(I830WaitLpRing+0x117) [0xb7b7e717]
6: /usr/local/src/xorg-modular/lib/xorg/modules//drivers/intel_drv.so(I830Sync+0xf9) [0xb7b7e949]
7: /usr/local/src/xorg-modular/lib/xorg/modules//drivers/intel_drv.so [0xb7b85d5c]
8: /usr/local/src/xorg-modular/lib/xorg/modules//drivers/intel_drv.so [0xb7b85e90]
9: /usr/local/src/xorg-modular/lib/xorg/modules//drivers/intel_drv.so [0xb7b86231]
10: /usr/local/src/xorg-modular/lib/xorg/modules//libshadow.so [0xb7b4546e]
11: X [0x815ab1e]
12: X [0x80c556f]
13: X [0x8134396]
14: X [0x8158365]
15: X(main+0x514) [0x806fe84]
16: /lib/tls/libc.so.6(__libc_start_main+0xc8) [0xb7d27ea8]
17: X(FontFileCompleteXLFD+0xad) [0x806f131]

FatalError re-entered, aborting
Caught signal 11.  Server aborting


3) Finally, glxgears is excitingly corrupt (using mesa git with the I915
     DRI).  The window only displays the top right of the red cog, whose
     polys appear to be missing vertices - and the bottom right of the
     window flickers an alarming green.  I'm more interested in getting XV
     working for now, though :)

An xorg.conf and Xorg.0.log which demonstrates both the 
screen-reinitialisation problem and lockup under XV can be found at 
http://arasphere.net/xorg/modesetting-20070302 - they're too big to 
attach, i'm afraid.

Any suggestions more than welcome!

thanks,

Matthew.




More information about the xorg mailing list