From the Intel 965 Programmer’s Reference Manual, volume 3,
chapter 2.2.2 "Mode Switch Programming Sequence".
The disable sequence should be:
- Disable planes (VGA or hires)
- Disable pipe
- Disable VGA display in 0x71400 bit 31
This patch implements that order plus waits for a vblank at the end.
Fixes bug #17756.
Dump more panel data, including number of expected entries. Had to
refactor things a bit, but now each function should get size information
so further checking can be added more easily.
On some machines it appears that the LFP info pointers give us more
accurate panel info than if we index into the LFP data table using the
panel type index. Early reports indicate that using the pointers
doesn't cause regressions, so switch to them by default to help 8xx
machines.
Fixes bug 17310 (and hopefully 17658 too).
GCC isn't smart enough to analyze the control flow and figure out that
these are false positives, but initializing them shouldn't hurt, so work
around it.
Some ADD2 card doesn't get SDVO detect status setup right,
which disabled outputs on those cards. This adds a new
option "ForceSDVODetect" to probe all SDVO ports anyway.
On DVI, centered VGA mode is used instead of native mode VGA, and
PLL on pipe is used instead of VGA PLL setting. So make sure PLL
settled down in restore time.
For CRT this trys to probe all possible port for EDID and
detects got confirmed by EDID's d/a type bit.
For HDMI/DVI, also using EDID d/a type bit to ensure it should
handle the connect or not.
Oh duh (i830_video.c):
/* Clamp dst width & height to 7x of src (overlay limit) */
if(drw_w > (src_w * 7))
drw_w = src_w * 7;
if(drw_h > (src_h * 7))
drw_h = src_h * 7;
The condition I see in the documentation appears to be src_h/drw_h < 8, that
is, src_h < 8*drw_h. It appears this was "fixed" incorrectly in e784e152.
It seems difficult to believe that this limitation would exist at all for the
texture unit.
Unfortunate mismatch between kernel and DRM master headers.
Kernel:
typedef struct _drm_i915_batchbuffer { ... } drm_i915_batchbuffer_t;
DRM master:
typedef struct drm_i915_batchbuffer { ... } drm_i915_batchbuffer_t;
so use the typedef rather than the morphing structure name.
We need to program DSPARB with only one plane enabled at most, and that's
guaranteed to be the case when we're called during mode set, so just assert
that case but otherwise leave the planes alone to avoid flicker on active
displays during output detection for example.
Fixes bug #17050.