[Intel-gfx] Unexpected behaviour of xrandr and the Intel driver on monitor hotplug

Simon Farnsworth simon.farnsworth at onelan.com
Mon May 17 13:13:56 CEST 2010


Hello,

Before I file bugs, I'd like to check that the behaviour I'm seeing is
unexpected. In all testing, I'm on an Intel 945 platform, running Fedora 12
for most of the stack (including the kernel), but with recent git master of
xserver, xf86-video-intel, libdrm and mesa.

In all cases, I'm testing the behaviour of the system with the command "xrandr
--prop". I'm trying to use xrandr to replace an external EDID parser in our
product; the ultimate goal is to present the user with the xrandr modes to
choose from, flagging the monitor's preferred mode as such, but permitting
users to force other modes (e.g. because your VGA over Cat5e solution doesn't
handle the display's native resolution). The mode set in the xorg.conf file is
named "NTB-vesa_cvt-1360x768".

I'm seeing two problems, which I'll describe, then give xrandr output for, so
that you can see what's confusing me.

The first bit of misbehaviour I'm seeing is caching of EDID across hotplug
events. If I boot my system with no display attached, I correctly see no EDID
property. When I connect a monitor via VGA, using cabling that supports DDC, I
see EDID. When I unplug the monitor, I continue to see the old EDID. When I
then plug in using a cable that doesn't support DDC, I see an extra mode
appear in the mode list, but the EDID has not changed. Connecting using the
original cable, or disconnecting cables completely removes this extra mode.

In xrandr terms:

On boot without a cable:
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 disconnected 1360x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   NTB-vesa_cvt-1360x768   59.8*+
   1600x1200      60.0  
   1400x1050      60.0  
   1280x1024      60.0  
   1280x960       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0     59.9  
DVI1 disconnected (normal left inverted right x axis y axis)

Attach a monitor to VGA1:
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 connected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1920x1200      60.0 +
   1600x1200      60.0  
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DVI1 disconnected (normal left inverted right x axis y axis)

Unplug that monitor (where's this EDID coming from?):
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 disconnected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DVI1 disconnected (normal left inverted right x axis y axis)

Plug in a different monitor via a cable that doesn't support DDC (where's the
EDID coming from? Where does 848x480 come from?):
# xrandr --prop
VGA1 connected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   848x480        60.0  
   640x480        60.0     59.9  
DVI1 disconnected (normal left inverted right x axis y axis)

Finally, unplug the cable (where's this EDID from? Why has 848x480
disappeared?):
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 disconnected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DVI1 disconnected (normal left inverted right x axis y axis)

The second misbehaviour I'm seeing is that the list of modes isn't predictable
in the presence of hotplug. If I boot without EDID available, I get one list
of modes; if I make EDID available by changing cables, I get a second list of
modes. If I then change cables back to the no EDID cable, I get a third list
of modes - I was expecting the first list again.

In xrandr terms:

Boot without cable (it'd be nice to know how to trim this modelist, for
backwards compatibility reasons, but I can live with the full list):
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 disconnected 1360x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   NTB-vesa_cvt-1360x768   59.8*+
   1600x1200      60.0  
   1400x1050      60.0  
   1280x1024      60.0  
   1280x960       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0     59.9  
DVI1 disconnected (normal left inverted right x axis y axis)

Connect monitor with EDID:
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 connected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1920x1200      60.0 +
   1600x1200      60.0  
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DVI1 disconnected (normal left inverted right x axis y axis)

Disconnect monitor (why've I lost lots of modes that I had before I connected
the monitor? Why do I still have EDID?):
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 disconnected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DVI1 disconnected (normal left inverted right x axis y axis)

Connect a monitor without DDC support (why do I have EDID still? Where's
848x480 from?):
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 connected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   848x480        60.0  
   640x480        60.0     59.9  
DVI1 disconnected (normal left inverted right x axis y axis)

Disconnect again (why's 848x480 no longer present?):
# xrandr --prop
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA1 disconnected 1360x768+0+0 (normal left inverted right x axis y axis) 519mm x 324mm
        EDID:
                00ffffffffffff0010ac29a053315933
                111201030e342078eab325ac5130b426
                105054a54b008180a940714f01010101
                010101010101283c80a070b023403020
                360007442100001a000000ff00435832
                363838344e335931530a000000fc0044
                454c4c20323430385746500a000000fd
                00384c1e5311000a202020202020005f
   NTB-vesa_cvt-1360x768   59.8*+
   1280x1024      60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DVI1 disconnected (normal left inverted right x axis y axis)

Should I file bugs for these, and start chasing down what's going on, or is
this expected behaviour? If it's expected, can someone explain why I'm seeing
what I'm seeing?
-- 
Simon Farnsworth
Software Engineer
ONELAN Limited
http://www.onelan.com/



More information about the Intel-gfx mailing list