[Intel-gfx] [PATCH i-g-t v5 7/7] kms_flip: Change __wait_for_vblank to use helper function.
Marius Vlad
marius.c.vlad at intel.com
Tue May 17 22:37:37 UTC 2016
On Tue, May 17, 2016 at 10:48:02AM -0400, Robert Foss wrote:
>
>
> On 2016-05-17 06:32 AM, Marius Vlad wrote:
> >On Mon, May 16, 2016 at 09:38:32AM -0400, robert.foss at collabora.com wrote:
> >>From: Robert Foss <robert.foss at collabora.com>
> >>
> >>Change __wait_for_vblank() to use kmstest_get_vbl_flag() helper function.
> >>
> >>Signed-off-by: Robert Foss <robert.foss at collabora.com>
> >>---
> >> tests/kms_flip.c | 8 ++++----
> >> 1 file changed, 4 insertions(+), 4 deletions(-)
> >>
> >>diff --git a/tests/kms_flip.c b/tests/kms_flip.c
> >>index eda2fcc..0ecca07 100644
> >>--- a/tests/kms_flip.c
> >>+++ b/tests/kms_flip.c
> >>@@ -481,15 +481,15 @@ static int __wait_for_vblank(unsigned int flags, int crtc_idx,
> >> {
> >> drmVBlank wait_vbl;
> >> int ret;
> >>- unsigned crtc_idx_mask;
> >>+ uint32_t pipe_id_flag;
> >> bool event = !(flags & TEST_VBLANK_BLOCK);
> >>
> >> memset(&wait_vbl, 0, sizeof(wait_vbl));
> >>
> >>- crtc_idx_mask = crtc_idx << DRM_VBLANK_HIGH_CRTC_SHIFT;
> >>- igt_assert(!(crtc_idx_mask & ~DRM_VBLANK_HIGH_CRTC_MASK));
> >If crtc_idx is 1 (pipe B), crtc_idx_mask = (1 << DRM_VBLANK_HIGH_CRTC_SHIFT) = 2.
> >>+ pipe_id_flag = kmstest_get_vbl_flag(crtc_idx);
> >>+ igt_assert(!(pipe_id_flag & ~DRM_VBLANK_HIGH_CRTC_MASK));
> >If crtc_idx is 1 (pipe B), kmstest_get_vbl_flag(crtc_idx) = DRM_VBLANK_SECONDARY = 0x20000000
> >
> >And the assertion fails as !(0x20000000 & ~0x0000003e) = 0.
> >
> >Should kmstest_get_vbl_flag() always return pipe_id << 1?
>
> From re-reading the pipe id parsing code in drm_irq.c drm_wait_vblank()
> it would seem to me that the assertion is incorrect, specifically for the
> case of _DRM_VBLANK_SECONDARY.
>
> Supplying the flag _DRM_VBLANK_SECONDARY and setting the high crtc id field
> to 1 fboth seem to be valid ways to communicate the same thing.
Indeed.
>
> flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
> high_pipe = (vblwait->request.type &_DRM_VBLANK_HIGH_CRTC_MASK);
> if (high_pipe)
> pipe = high_pipe >> _DRM_VBLANK_HIGH_CRTC_SHIFT;
> else
> pipe = flags & _DRM_VBLANK_SECONDARY ? 1 : 0;
>
>
> Maybe adding correct and more thorough assertion to kmstest_get_vbl_flag()
> and removing the failing assertion is the way forward.
Sounds reasonable to me, though I assume that the assertion had/has
some point in determining that you have a valid crtc_idx.
>
> >
> >>
> >>- wait_vbl.request.type = crtc_idx_mask;
> >>+ wait_vbl.request.type = pipe_id_flag;
> >> if (flags & TEST_VBLANK_ABSOLUTE)
> >> wait_vbl.request.type |= DRM_VBLANK_ABSOLUTE;
> >> else
> >>--
> >>2.7.4
> >>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20160518/5adb3911/attachment.sig>
More information about the Intel-gfx
mailing list