[Intel-gfx] [PATCH] drm/i915: Avoid flicker with horizontal panning on 830GM

Thomas Richter thor at math.tu-berlin.de
Mon Sep 2 15:58:59 CEST 2013


Hi Daniel,

> I've just looked at the docs and they only mention that the base address
> must be pixel aligned. But it could very well be that the watermarks are a
> bit off for your chipset. The below quick hack should test this theory.
> -Daniel
>
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index dfdc7ad..990b1f4 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -1673,7 +1673,7 @@ static void i830_update_wm(struct drm_device *dev)
>   				       dev_priv->display.get_fifo_size(dev, 0),
>   				       4, latency_ns);
>   	fwater_lo = I915_READ(FW_BLC)&  ~0xfff;
> -	fwater_lo |= (3<<8) | planea_wm;
> +	fwater_lo |= (3<<8) | 0;
>
>   	DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d\n", planea_wm);
>
Checked with the above modifications. Unfortunately, the result is 
negative. With the above modifications and my changes commented out, the 
screen flickers in normal state (without panning) but in a different 
way: With the above enabled, you get a rather irregular almost 
pseudo-random flicker, and not the 60/30Hz flicker I see when panning 
horizontally. If I add horizontal panning, then I also get this 
irregular flicker, except when scrolling to the "forbidden positions" at 
which I get the regular hi-frequency flicker again.

However, now that I checked closer, I found that my patch has also a 
drawback, namely the hardware scroll position and the requested scroll 
position disagrees, i.e. the mouse pointer is not exactly where it 
should be, i.e. the mouse pointer hot-spot is off.

Is there a way to indicate the calling method what the actual 
panning/scroll position is if it is different from the requested position?

Is there a different method to scroll the screen than to adjust the 
screen origin? Old hardware had not only a screen pointer, but also a 
pixel-offset (horizontal scroll) register. Is there something like this 
on the 830M to work around the observed trouble?

Greetings,
     Thomas

PS: A closer inspection shows that the screen flickers if the panning 
position x has the property that (x mod 16) != 0. Strange enough.





More information about the Intel-gfx mailing list