diff mbox

[i-g-t] tests: Increase value of I915_MAX_PIPES to 6

Message ID 1496949033-8843-1-git-send-email-sunpeng.li@amd.com (mailing list archive)
State New, archived
Headers show

Commit Message

Leo Li June 8, 2017, 7:10 p.m. UTC
From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com>

Increasing max pipe count to 6 to support AMD GPU's.

Since some tests' behavior depends on this value, small changes are made
to remove this dependency:

* kms_ccs: Early abort if wanted_pipe is out-of-bounds.
* kms_concurrent: Check if pipe is within bounds first.
* kms_pipe_color: Prevent skipping of subsequent tests by placing
    generated tests in a 'igt_subtest_group'.
* kms_plane: Move pipe and plane index checking to subtest group level.

Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>
---
 lib/igt_kms.c          | 10 ++++++++--
 lib/igt_kms.h          |  3 +++
 tests/kms_ccs.c        |  2 ++
 tests/kms_concurrent.c |  2 +-
 tests/kms_pipe_color.c |  3 ++-
 tests/kms_plane.c      |  8 +++++---
 6 files changed, 21 insertions(+), 7 deletions(-)

Comments

Alex Deucher June 8, 2017, 9:48 p.m. UTC | #1
> -----Original Message-----

> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf

> Of sunpeng.li@amd.com

> Sent: Thursday, June 08, 2017 3:11 PM

> To: intel-gfx@lists.freedesktop.org; amd-gfx@lists.freedesktop.org;

> Wentland, Harry

> Cc: Li, Sun peng

> Subject: [PATCH i-g-t] tests: Increase value of I915_MAX_PIPES to 6

> 

> From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com>

> 

> Increasing max pipe count to 6 to support AMD GPU's.

> 

> Since some tests' behavior depends on this value, small changes are made

> to remove this dependency:

> 

> * kms_ccs: Early abort if wanted_pipe is out-of-bounds.

> * kms_concurrent: Check if pipe is within bounds first.

> * kms_pipe_color: Prevent skipping of subsequent tests by placing

>     generated tests in a 'igt_subtest_group'.

> * kms_plane: Move pipe and plane index checking to subtest group level.

> 

> Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>

> ---

>  lib/igt_kms.c          | 10 ++++++++--

>  lib/igt_kms.h          |  3 +++

>  tests/kms_ccs.c        |  2 ++

>  tests/kms_concurrent.c |  2 +-

>  tests/kms_pipe_color.c |  3 ++-

>  tests/kms_plane.c      |  8 +++++---

>  6 files changed, 21 insertions(+), 7 deletions(-)

> 

> diff --git a/lib/igt_kms.c b/lib/igt_kms.c

> index c77716b..1bb62f0 100644

> --- a/lib/igt_kms.c

> +++ b/lib/igt_kms.c

> @@ -319,12 +319,12 @@ const unsigned char* igt_kms_get_alt_edid(void)

>   */

>  const char *kmstest_pipe_name(enum pipe pipe)

>  {

> -	const char *str[] = { "A", "B", "C" };

> +	const char *str[] = { "A", "B", "C", "D", "E", "F"};

> 

>  	if (pipe == PIPE_NONE)

>  		return "None";

> 

> -	if (pipe > 2)

> +	if (pipe > 5)


Use I915_MAX_PIPES here rather than hardcoding 5.  With that fixed the patch is:
Acked-by: Alex Deucher <alexander.deucher@amd.com>


>  		return "invalid";

> 

>  	return str[pipe];

> @@ -344,6 +344,12 @@ int kmstest_pipe_to_index(char pipe)

>  		return 1;

>  	else if (pipe == 'C')

>  		return 2;

> +	else if (pipe == 'D')

> +		return 3;

> +	else if (pipe == 'E')

> +		return 4;

> +	else if (pipe == 'F')

> +		return 5;

>  	else

>  		return -EINVAL;

>  }

> diff --git a/lib/igt_kms.h b/lib/igt_kms.h

> index 9567a26..8f7c2bb 100644

> --- a/lib/igt_kms.h

> +++ b/lib/igt_kms.h

> @@ -54,6 +54,9 @@ enum pipe {

>          PIPE_A = 0,

>          PIPE_B,

>          PIPE_C,

> +	PIPE_D,

> +	PIPE_E,

> +	PIPE_F,

>          I915_MAX_PIPES

>  };

>  const char *kmstest_pipe_name(enum pipe pipe);

> diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c

> index d829152..0795e3a 100644

> --- a/tests/kms_ccs.c

> +++ b/tests/kms_ccs.c

> @@ -250,6 +250,8 @@ static void test(data_t *data)

>  	int valid_tests = 0;

>  	enum pipe wanted_pipe = data->pipe;

> 

> +	igt_skip_on(wanted_pipe >= display->n_pipes);

> +

>  	for_each_pipe_with_valid_output(display, data->pipe, data-

> >output) {

>  		if (wanted_pipe != PIPE_NONE && data->pipe !=

> wanted_pipe)

>  			continue;

> diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c

> index b34540b..db06a37 100644

> --- a/tests/kms_concurrent.c

> +++ b/tests/kms_concurrent.c

> @@ -351,8 +351,8 @@ run_tests_for_pipe(data_t *data, enum pipe pipe)

>  	igt_fixture {

>  		int valid_tests = 0;

> 

> -		igt_require(data->display.pipes[pipe].n_planes > 0);

>  		igt_skip_on(pipe >= data->display.n_pipes);

> +		igt_require(data->display.pipes[pipe].n_planes > 0);

> 

>  		for_each_valid_output_on_pipe(&data->display, pipe,

> output)

>  			valid_tests++;

> diff --git a/tests/kms_pipe_color.c b/tests/kms_pipe_color.c

> index fd58ac8..da49eb1 100644

> --- a/tests/kms_pipe_color.c

> +++ b/tests/kms_pipe_color.c

> @@ -1180,7 +1180,8 @@ igt_main

>  	}

> 

>  	for (int pipe = 0; pipe < I915_MAX_PIPES; pipe++)

> -		run_tests_for_pipe(&data, pipe);

> +		igt_subtest_group

> +			run_tests_for_pipe(&data, pipe);

> 

>  	igt_subtest_f("invalid-lut-sizes")

>  		invalid_lut_sizes(&data);

> diff --git a/tests/kms_plane.c b/tests/kms_plane.c

> index e1bd467..34418ca 100644

> --- a/tests/kms_plane.c

> +++ b/tests/kms_plane.c

> @@ -354,9 +354,6 @@ test_plane_panning(data_t *data, enum pipe pipe,

> int plane,

>  	igt_output_t *output;

>  	int connected_outs = 0;

> 

> -	igt_skip_on(pipe >= data->display.n_pipes);

> -	igt_skip_on(plane >= data->display.pipes[pipe].n_planes);

> -

>  	for_each_valid_output_on_pipe(&data->display, pipe, output) {

>  		test_plane_panning_with_output(data, pipe, plane, output,

>  						flags);

> @@ -369,6 +366,11 @@ test_plane_panning(data_t *data, enum pipe pipe,

> int plane,

>  static void

>  run_tests_for_pipe_plane(data_t *data, enum pipe pipe)

>  {

> +	igt_fixture {

> +		igt_skip_on(pipe >= data->display.n_pipes);

> +		igt_require(data->display.pipes[pipe].n_planes > 0);

> +	}

> +

>  	igt_subtest_f("plane-position-covered-pipe-%s-planes",

>  		      kmstest_pipe_name(pipe)) {

>  		int n_planes = data->display.pipes[pipe].n_planes;

> --

> 2.7.4

> 

> _______________________________________________

> amd-gfx mailing list

> amd-gfx@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Arkadiusz Hiler June 9, 2017, 9:49 a.m. UTC | #2
On Thu, Jun 08, 2017 at 09:48:58PM +0000, Deucher, Alexander wrote:
> > -----Original Message-----
> > From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> > Of sunpeng.li@amd.com
> > Sent: Thursday, June 08, 2017 3:11 PM
> > To: intel-gfx@lists.freedesktop.org; amd-gfx@lists.freedesktop.org;
> > Wentland, Harry
> > Cc: Li, Sun peng
> > Subject: [PATCH i-g-t] tests: Increase value of I915_MAX_PIPES to 6
> > 
> > From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com>
> > 
> > Increasing max pipe count to 6 to support AMD GPU's.
> > 
> > Since some tests' behavior depends on this value, small changes are made
> > to remove this dependency:
> > 
> > * kms_ccs: Early abort if wanted_pipe is out-of-bounds.
> > * kms_concurrent: Check if pipe is within bounds first.
> > * kms_pipe_color: Prevent skipping of subsequent tests by placing
> >     generated tests in a 'igt_subtest_group'.
> > * kms_plane: Move pipe and plane index checking to subtest group level.
> > 
> > Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>
> > ---
> >  lib/igt_kms.c          | 10 ++++++++--
> >  lib/igt_kms.h          |  3 +++
> >  tests/kms_ccs.c        |  2 ++
> >  tests/kms_concurrent.c |  2 +-
> >  tests/kms_pipe_color.c |  3 ++-
> >  tests/kms_plane.c      |  8 +++++---
> >  6 files changed, 21 insertions(+), 7 deletions(-)
> > 
> > diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> > index c77716b..1bb62f0 100644
> > --- a/lib/igt_kms.c
> > +++ b/lib/igt_kms.c
> > @@ -319,12 +319,12 @@ const unsigned char* igt_kms_get_alt_edid(void)
> >   */
> >  const char *kmstest_pipe_name(enum pipe pipe)
> >  {
> > -	const char *str[] = { "A", "B", "C" };
> > +	const char *str[] = { "A", "B", "C", "D", "E", "F"};
> > 
> >  	if (pipe == PIPE_NONE)
> >  		return "None";
> > 
> > -	if (pipe > 2)
> > +	if (pipe > 5)
> 
> Use I915_MAX_PIPES here rather than hardcoding 5.  With that fixed the patch is:
> Acked-by: Alex Deucher <alexander.deucher@amd.com>

The name can be changed to IGT_MAX_PIPES, as using I915 here is
missleading.

> 
> >  		return "invalid";
> > 
> >  	return str[pipe];
> > @@ -344,6 +344,12 @@ int kmstest_pipe_to_index(char pipe)
> >  		return 1;
> >  	else if (pipe == 'C')
> >  		return 2;
> > +	else if (pipe == 'D')
> > +		return 3;
> > +	else if (pipe == 'E')
> > +		return 4;
> > +	else if (pipe == 'F')
> > +		return 5;
> >  	else
> >  		return -EINVAL;
> >  }
> > diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> > index 9567a26..8f7c2bb 100644
> > --- a/lib/igt_kms.h
> > +++ b/lib/igt_kms.h
> > @@ -54,6 +54,9 @@ enum pipe {
> >          PIPE_A = 0,
> >          PIPE_B,
> >          PIPE_C,
> > +	PIPE_D,
> > +	PIPE_E,
> > +	PIPE_F,
> >          I915_MAX_PIPES
> >  };
> >  const char *kmstest_pipe_name(enum pipe pipe);
> > diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
> > index d829152..0795e3a 100644
> > --- a/tests/kms_ccs.c
> > +++ b/tests/kms_ccs.c
> > @@ -250,6 +250,8 @@ static void test(data_t *data)
> >  	int valid_tests = 0;
> >  	enum pipe wanted_pipe = data->pipe;
> > 
> > +	igt_skip_on(wanted_pipe >= display->n_pipes);
> > +
> >  	for_each_pipe_with_valid_output(display, data->pipe, data-
> > >output) {
> >  		if (wanted_pipe != PIPE_NONE && data->pipe !=
> > wanted_pipe)
> >  			continue;
> > diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
> > index b34540b..db06a37 100644
> > --- a/tests/kms_concurrent.c
> > +++ b/tests/kms_concurrent.c
> > @@ -351,8 +351,8 @@ run_tests_for_pipe(data_t *data, enum pipe pipe)
> >  	igt_fixture {
> >  		int valid_tests = 0;
> > 
> > -		igt_require(data->display.pipes[pipe].n_planes > 0);
> >  		igt_skip_on(pipe >= data->display.n_pipes);
> > +		igt_require(data->display.pipes[pipe].n_planes > 0);
> > 
> >  		for_each_valid_output_on_pipe(&data->display, pipe,
> > output)
> >  			valid_tests++;
> > diff --git a/tests/kms_pipe_color.c b/tests/kms_pipe_color.c
> > index fd58ac8..da49eb1 100644
> > --- a/tests/kms_pipe_color.c
> > +++ b/tests/kms_pipe_color.c
> > @@ -1180,7 +1180,8 @@ igt_main
> >  	}
> > 
> >  	for (int pipe = 0; pipe < I915_MAX_PIPES; pipe++)
> > -		run_tests_for_pipe(&data, pipe);
> > +		igt_subtest_group
> > +			run_tests_for_pipe(&data, pipe);
> > 
> >  	igt_subtest_f("invalid-lut-sizes")
> >  		invalid_lut_sizes(&data);
> > diff --git a/tests/kms_plane.c b/tests/kms_plane.c
> > index e1bd467..34418ca 100644
> > --- a/tests/kms_plane.c
> > +++ b/tests/kms_plane.c
> > @@ -354,9 +354,6 @@ test_plane_panning(data_t *data, enum pipe pipe,
> > int plane,
> >  	igt_output_t *output;
> >  	int connected_outs = 0;
> > 
> > -	igt_skip_on(pipe >= data->display.n_pipes);
> > -	igt_skip_on(plane >= data->display.pipes[pipe].n_planes);
> > -
> >  	for_each_valid_output_on_pipe(&data->display, pipe, output) {
> >  		test_plane_panning_with_output(data, pipe, plane, output,
> >  						flags);
> > @@ -369,6 +366,11 @@ test_plane_panning(data_t *data, enum pipe pipe,
> > int plane,
> >  static void
> >  run_tests_for_pipe_plane(data_t *data, enum pipe pipe)
> >  {
> > +	igt_fixture {
> > +		igt_skip_on(pipe >= data->display.n_pipes);
> > +		igt_require(data->display.pipes[pipe].n_planes > 0);
> > +	}
> > +
> >  	igt_subtest_f("plane-position-covered-pipe-%s-planes",
> >  		      kmstest_pipe_name(pipe)) {
> >  		int n_planes = data->display.pipes[pipe].n_planes;
> > --
> > 2.7.4
> > 
> > _______________________________________________
> > amd-gfx mailing list
> > amd-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Leo Li June 9, 2017, 3:48 p.m. UTC | #3
On 2017-06-09 05:49 AM, Arkadiusz Hiler wrote:
> On Thu, Jun 08, 2017 at 09:48:58PM +0000, Deucher, Alexander wrote:
>>> -----Original Message-----
>>> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
>>> Of sunpeng.li@amd.com
>>> Sent: Thursday, June 08, 2017 3:11 PM
>>> To: intel-gfx@lists.freedesktop.org; amd-gfx@lists.freedesktop.org;
>>> Wentland, Harry
>>> Cc: Li, Sun peng
>>> Subject: [PATCH i-g-t] tests: Increase value of I915_MAX_PIPES to 6
>>>
>>> From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com>
>>>
>>> Increasing max pipe count to 6 to support AMD GPU's.
>>>
>>> Since some tests' behavior depends on this value, small changes are made
>>> to remove this dependency:
>>>
>>> * kms_ccs: Early abort if wanted_pipe is out-of-bounds.
>>> * kms_concurrent: Check if pipe is within bounds first.
>>> * kms_pipe_color: Prevent skipping of subsequent tests by placing
>>>      generated tests in a 'igt_subtest_group'.
>>> * kms_plane: Move pipe and plane index checking to subtest group level.
>>>
>>> Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>
>>> ---
>>>   lib/igt_kms.c          | 10 ++++++++--
>>>   lib/igt_kms.h          |  3 +++
>>>   tests/kms_ccs.c        |  2 ++
>>>   tests/kms_concurrent.c |  2 +-
>>>   tests/kms_pipe_color.c |  3 ++-
>>>   tests/kms_plane.c      |  8 +++++---
>>>   6 files changed, 21 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>>> index c77716b..1bb62f0 100644
>>> --- a/lib/igt_kms.c
>>> +++ b/lib/igt_kms.c
>>> @@ -319,12 +319,12 @@ const unsigned char* igt_kms_get_alt_edid(void)
>>>    */
>>>   const char *kmstest_pipe_name(enum pipe pipe)
>>>   {
>>> -	const char *str[] = { "A", "B", "C" };
>>> +	const char *str[] = { "A", "B", "C", "D", "E", "F"};
>>>
>>>   	if (pipe == PIPE_NONE)
>>>   		return "None";
>>>
>>> -	if (pipe > 2)
>>> +	if (pipe > 5)
>>
>> Use I915_MAX_PIPES here rather than hardcoding 5.  With that fixed the patch is:
>> Acked-by: Alex Deucher <alexander.deucher@amd.com>
> 
> The name can be changed to IGT_MAX_PIPES, as using I915 here is
> missleading.
> 

Renaming I915_MAX_PIPES will cause wider changes, I'll submit a new 
patch for that. Will submit a v2 for Alex's comment.

Leo

>>>   		return "invalid";
>>>
>>>   	return str[pipe];
>>> @@ -344,6 +344,12 @@ int kmstest_pipe_to_index(char pipe)
>>>   		return 1;
>>>   	else if (pipe == 'C')
>>>   		return 2;
>>> +	else if (pipe == 'D')
>>> +		return 3;
>>> +	else if (pipe == 'E')
>>> +		return 4;
>>> +	else if (pipe == 'F')
>>> +		return 5;
>>>   	else
>>>   		return -EINVAL;
>>>   }
>>> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
>>> index 9567a26..8f7c2bb 100644
>>> --- a/lib/igt_kms.h
>>> +++ b/lib/igt_kms.h
>>> @@ -54,6 +54,9 @@ enum pipe {
>>>           PIPE_A = 0,
>>>           PIPE_B,
>>>           PIPE_C,
>>> +	PIPE_D,
>>> +	PIPE_E,
>>> +	PIPE_F,
>>>           I915_MAX_PIPES
>>>   };
>>>   const char *kmstest_pipe_name(enum pipe pipe);
>>> diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
>>> index d829152..0795e3a 100644
>>> --- a/tests/kms_ccs.c
>>> +++ b/tests/kms_ccs.c
>>> @@ -250,6 +250,8 @@ static void test(data_t *data)
>>>   	int valid_tests = 0;
>>>   	enum pipe wanted_pipe = data->pipe;
>>>
>>> +	igt_skip_on(wanted_pipe >= display->n_pipes);
>>> +
>>>   	for_each_pipe_with_valid_output(display, data->pipe, data-
>>>> output) {
>>>   		if (wanted_pipe != PIPE_NONE && data->pipe !=
>>> wanted_pipe)
>>>   			continue;
>>> diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
>>> index b34540b..db06a37 100644
>>> --- a/tests/kms_concurrent.c
>>> +++ b/tests/kms_concurrent.c
>>> @@ -351,8 +351,8 @@ run_tests_for_pipe(data_t *data, enum pipe pipe)
>>>   	igt_fixture {
>>>   		int valid_tests = 0;
>>>
>>> -		igt_require(data->display.pipes[pipe].n_planes > 0);
>>>   		igt_skip_on(pipe >= data->display.n_pipes);
>>> +		igt_require(data->display.pipes[pipe].n_planes > 0);
>>>
>>>   		for_each_valid_output_on_pipe(&data->display, pipe,
>>> output)
>>>   			valid_tests++;
>>> diff --git a/tests/kms_pipe_color.c b/tests/kms_pipe_color.c
>>> index fd58ac8..da49eb1 100644
>>> --- a/tests/kms_pipe_color.c
>>> +++ b/tests/kms_pipe_color.c
>>> @@ -1180,7 +1180,8 @@ igt_main
>>>   	}
>>>
>>>   	for (int pipe = 0; pipe < I915_MAX_PIPES; pipe++)
>>> -		run_tests_for_pipe(&data, pipe);
>>> +		igt_subtest_group
>>> +			run_tests_for_pipe(&data, pipe);
>>>
>>>   	igt_subtest_f("invalid-lut-sizes")
>>>   		invalid_lut_sizes(&data);
>>> diff --git a/tests/kms_plane.c b/tests/kms_plane.c
>>> index e1bd467..34418ca 100644
>>> --- a/tests/kms_plane.c
>>> +++ b/tests/kms_plane.c
>>> @@ -354,9 +354,6 @@ test_plane_panning(data_t *data, enum pipe pipe,
>>> int plane,
>>>   	igt_output_t *output;
>>>   	int connected_outs = 0;
>>>
>>> -	igt_skip_on(pipe >= data->display.n_pipes);
>>> -	igt_skip_on(plane >= data->display.pipes[pipe].n_planes);
>>> -
>>>   	for_each_valid_output_on_pipe(&data->display, pipe, output) {
>>>   		test_plane_panning_with_output(data, pipe, plane, output,
>>>   						flags);
>>> @@ -369,6 +366,11 @@ test_plane_panning(data_t *data, enum pipe pipe,
>>> int plane,
>>>   static void
>>>   run_tests_for_pipe_plane(data_t *data, enum pipe pipe)
>>>   {
>>> +	igt_fixture {
>>> +		igt_skip_on(pipe >= data->display.n_pipes);
>>> +		igt_require(data->display.pipes[pipe].n_planes > 0);
>>> +	}
>>> +
>>>   	igt_subtest_f("plane-position-covered-pipe-%s-planes",
>>>   		      kmstest_pipe_name(pipe)) {
>>>   		int n_planes = data->display.pipes[pipe].n_planes;
>>> --
>>> 2.7.4
>>>
>>> _______________________________________________
>>> amd-gfx mailing list
>>> amd-gfx@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index c77716b..1bb62f0 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -319,12 +319,12 @@  const unsigned char* igt_kms_get_alt_edid(void)
  */
 const char *kmstest_pipe_name(enum pipe pipe)
 {
-	const char *str[] = { "A", "B", "C" };
+	const char *str[] = { "A", "B", "C", "D", "E", "F"};
 
 	if (pipe == PIPE_NONE)
 		return "None";
 
-	if (pipe > 2)
+	if (pipe > 5)
 		return "invalid";
 
 	return str[pipe];
@@ -344,6 +344,12 @@  int kmstest_pipe_to_index(char pipe)
 		return 1;
 	else if (pipe == 'C')
 		return 2;
+	else if (pipe == 'D')
+		return 3;
+	else if (pipe == 'E')
+		return 4;
+	else if (pipe == 'F')
+		return 5;
 	else
 		return -EINVAL;
 }
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 9567a26..8f7c2bb 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -54,6 +54,9 @@  enum pipe {
         PIPE_A = 0,
         PIPE_B,
         PIPE_C,
+	PIPE_D,
+	PIPE_E,
+	PIPE_F,
         I915_MAX_PIPES
 };
 const char *kmstest_pipe_name(enum pipe pipe);
diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
index d829152..0795e3a 100644
--- a/tests/kms_ccs.c
+++ b/tests/kms_ccs.c
@@ -250,6 +250,8 @@  static void test(data_t *data)
 	int valid_tests = 0;
 	enum pipe wanted_pipe = data->pipe;
 
+	igt_skip_on(wanted_pipe >= display->n_pipes);
+
 	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
 		if (wanted_pipe != PIPE_NONE && data->pipe != wanted_pipe)
 			continue;
diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
index b34540b..db06a37 100644
--- a/tests/kms_concurrent.c
+++ b/tests/kms_concurrent.c
@@ -351,8 +351,8 @@  run_tests_for_pipe(data_t *data, enum pipe pipe)
 	igt_fixture {
 		int valid_tests = 0;
 
-		igt_require(data->display.pipes[pipe].n_planes > 0);
 		igt_skip_on(pipe >= data->display.n_pipes);
+		igt_require(data->display.pipes[pipe].n_planes > 0);
 
 		for_each_valid_output_on_pipe(&data->display, pipe, output)
 			valid_tests++;
diff --git a/tests/kms_pipe_color.c b/tests/kms_pipe_color.c
index fd58ac8..da49eb1 100644
--- a/tests/kms_pipe_color.c
+++ b/tests/kms_pipe_color.c
@@ -1180,7 +1180,8 @@  igt_main
 	}
 
 	for (int pipe = 0; pipe < I915_MAX_PIPES; pipe++)
-		run_tests_for_pipe(&data, pipe);
+		igt_subtest_group
+			run_tests_for_pipe(&data, pipe);
 
 	igt_subtest_f("invalid-lut-sizes")
 		invalid_lut_sizes(&data);
diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index e1bd467..34418ca 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -354,9 +354,6 @@  test_plane_panning(data_t *data, enum pipe pipe, int plane,
 	igt_output_t *output;
 	int connected_outs = 0;
 
-	igt_skip_on(pipe >= data->display.n_pipes);
-	igt_skip_on(plane >= data->display.pipes[pipe].n_planes);
-
 	for_each_valid_output_on_pipe(&data->display, pipe, output) {
 		test_plane_panning_with_output(data, pipe, plane, output,
 						flags);
@@ -369,6 +366,11 @@  test_plane_panning(data_t *data, enum pipe pipe, int plane,
 static void
 run_tests_for_pipe_plane(data_t *data, enum pipe pipe)
 {
+	igt_fixture {
+		igt_skip_on(pipe >= data->display.n_pipes);
+		igt_require(data->display.pipes[pipe].n_planes > 0);
+	}
+
 	igt_subtest_f("plane-position-covered-pipe-%s-planes",
 		      kmstest_pipe_name(pipe)) {
 		int n_planes = data->display.pipes[pipe].n_planes;