[Intel-gfx] [PATCH i-g-t v5 7/7] kms_flip: Change __wait_for_vblank to use helper function.
Robert Foss
robert.foss at collabora.com
Tue May 17 14:48:02 UTC 2016
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.
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.
>
>>
>> - 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
>>
More information about the Intel-gfx
mailing list