Message ID | 20170110134305.26326-3-tomeu.vizoso@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Jan 10, 2017 at 02:43:05PM +0100, Tomeu Vizoso wrote: > Use drm_accurate_vblank_count so we have the full 32 bit to represent > the frame counter and userspace has a simpler way of knowing when the > counter wraps around. > > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> > Reviewed-by: Emil Velikov <emil.velikov@collabora.com> > Reviewed-by: Robert Foss <robert.foss@collabora.com> > --- > > drivers/gpu/drm/i915/i915_irq.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > index b9beb5955dae..75fb1f66cc0c 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -1557,7 +1557,6 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, > struct drm_driver *driver = dev_priv->drm.driver; > uint32_t crcs[5]; > int head, tail; > - u32 frame; > > spin_lock(&pipe_crc->lock); > if (pipe_crc->source) { > @@ -1612,8 +1611,9 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, > crcs[2] = crc2; > crcs[3] = crc3; > crcs[4] = crc4; > - frame = driver->get_vblank_counter(&dev_priv->drm, pipe); > - drm_crtc_add_crc_entry(&crtc->base, true, frame, crcs); > + drm_crtc_add_crc_entry(&crtc->base, true, > + drm_accurate_vblank_count(&crtc->base), My assumption would be that this gets called after the vblank irq handler, so using the _accurate version seems a bit overkill. > + crcs); > } > } > #else > -- > 2.9.3
On Tue, Jan 10, 2017 at 05:54:57PM +0200, Ville Syrjälä wrote: > On Tue, Jan 10, 2017 at 02:43:05PM +0100, Tomeu Vizoso wrote: > > Use drm_accurate_vblank_count so we have the full 32 bit to represent > > the frame counter and userspace has a simpler way of knowing when the > > counter wraps around. > > > > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> > > Reviewed-by: Emil Velikov <emil.velikov@collabora.com> > > Reviewed-by: Robert Foss <robert.foss@collabora.com> > > --- > > > > drivers/gpu/drm/i915/i915_irq.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > > index b9beb5955dae..75fb1f66cc0c 100644 > > --- a/drivers/gpu/drm/i915/i915_irq.c > > +++ b/drivers/gpu/drm/i915/i915_irq.c > > @@ -1557,7 +1557,6 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, > > struct drm_driver *driver = dev_priv->drm.driver; > > uint32_t crcs[5]; > > int head, tail; > > - u32 frame; > > > > spin_lock(&pipe_crc->lock); > > if (pipe_crc->source) { > > @@ -1612,8 +1611,9 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, > > crcs[2] = crc2; > > crcs[3] = crc3; > > crcs[4] = crc4; > > - frame = driver->get_vblank_counter(&dev_priv->drm, pipe); > > - drm_crtc_add_crc_entry(&crtc->base, true, frame, crcs); > > + drm_crtc_add_crc_entry(&crtc->base, true, > > + drm_accurate_vblank_count(&crtc->base), > > My assumption would be that this gets called after the vblank irq > handler, so using the _accurate version seems a bit overkill. Since we're at like v15 of this I figured I'll pull this in, and we can polish this a bit more later. Tomeu, can you pls do that follow-up patch and get Ville to review+merge it. -Daniel
On 10 January 2017 at 17:31, Daniel Vetter <daniel@ffwll.ch> wrote: > On Tue, Jan 10, 2017 at 05:54:57PM +0200, Ville Syrjälä wrote: >> On Tue, Jan 10, 2017 at 02:43:05PM +0100, Tomeu Vizoso wrote: >> > Use drm_accurate_vblank_count so we have the full 32 bit to represent >> > the frame counter and userspace has a simpler way of knowing when the >> > counter wraps around. >> > >> > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> >> > Reviewed-by: Emil Velikov <emil.velikov@collabora.com> >> > Reviewed-by: Robert Foss <robert.foss@collabora.com> >> > --- >> > >> > drivers/gpu/drm/i915/i915_irq.c | 6 +++--- >> > 1 file changed, 3 insertions(+), 3 deletions(-) >> > >> > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c >> > index b9beb5955dae..75fb1f66cc0c 100644 >> > --- a/drivers/gpu/drm/i915/i915_irq.c >> > +++ b/drivers/gpu/drm/i915/i915_irq.c >> > @@ -1557,7 +1557,6 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, >> > struct drm_driver *driver = dev_priv->drm.driver; >> > uint32_t crcs[5]; >> > int head, tail; >> > - u32 frame; >> > >> > spin_lock(&pipe_crc->lock); >> > if (pipe_crc->source) { >> > @@ -1612,8 +1611,9 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, >> > crcs[2] = crc2; >> > crcs[3] = crc3; >> > crcs[4] = crc4; >> > - frame = driver->get_vblank_counter(&dev_priv->drm, pipe); >> > - drm_crtc_add_crc_entry(&crtc->base, true, frame, crcs); >> > + drm_crtc_add_crc_entry(&crtc->base, true, >> > + drm_accurate_vblank_count(&crtc->base), >> >> My assumption would be that this gets called after the vblank irq >> handler, so using the _accurate version seems a bit overkill. > > Since we're at like v15 of this I figured I'll pull this in, and we can > polish this a bit more later. Tomeu, can you pls do that follow-up patch > and get Ville to review+merge it. At least on the SKL and SNB I have here, the -sequence subtests in kms_pipe_crc_basic fail if I replace the call to drm_accurate_vblank_count with drm_crtc_vblank_count. Any ideas on why this could be? Thanks, Tomeu
On Mon, Jan 16, 2017 at 10:12:36AM +0100, Tomeu Vizoso wrote: > On 10 January 2017 at 17:31, Daniel Vetter <daniel@ffwll.ch> wrote: > > On Tue, Jan 10, 2017 at 05:54:57PM +0200, Ville Syrjälä wrote: > >> On Tue, Jan 10, 2017 at 02:43:05PM +0100, Tomeu Vizoso wrote: > >> > Use drm_accurate_vblank_count so we have the full 32 bit to represent > >> > the frame counter and userspace has a simpler way of knowing when the > >> > counter wraps around. > >> > > >> > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> > >> > Reviewed-by: Emil Velikov <emil.velikov@collabora.com> > >> > Reviewed-by: Robert Foss <robert.foss@collabora.com> > >> > --- > >> > > >> > drivers/gpu/drm/i915/i915_irq.c | 6 +++--- > >> > 1 file changed, 3 insertions(+), 3 deletions(-) > >> > > >> > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > >> > index b9beb5955dae..75fb1f66cc0c 100644 > >> > --- a/drivers/gpu/drm/i915/i915_irq.c > >> > +++ b/drivers/gpu/drm/i915/i915_irq.c > >> > @@ -1557,7 +1557,6 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, > >> > struct drm_driver *driver = dev_priv->drm.driver; > >> > uint32_t crcs[5]; > >> > int head, tail; > >> > - u32 frame; > >> > > >> > spin_lock(&pipe_crc->lock); > >> > if (pipe_crc->source) { > >> > @@ -1612,8 +1611,9 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, > >> > crcs[2] = crc2; > >> > crcs[3] = crc3; > >> > crcs[4] = crc4; > >> > - frame = driver->get_vblank_counter(&dev_priv->drm, pipe); > >> > - drm_crtc_add_crc_entry(&crtc->base, true, frame, crcs); > >> > + drm_crtc_add_crc_entry(&crtc->base, true, > >> > + drm_accurate_vblank_count(&crtc->base), > >> > >> My assumption would be that this gets called after the vblank irq > >> handler, so using the _accurate version seems a bit overkill. > > > > Since we're at like v15 of this I figured I'll pull this in, and we can > > polish this a bit more later. Tomeu, can you pls do that follow-up patch > > and get Ville to review+merge it. > > At least on the SKL and SNB I have here, the -sequence subtests in > kms_pipe_crc_basic fail if I replace the call to > drm_accurate_vblank_count with drm_crtc_vblank_count. > > Any ideas on why this could be? No idea at all, on a quick check things seem ordered correctly. Can you pls paste how the test falls over? -Daniel
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index b9beb5955dae..75fb1f66cc0c 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -1557,7 +1557,6 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, struct drm_driver *driver = dev_priv->drm.driver; uint32_t crcs[5]; int head, tail; - u32 frame; spin_lock(&pipe_crc->lock); if (pipe_crc->source) { @@ -1612,8 +1611,9 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, crcs[2] = crc2; crcs[3] = crc3; crcs[4] = crc4; - frame = driver->get_vblank_counter(&dev_priv->drm, pipe); - drm_crtc_add_crc_entry(&crtc->base, true, frame, crcs); + drm_crtc_add_crc_entry(&crtc->base, true, + drm_accurate_vblank_count(&crtc->base), + crcs); } } #else