[igt-dev] [PATCH i-g-t v1] tests/kms_universal_plane: Skip pageflip_test_pipe subtest if pipe has more than 1 primary plane
Jessica Zhang
quic_jesszhan at quicinc.com
Mon May 2 22:31:29 UTC 2022
On 5/2/2022 2:50 PM, Rob Clark wrote:
> On Thu, Apr 28, 2022 at 6:11 PM Jessica Zhang <quic_jesszhan at quicinc.com> wrote:
>>
>> Currently, IGT assumes that the first primary plane it encounters in
>> display->planes is the primary plane being assigned to the current pipe
>> in the driver [1]. However, this is not always the case when planes are
>> being shared between pipes and there are multiple possible primary
>> planes.
>
> I wonder if it is actually worse than that.. igt_pipe_t seems designed
> around the idea that CRTCs have exclusive ownership of planes. Not
> sure if there are any tests that drive multiple CRTCs at the same
> time, which could end up trying to use the same plane on multiple
> pipes..
>
> BR,
> -R
Yep, there are at least a few cases in kms_atomic_transition where, with
DP connected, IGT will try to do a commit for 2 CRTCs within the same
commit [1]. Planning to submit a patch addressing that after we sort out
the shared planes-related failures for the no DP case.
(BTW, to elaborate some more on the issue we were facing with this
subtest on trogdor: an -EBUSY was being thrown from the page flip ioctl
[2] because we were assigning an fb to an unused primary plane.)
Best,
Jessica Zhang
[1]
https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_atomic_transition.c#L709
(note: `mask` in this method is a mask for which CRTC to commit to, and
with DP connected it can go up to 3)
[2]
https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/commit/ed944b45563c694dc6373bc48dc83b8ba7edb19f
>
>> It's possible for IGT to set pipe->plane_primary to a primary plane
>> that's different from the one being used in the driver, since IGT uses
>> possible_crtcs to find the primary planes and stops at the first match.
>>
>> Unfortunately, DRM doesn't expose which primary plane is being used by a
>> pipe, so let's skip pageflip_test_pipe for cases where there are
>> multiple possible primary planes.
>>
>> [1]
>> https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/lib/igt_kms.c#L2305
>>
>> Signed-off-by: Jessica Zhang <quic_jesszhan at quicinc.com>
>> ---
>> tests/kms_universal_plane.c | 14 +++++++++++++-
>> 1 file changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
>> index 3cb6d704a6ef..95cae2be1aaf 100644
>> --- a/tests/kms_universal_plane.c
>> +++ b/tests/kms_universal_plane.c
>> @@ -470,13 +470,25 @@ static void
>> pageflip_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
>> {
>> pageflip_test_t test = { .data = data };
>> - igt_plane_t *primary;
>> + igt_plane_t *primary, *plane;
>> struct timeval timeout = { .tv_sec = 0, .tv_usec = 500 };
>> drmEventContext evctx = { .version = 2 };
>>
>> fd_set fds;
>> + int primary_plane_count = 0;
>> int ret = 0;
>>
>> + for_each_plane_on_pipe(&data->display, pipe, plane)
>> + if (plane->type == DRM_PLANE_TYPE_PRIMARY)
>> + primary_plane_count++;
>> +
>> + /*
>> + * Skip subtest when there are multiple primary planes since we
>> + * aren't able to distinguish which primary plane is actually being
>> + * assigned a pipe
>> + */
>> + igt_skip_on(primary_plane_count > 1);
>> +
>> igt_require_pipe(&data->display, pipe);
>>
>> igt_output_set_pipe(output, pipe);
>> --
>> 2.31.0
>>
More information about the igt-dev
mailing list