From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Rodrigo Vivi <rodrigo.vivi@gmail.com>
Cc: intel-gfx <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 1/2] drm/i915: Fix gen2 scanout position readout
Date: Wed, 6 Nov 2013 15:05:49 +0200 [thread overview]
Message-ID: <20131106130549.GF5986@intel.com> (raw)
In-Reply-To: <CABVU7+sZkJVPryMv=FmzOr7Fn60cBfJ+o2P3VCQJc=dJMxNtQg@mail.gmail.com>
On Wed, Nov 06, 2013 at 10:38:42AM -0200, Rodrigo Vivi wrote:
> I was going to get this for -collector but got a big conflict.
It should be already in. Although as it turns out it's partially
crap. Apparently I hadn't tested the ISR vblank bit behaviour
properly on non-PCH platforms. It doesn't actually work the way
we want, so there are patches in my latest vblank timestamp series
that kill the ISR parts and add a kludge to work around the scanline
counter's silly behaviour.
>
>
> On Fri, Oct 11, 2013 at 3:52 PM, <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Gen2 doesn't have the pixelcount register that gen3 and gen4 have.
> > Instead we must use the scanline counter like we do for ctg+.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_irq.c | 21 +++++++++++++++------
> > 1 file changed, 15 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> > index 63a9642..3c31a2f 100644
> > --- a/drivers/gpu/drm/i915/i915_irq.c
> > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > @@ -592,7 +592,7 @@ static u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe)
> > return I915_READ(reg);
> > }
> >
> > -static bool g4x_pipe_in_vblank(struct drm_device *dev, enum pipe pipe)
> > +static bool intel_pipe_in_vblank(struct drm_device *dev, enum pipe pipe)
> > {
> > struct drm_i915_private *dev_priv = dev->dev_private;
> > uint32_t status;
> > @@ -603,7 +603,13 @@ static bool g4x_pipe_in_vblank(struct drm_device *dev, enum pipe pipe)
> > I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
> >
> > return I915_READ(VLV_ISR) & status;
> > - } else if (IS_G4X(dev)) {
> > + } else if (IS_GEN2(dev)) {
> > + status = pipe == PIPE_A ?
> > + I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT :
> > + I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
> > +
> > + return I915_READ16(ISR) & status;
> > + } else if (INTEL_INFO(dev)->gen < 5) {
> > status = pipe == PIPE_A ?
> > I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT :
> > I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
> > @@ -658,11 +664,14 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
> >
> > ret |= DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE;
> >
> > - if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
> > + if (IS_GEN2(dev) || IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
> > /* No obvious pixelcount register. Only query vertical
> > * scanout position from Display scan line register.
> > */
> > - position = I915_READ(PIPEDSL(pipe)) & 0x1fff;
> > + if (IS_GEN2(dev))
> > + position = I915_READ(PIPEDSL(pipe)) & DSL_LINEMASK_GEN2;
> > + else
> > + position = I915_READ(PIPEDSL(pipe)) & DSL_LINEMASK_GEN3;
> >
> > /*
> > * The scanline counter increments at the leading edge
> > @@ -671,7 +680,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
> > * to get a more accurate picture whether we're in vblank
> > * or not.
> > */
> > - in_vbl = g4x_pipe_in_vblank(dev, pipe);
> > + in_vbl = intel_pipe_in_vblank(dev, pipe);
> > if ((in_vbl && position == vbl_start - 1) ||
> > (!in_vbl && position == vbl_end - 1))
> > position = (position + 1) % vtotal;
> > @@ -701,7 +710,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
> > else
> > position += vtotal - vbl_end;
> >
> > - if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
> > + if (IS_GEN2(dev) || IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
> > *vpos = position;
> > *hpos = 0;
> > } else {
> > --
> > 1.8.1.5
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>
> --
> Rodrigo Vivi
> Blog: http://blog.vivi.eng.br
--
Ville Syrjälä
Intel OTC
next prev parent reply other threads:[~2013-11-06 13:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-11 18:52 [PATCH 0/2] drm/i915: Gen2 vblank stuff ville.syrjala
2013-10-11 18:52 ` [PATCH 1/2] drm/i915: Fix gen2 scanout position readout ville.syrjala
2013-11-06 12:38 ` Rodrigo Vivi
2013-11-06 13:05 ` Ville Syrjälä [this message]
2013-10-11 18:52 ` [PATCH 2/2] drm/i915: Don't pretend that gen2 has a hardware frame counter ville.syrjala
2013-10-14 10:01 ` [PATCH 0/2] drm/i915: Gen2 vblank stuff Chris Wilson
2013-10-14 15:23 ` Daniel Vetter
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=20131106130549.GF5986@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=rodrigo.vivi@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.