i830 modesetting adventure debriefing

Kristian Høgsberg krh at bitplanet.net
Tue May 1 18:58:59 PDT 2007


I had a showdown with the intel modesetting driver on my i830 last
week, and while I didn't resolve all issues, I did get things somewhat
working.  The ivch is online and the attached patch sets it up
correctly.  However, I think the modesetting driver still has some
issues with the i830 chipset, and I'm not sure how to proceed with
those problems:

1 - I don't see any way to get panel timings.  The chipset apparently
only supports DDC for the VGA connector, and the getPanelInfo VBE call
apparently just looks it up in a (non-standard) bios table.  What I've
done here is to just clamp panel size to 1024x768.  I don't know of
any i830 based laptops that have a bigger panel.  This doesn't solve
the problem for 800x600 panels, of course.  The ivch documentation
mentions that four of the GPIO pins can be strapped to indicate the
panel type, but doesn't define any panel types.

2 - The load detection code always returns true.  I don't know if this
is fixable, I tried moving the waitForVblank call down after the force
output thing, and various other things.  In all cases I got the same
results: bit 4 in 0x3c2 is just flipping up and down a lot (I tried
sampling it a thousand times and counting the transitions) and the
eventually it settles on high.  But the way the driver samples it now,
it gets what looks like a random value, but biased towards high.  This
wouldn't be too big an issue if it didn't screw up the modesetting,
see next point.

3 - I get a black screen (both on panel and external monitor if
attached) when the driver also tries to set up the VGA output.  Due to
the load detection problem the driver typically thinks I have a
monitor attached and always tries to set up a DVO and VGA output.
There's two ways I can work around this - either just take out the
load detect code, in which case the driver just sets up the DVO and
things work ok.

The other workaround is more interesting and may hint at the root of
the problem.  I noticed that without the VGA output, pipe A is
assigned to my panel, whereas with a VGA and a DVO output, the VGA
output gets pipe A and the DVO gets pipe B.  If I move crt detection
after dvo detection in I830SetupOutputs,  both VGA and TMDS is
connected to pipe A and pipe B is off.  This way the mode comes up
correctly, but I can only use one pipe.  For example, if I say

  $ xrandr --output LVDS --below VGA

both outputs move to +0+768.

Just for the record, I did get dual head working with VGA and DVO at
some point.  I just jammed the n, m1, m2 values the BIOS used into
FPA0 (I think that's what I did...) so I know the chipset can do it.

How different are the 845 and 855 chipsets?  Are they similar to 830
and do they also use ivch?  Are 810 and 815 supposed to work?

Anyway, the ivch setup patch attached should be fine, I think.  I'll
try to look into the pipe setup a little bit, but I don't know much
about that code.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ivch-setup.patch
Type: application/octet-stream
Size: 1603 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg/attachments/20070501/c388f62d/attachment.obj>

More information about the xorg mailing list