From: Daniel Vetter <daniel@ffwll.ch>
To: Thomas Richter <thor@math.tu-berlin.de>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] Workaround for flicker with panning on the i830
Date: Fri, 8 Nov 2013 17:32:14 +0100 [thread overview]
Message-ID: <20131108163213.GC14082@phenom.ffwll.local> (raw)
In-Reply-To: <527D024D.8020000@math.tu-berlin.de>
On Fri, Nov 08, 2013 at 04:25:01PM +0100, Thomas Richter wrote:
> Hi Daniel, dear intel-experts,
>
> please find a revised patch attached that addresses the flicker with
> panning on the i830 chipset. This patch has now been tested
> on various screen layouts and seems to be quite reliable, i.e. I
> haven't seen the flicker since.
>
> Unfortunately, I have not been able to find a good workaround for
> the same problem on a tiled framebuffer, the pattern there, i.e.
> when
> the flicker appears, is quite irregular, and it is unclear how to
> address it. The situation is even worse for 8bit/pixel framebuffers
> where,
> for some panning positions, the display remains completely blank. It
> flickers once or twice, then gets a hick-up, and then stays off.
>
> The patch is currently only active on the i830, and only on
> pipelines using the VGA or DVO output. Strangely enough, LVDS does
> not
> seem to be affected, so maybe it is some memory/prefetch related
> problem. I also checked the debug output, though I found no
> suspicious activity while the screen flickers or is off. For a
> linear framebuffer, it seems to be enough to position the start of
> the
> pipeline ahead of the desired position, wait one vertical blank, and
> then adjust it to the correct position. For tiling or 8bit modes,
> this does not work.
>
> Sorry if the formatting is off. This is just what emacs left me
> with. Please feel free to reformat as you prefer.
Kernel has a tool in scripts/checkpatch.pl which will tell you what's all
off ;-) Also sob line and similar essential things are missing, but the
script should notice this all.
Also I think it'd be good to extract this hack into a little helper
function, maybe called i830_plane_panning_hack or so. That way it's out of
the normal code flow and clearly marked as something exceptionel.
> As a related question: Is there possibly a command line tool that
> would allow me to modify the intel chipset registers on the fly
> without going through a kernel recompile? It would make some
> experiments just so much simpler.
intel-gpu-tools has intel_reg_read/write tools. That should help ;-)
Cheers, Daniel
>
> Greetings,
> Thomas
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index e5eb11d..e98298f 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2087,8 +2087,44 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
> i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
> I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
> I915_WRITE(DSPLINOFF(plane), linear_offset);
> - } else
> - I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + linear_offset);
> + } else if (INTEL_INFO(dev)->gen == 2 && IS_I830(dev) && !intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
> + unsigned long planeadr = i915_gem_obj_ggtt_offset(obj) + linear_offset;
> + DRM_DEBUG_KMS("Plane address is 0x%lx",planeadr);
> + // I830 panning flicker work around. Only for non-LVDS output, only for i830.
> + if (obj->tiling_mode != I915_TILING_NONE) {
> + if ((planeadr & 0x40)) {
> + DRM_DEBUG_KMS("Detected potential flicker in tiling mode");
> + DRM_DEBUG_KMS("No workaround available");
> + DRM_DEBUG_KMS("Use a linear frame buffer");
> + }
> + } else {
> + switch (fb->pixel_format) {
> + case DRM_FORMAT_XRGB1555:
> + case DRM_FORMAT_ARGB1555:
> + case DRM_FORMAT_RGB565:
> + case DRM_FORMAT_XRGB8888:
> + case DRM_FORMAT_ARGB8888:
> + case DRM_FORMAT_XBGR8888:
> + case DRM_FORMAT_ABGR8888:
> + {
> + unsigned long int oldadr = I915_READ(DSPADDR(plane));
> + if (((oldadr ^ planeadr) & 0x40) && (planeadr & 0xc0) == 0xc0) {
> + DRM_DEBUG_KMS("Detected potential flicker in linear mode");
> + I915_WRITE(DSPADDR(plane), planeadr & (~(0x80)));
> + POSTING_READ(reg);
> + intel_wait_for_vblank(dev,intel_crtc->pipe);
> + }
> + }
> + break;
> + default:
> + DRM_DEBUG_KMS("No flicker workaround available\n");
> + break;
> + }
> + }
> + I915_WRITE(DSPADDR(plane), planeadr);
> + } else {
> + I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + linear_offset);
> + }
> POSTING_READ(reg);
>
> return 0;
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
next prev parent reply other threads:[~2013-11-08 20:32 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-07 10:05 [PATCH 1/7] drm/i915: Optimize pipe irq handling on bdw Daniel Vetter
2013-11-07 10:05 ` [PATCH 2/7] drm/i915: Fix up the bdw pipe interrupt enable lists Daniel Vetter
2013-11-07 13:49 ` [PATCH] " Daniel Vetter
2013-11-07 14:00 ` Ville Syrjälä
2013-11-07 10:05 ` [PATCH 3/7] drm/i915: Wire up port A aux channel Daniel Vetter
2013-11-07 13:20 ` Ville Syrjälä
2013-11-07 13:49 ` [PATCH] " Daniel Vetter
2013-11-07 13:59 ` Ville Syrjälä
2013-11-07 10:05 ` [PATCH 4/7] drm/i915: Wire up PCH interrupts for bdw Daniel Vetter
2013-11-07 10:05 ` [PATCH 5/7] drm/i915: Wire up pipe CRC support " Daniel Vetter
2013-11-07 10:05 ` [PATCH 6/7] drm/i915: Optimize gen8_enable|disable_vblank functions Daniel Vetter
2013-11-07 13:37 ` Ville Syrjälä
2013-11-07 14:31 ` [PATCH 1/2] drm/i915: Mask the vblank interrupt on bdw by default Daniel Vetter
2013-11-07 14:31 ` [PATCH 2/2] drm/i915/bdw: Take render error interrupt out of the mask Daniel Vetter
2013-11-07 14:35 ` [PATCH 1/2] drm/i915: Mask the vblank interrupt on bdw by default Ville Syrjälä
2013-11-07 10:05 ` [PATCH 7/7] drm/i915: Wire up cpu fifo underrun reporting support for bdw Daniel Vetter
2013-11-07 13:08 ` [PATCH 1/7] drm/i915: Optimize pipe irq handling on bdw Ville Syrjälä
2013-11-07 13:45 ` Ville Syrjälä
2013-11-08 7:57 ` Daniel Vetter
[not found] ` <32493_1383921850_527CF8B9_32493_10045_1_20131108075743.GZ14082@phenom.ffwll.local>
2013-11-08 15:25 ` [PATCH] Workaround for flicker with panning on the i830 Thomas Richter
2013-11-08 16:32 ` Daniel Vetter [this message]
[not found] ` <32493_1383928311_527D11F3_32493_10984_1_20131108163213.GC14082@phenom.ffwll.local>
2013-11-11 15:33 ` Thomas Richter
2013-11-11 15:43 ` Daniel Vetter
[not found] ` <1565_1384184620_5280FB2C_1565_9181_1_CAKMK7uF2UmKJHvVPrzE7-7A9DQ5JrLHAFnDiuVUDHFU+DoOXww@mail.gmail.com>
2013-11-12 16:41 ` Thomas Richter
2013-11-12 17:22 ` Daniel Vetter
[not found] ` <1565_1384276909_528263AC_1565_19510_1_20131112172217.GB3741@phenom.ffwll.local>
2013-11-13 19:50 ` Thomas Richter
2013-11-13 20:20 ` Daniel Vetter
[not found] ` <26136_1384374018_5283DF02_26136_9623_1_20131113202049.GH7251@phenom.ffwll.local>
2013-11-14 7:14 ` Thomas Richter
2013-11-14 8:21 ` Daniel Vetter
[not found] ` <26136_1384417275_528487FB_26136_12808_1_CAKMK7uEfiAoFutfk=mtqteuV07t5SneGniyXnRet_T3Bs4spRw@mail.gmail.com>
2013-11-14 18:15 ` Thomas Richter
2013-11-14 18:33 ` Daniel Vetter
[not found] ` <26136_1384453961_52851749_26136_18549_1_20131114183308.GI22741@phenom.ffwll.local>
2013-11-15 13:16 ` Workaround for flicker with panning on the i830 - found a way for tiled displays Thomas Richter
2013-11-15 15:41 ` Daniel Vetter
[not found] ` <10422_1384530087_528640A7_10422_3841_1_20131115154159.GU22741@phenom.ffwll.local>
2013-11-15 16:08 ` Thomas Richter
2013-11-15 17:01 ` Thomas Richter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131108163213.GC14082@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
--cc=thor@math.tu-berlin.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox