Created attachment 353832 [details]
Description of problem:
The fix for bug #487657 introduced a regression when changing resolution with xrandr with a VGA connected monitor on a Q43/Q45 chipset.
When switching resolution, the screen sometimes goes black and out of sync.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Connect a monitor to the VGA port
2. Select a lower resolution, e.g. xrandr -s "1024x768"
3. If that works, switch back to the original resolution, then select a
lower resolution again.
The screen goes black and shows "out of sync" message
The screen does not go "out of sync"
The workaround is either to repeat the last xrandr command or to switch to a text console and back again.
The problem has been introduced initially with commit db9f5915 upstream, which was backported in el5 as a fix for bug #487657.
The bug is still present upstream and I have reported it here:
KMS seems to be immune to the problem (ie it works in F11).
So comparing the code of i9xx_crtc_dpms() in intel_display.c in the kernel modesetting code:
With the one from its equivalent i830_crtc_dpms() in i830_display.c:
We see in the kernel, the VGA_DISP_DISABLE is disabled no matter what whereas in i830_disable_vga_plane(), the function returns immediately if the bit is already set.
The attached patch disables the vga plane no matter what, and that seems to fix the issue with xrandr without breaking to fix for bug #487657.
Created attachment 357792 [details]
Patch from upstream bug 23178
Test build at http://people.redhat.com/~ajackson/511896/ with the patch from comment #2.
Built xorg-x11-drv-i810 1.6.5-9.26.el5
Technical note added. If any revisions are required, please edit the "Technical Notes" field
accordingly. All revisions will be proofread by the Engineering Content Services team.
Previously, using xrandr to change the screen resolution of a video device under the Intel Q43/Q45 chipset sometimes failed. After attempting the switch, the screen may have blanked and gone out of sync. With this update, this issue has been resolved.
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.