public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
	igt-dev@lists.freedesktop.org
Subject: Re: [PATCH i-g-t 07/19] lib/kms: Introduce and use igt_first_crtc()
Date: Wed, 25 Feb 2026 16:00:52 +0200	[thread overview]
Message-ID: <3e83cddc76a2192435209fb65f91b8c728669c94@intel.com> (raw)
In-Reply-To: <20260225125108.31119-8-ville.syrjala@linux.intel.com>

On Wed, 25 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Several tests just want to pick the first CRTC they
> can. Currently they just ask for the CRTC for PIPE_A
> which might not even be present on the hardware.
> Introduce a new igt_first_crtc() that just hands
> you the first available CRTC, whatever pipe that is.
>
>  #include "scripts/iterators.cocci"
>
> @@
> expression DISPLAY;
> @@
> (
> - igt_crtc_for_pipe(DISPLAY, PIPE_A)
> + igt_first_crtc(DISPLAY)
> |
> - igt_crtc_for_pipe(DISPLAY, 0)
> + igt_first_crtc(DISPLAY)
> )
>
> @@
> type T;
> @@
> T igt_crtc_for_crtc_id(...);
> +igt_crtc_t *igt_first_crtc(igt_display_t *display);
>
> @@
> iterator name for_each_crtc;
> @@
> igt_crtc_for_crtc_id(...) { ... }
> +/*
> + * igt_first_crtc:
> + * @display: pointer to igt_display_t
> + *
> + * Returns: The first CRTC on the device
> + */
> +igt_crtc_t *igt_first_crtc(igt_display_t *display)
> +{
> +       igt_crtc_t *crtc;
> +
> +       for_each_crtc(display, crtc)
> +               return crtc;
> +
> +       return NULL;
> +}
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  lib/igt_kms.c                           | 16 ++++++++++++++++
>  lib/igt_kms.h                           |  1 +
>  tests/amdgpu/amd_abm.c                  |  2 +-
>  tests/amdgpu/amd_assr.c                 |  2 +-
>  tests/amdgpu/amd_bypass.c               |  2 +-
>  tests/amdgpu/amd_color.c                |  2 +-
>  tests/amdgpu/amd_mall.c                 |  2 +-
>  tests/amdgpu/amd_max_bpc.c              |  2 +-
>  tests/amdgpu/amd_mem_leak.c             |  2 +-
>  tests/amdgpu/amd_odm.c                  |  2 +-
>  tests/amdgpu/amd_psr.c                  |  2 +-
>  tests/amdgpu/amd_replay.c               |  2 +-
>  tests/intel/kms_dp_linktrain_fallback.c |  2 +-
>  tests/kms_lease.c                       |  6 +++---
>  tests/kms_rotation_crc.c                |  6 +++---
>  tools/amd_hdmi_compliance.c             |  2 +-
>  16 files changed, 35 insertions(+), 18 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index ee95afc49aa7..94fa0680653b 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -7965,6 +7965,22 @@ igt_crtc_t *igt_crtc_for_crtc_id(igt_display_t *display, uint32_t crtc_id)
>  	return NULL;
>  }
>  
> +/*
> + * igt_first_crtc:
> + * @display: pointer to igt_display_t
> + *
> + * Returns: The first CRTC on the device
> + */
> +igt_crtc_t *igt_first_crtc(igt_display_t *display)
> +{
> +	igt_crtc_t *crtc;
> +
> +	for_each_crtc (display, crtc)

Cocci apparently insists on adding that superfluous space before ( there.

> +		return crtc;
> +
> +	return NULL;
> +}
> +
>  igt_crtc_t *igt_first_crtc_with_single_output(igt_display_t *display, igt_output_t **ret_output)
>  {
>  	igt_output_t *output;
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index ae488bbf4806..d6ebd40dd7be 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -585,6 +585,7 @@ static inline igt_crtc_t *igt_crtc_for_pipe(igt_display_t *display, enum pipe pi
>  	return &display->crtcs[pipe];
>  }
>  igt_crtc_t *igt_crtc_for_crtc_id(igt_display_t *display, uint32_t crtc_id);
> +igt_crtc_t *igt_first_crtc(igt_display_t *display);
>  
>  typedef struct _igt_pipe_crc igt_pipe_crc_t;
>  igt_pipe_crc_t *igt_crtc_crc_new(igt_crtc_t *crtc, const char *source);
> diff --git a/tests/amdgpu/amd_abm.c b/tests/amdgpu/amd_abm.c
> index ffa73bb46865..5cd40cfb91df 100644
> --- a/tests/amdgpu/amd_abm.c
> +++ b/tests/amdgpu/amd_abm.c
> @@ -129,7 +129,7 @@ static void test_init(data_t *data)
>  		igt_skip("No eDP connector found\n");
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_assr.c b/tests/amdgpu/amd_assr.c
> index f02a30e8fea3..b07f3fb15a1f 100644
> --- a/tests/amdgpu/amd_assr.c
> +++ b/tests/amdgpu/amd_assr.c
> @@ -161,7 +161,7 @@ static void present_visual_pattern(data_t *data, igt_output_t *output)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_plane_t *primary;
> -	igt_crtc_t *crtc = igt_crtc_for_pipe(display, PIPE_A);
> +	igt_crtc_t *crtc = igt_first_crtc(display);
>  	drmModeModeInfo *mode;
>  	igt_fb_t fb;
>  
> diff --git a/tests/amdgpu/amd_bypass.c b/tests/amdgpu/amd_bypass.c
> index 6ff36ce09d3e..25136e83e6ad 100644
> --- a/tests/amdgpu/amd_bypass.c
> +++ b/tests/amdgpu/amd_bypass.c
> @@ -63,7 +63,7 @@ static void test_init(data_t *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_color.c b/tests/amdgpu/amd_color.c
> index dc2a10817105..cdc6f3e6abd8 100644
> --- a/tests/amdgpu/amd_color.c
> +++ b/tests/amdgpu/amd_color.c
> @@ -178,7 +178,7 @@ static void test_init(data_t *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_mall.c b/tests/amdgpu/amd_mall.c
> index b83e3b864ee4..a068154656e7 100644
> --- a/tests/amdgpu/amd_mall.c
> +++ b/tests/amdgpu/amd_mall.c
> @@ -60,7 +60,7 @@ static void test_init(data_t *data)
>  	bool mall_en = false;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_max_bpc.c b/tests/amdgpu/amd_max_bpc.c
> index cf4de724c12c..eb76762fa954 100644
> --- a/tests/amdgpu/amd_max_bpc.c
> +++ b/tests/amdgpu/amd_max_bpc.c
> @@ -54,7 +54,7 @@ static void test_init(data_t *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_mem_leak.c b/tests/amdgpu/amd_mem_leak.c
> index 9e8e61aa7847..1e55fe785c5f 100644
> --- a/tests/amdgpu/amd_mem_leak.c
> +++ b/tests/amdgpu/amd_mem_leak.c
> @@ -46,7 +46,7 @@ static void test_init(data_t *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_odm.c b/tests/amdgpu/amd_odm.c
> index ac6b839847a2..1feee8d9badb 100644
> --- a/tests/amdgpu/amd_odm.c
> +++ b/tests/amdgpu/amd_odm.c
> @@ -47,7 +47,7 @@ static void test_init(struct data *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_psr.c b/tests/amdgpu/amd_psr.c
> index 548e21810fb9..b1d6d1631e26 100644
> --- a/tests/amdgpu/amd_psr.c
> +++ b/tests/amdgpu/amd_psr.c
> @@ -170,7 +170,7 @@ static void test_init(data_t *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/amdgpu/amd_replay.c b/tests/amdgpu/amd_replay.c
> index 010b3a97e775..5f62465d6b72 100644
> --- a/tests/amdgpu/amd_replay.c
> +++ b/tests/amdgpu/amd_replay.c
> @@ -60,7 +60,7 @@ static void test_init(struct test_data *data)
>  	igt_display_t *display = &data->display;
>  
>  	/* It doesn't matter which pipe we choose on amdpgu. */
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);
>  
> diff --git a/tests/intel/kms_dp_linktrain_fallback.c b/tests/intel/kms_dp_linktrain_fallback.c
> index b7e02be2d8aa..91dde2a7dcee 100644
> --- a/tests/intel/kms_dp_linktrain_fallback.c
> +++ b/tests/intel/kms_dp_linktrain_fallback.c
> @@ -468,7 +468,7 @@ static void test_dsc_sst_fallback(data_t *data)
>  	int output_count = 0;
>  
>  	igt_info("Checking DSC fallback on %s\n", igt_output_name(data->output));
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(&data->display);
>  	igt_reset_link_params(data->drm_fd, data->output);
> diff --git a/tests/kms_lease.c b/tests/kms_lease.c
> index 7531f9acf810..4e9a69da5d9d 100644
> --- a/tests/kms_lease.c
> +++ b/tests/kms_lease.c
> @@ -872,7 +872,7 @@ static void invalid_create_leases(data_t *data)
>  	igt_crtc_t *crtc;
>  	int tmp_fd, ret;
>  
> -	crtc = igt_crtc_for_pipe(&data->master.display, 0);
> +	crtc = igt_first_crtc(&data->master.display);
>  
>  	/* NULL array pointer */
>  	mcl.object_count = 1;
> @@ -1070,7 +1070,7 @@ static int _create_simple_lease(int master_fd, data_t *data, int expected_ret)
>  	struct drm_mode_create_lease mcl;
>  	igt_crtc_t *crtc;
>  
> -	crtc = igt_crtc_for_pipe(&data->master.display, 0);
> +	crtc = igt_first_crtc(&data->master.display);
>  
>  	object_ids[0] = crtc->crtc_id;
>  	object_ids[1] = data->master.display.outputs[0].id;
> @@ -1164,7 +1164,7 @@ static void implicit_plane_lease(data_t *data)
>  	uint32_t cursor_id;
>  	igt_crtc_t *crtc;
>  
> -	crtc = igt_crtc_for_pipe(&data->master.display, 0);
> +	crtc = igt_first_crtc(&data->master.display);
>  
>  	cursor_id = igt_crtc_get_plane_type(crtc, DRM_PLANE_TYPE_CURSOR)->drm_plane->plane_id;
>  
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 6240e112cb29..9b087bbaa6dc 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -1314,7 +1314,7 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  
>  	igt_describe("Rotation test on both planes by making them fully visible");
>  	igt_subtest_f("multiplane-rotation") {
> -		igt_crtc_t *crtc = igt_crtc_for_pipe(&data.display, PIPE_A);
> +		igt_crtc_t *crtc = igt_first_crtc(&data.display);
>  
>  		igt_require(gen >= 9);
>  		cleanup_crtc(&data);
> @@ -1330,7 +1330,7 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  	igt_describe("Rotation test on both planes by cropping left/top corner of primary plane and"
>  			"right/top corner of sprite plane");
>  	igt_subtest_f("multiplane-rotation-cropping-top") {
> -		igt_crtc_t *crtc = igt_crtc_for_pipe(&data.display, PIPE_A);
> +		igt_crtc_t *crtc = igt_first_crtc(&data.display);
>  
>  		igt_require(gen >= 9);
>  		cleanup_crtc(&data);
> @@ -1346,7 +1346,7 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  	igt_describe("Rotation test on both planes by cropping left/bottom corner of primary plane"
>  			"and right/bottom corner of sprite plane");
>  	igt_subtest_f("multiplane-rotation-cropping-bottom") {
> -		igt_crtc_t *crtc = igt_crtc_for_pipe(&data.display, PIPE_A);
> +		igt_crtc_t *crtc = igt_first_crtc(&data.display);
>  
>  		igt_require(gen >= 9);
>  		cleanup_crtc(&data);
> diff --git a/tools/amd_hdmi_compliance.c b/tools/amd_hdmi_compliance.c
> index 94025547f01c..e0ef78d8191d 100644
> --- a/tools/amd_hdmi_compliance.c
> +++ b/tools/amd_hdmi_compliance.c
> @@ -383,7 +383,7 @@ static void test_init(data_t *data, int conn_id)
>  {
>  	igt_display_t *display = &data->display;
>  
> -	data->crtc = igt_crtc_for_pipe(&data->display, PIPE_A);
> +	data->crtc = igt_first_crtc(&data->display);
>  
>  	igt_display_reset(display);

-- 
Jani Nikula, Intel

  reply	other threads:[~2026-02-25 14:00 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-25 12:50 [PATCH i-g-t 00/19] lib/kms: Clean up more of igt_kms API Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 01/19] tests/kms_plane_multiple: Clean up n_planes stuff Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 02/19] tests/kms_async_flips: Remove redundant data.crtc_id Ville Syrjala
2026-02-25 13:58   ` Jani Nikula
2026-02-25 12:50 ` [PATCH i-g-t 03/19] tests/kms_lease: Consolidate igt_crtc_for_pipe() calls Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 04/19] tests/kms: " Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 05/19] lib/kms: Introduce igt_first_crtc_with_single_output() Ville Syrjala
2026-02-25 13:59   ` Jani Nikula
2026-02-25 12:50 ` [PATCH i-g-t 06/19] tests/kms: Use igt_first_crtc_with_single_output() Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 07/19] lib/kms: Introduce and use igt_first_crtc() Ville Syrjala
2026-02-25 14:00   ` Jani Nikula [this message]
2026-02-25 12:50 ` [PATCH i-g-t 08/19] tests/kms: Stop using igt_require_pipe() Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 09/19] lib/kms: Replace get_num_scalers() with igt_crtc_num_scalers() Ville Syrjala
2026-02-25 12:50 ` [PATCH i-g-t 10/19] lib/kms: Pass igt_crtc_t* to igt_max_bpc_constraint() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 11/19] lib/kms: Introduce for_each_plane_on_crtc() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 12/19] tests/kms: Use for_each_plane_on_crtc() Ville Syrjala
2026-02-25 13:53   ` Jani Nikula
2026-02-25 12:51 ` [PATCH i-g-t 13/19] lib/kms: Nuke for_each_plane_on_pipe() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 14/19] tests/kms: Switch to for_each_valid_output_on_crtc_local() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 15/19] tests/kms: Replace igt_pipe_connector_valid() with igt_crtc_connector_valid() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 16/19] lib/kms: Intreoduce for_each_valid_output_on_crtc() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 17/19] tests/intel/kms_frontbuffer_tracking: Use for_each_valid_output_on_crtc() Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 18/19] tests/kms: " Ville Syrjala
2026-02-25 12:51 ` [PATCH i-g-t 19/19] lib/kms: Nuke for_each_valid_output_on_pipe() Ville Syrjala
2026-02-25 14:06   ` Jani Nikula
2026-02-25 14:07 ` [PATCH i-g-t 00/19] lib/kms: Clean up more of igt_kms API Jani Nikula
2026-02-25 23:34 ` ✗ Xe.CI.BAT: failure for " Patchwork
2026-02-26  0:05 ` ✓ i915.CI.BAT: success " Patchwork
2026-02-26  1:57 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-02-26 22:06 ` ✓ Xe.CI.BAT: success for lib/kms: Clean up more of igt_kms API (rev2) Patchwork
2026-02-26 22:09 ` ✓ i915.CI.BAT: " Patchwork
2026-02-27  2:55 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-02-27  4:24 ` ✗ i915.CI.Full: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3e83cddc76a2192435209fb65f91b8c728669c94@intel.com \
    --to=jani.nikula@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=ville.syrjala@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox