[PATCH v3 resend i-g-t 3/6] tests: Add core_debugfs_heads_power

Karthik B S karthik.b.s at intel.com
Fri Jul 4 10:01:02 UTC 2025


Hi,

On 7/4/2025 1:36 PM, Peter Senna Tschudin wrote:
>
> On 7/3/2025 10:39 PM, Rodrigo Vivi wrote:
>> On Mon, Jun 16, 2025 at 09:42:35AM +0200, Peter Senna Tschudin wrote:
>>> Introduce core_debugfs_heads_power that is expected to work with any
>>> GPU, not limited to i915 and Xe. The test powers off all available
>>> heads before reading debugfs files, and then powers on all heads
>>> before reading the files again.
>>>
>>> Cc: Karthik B S <karthik.b.s at intel.com>
>>> Cc: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
>>> Cc: Juha-Pekka Heikkila <juha-pekka.heikkila at intel.com>
>>> Cc: Swati Sharma <swati2.sharma at intel.com>
>>> Cc: michal.wajdeczko at intel.com
>>> Cc: marcin.bernatowicz at intel.com
>>> Cc: kamil.konieczny at linux.intel.com
>>> Cc: katarzyna.piecielska at intel.com
>>> Cc: zbigniew.kempczynski at intel.com
>>> Cc: ewelina.musial at intel.com
>>> Signed-off-by: Peter Senna Tschudin <peter.senna at linux.intel.com>
>>> ---
>>> v3:
>>>   - renamed the test
>>>   - Removed reference to sysfs from comments  (thanks Kamil)
>>>   - Updated description to match the display part (thanks Kamil)
>>>   - Moved from "display" to "heads". Our CI uses "headless" to refer
>>>     to a DUT without display and it is shorter
>>>   - renamed subtests for shorter names (thanks Kamil)
>>>   - fixed comments style (thanks Kamil)
>>>   - updated CC list
>>>   - changed the order to test first with all heads off then with all heads on
>>>     to prevent the need from powering on the heads at the end of the test
>>>     (thanks Kamil)
>>>   - removed snprintf from test names (thanks Kamil)
>>>   - removed subtest group (thanks Kamil)
>>>   - deleted kms_tests() and moved the code to igt_main (thanks Kamil)
>>>
>>> v2:
>>>   - changed style of comparison to NULL
>>>   - moved to a separate patch
>>>
>>>   tests/core_debugfs_heads_power.c | 156 +++++++++++++++++++++++++++++++
>>>   tests/meson.build                |   1 +
>>>   2 files changed, 157 insertions(+)
>>>   create mode 100644 tests/core_debugfs_heads_power.c
>>>
>>> diff --git a/tests/core_debugfs_heads_power.c b/tests/core_debugfs_heads_power.c
>>> new file mode 100644
>>> index 000000000..1813986d8
>>> --- /dev/null
>>> +++ b/tests/core_debugfs_heads_power.c
>>> @@ -0,0 +1,156 @@
>>> +// SPDX-License-Identifier: MIT
>>> +/*
>>> + * Copyright © 2025 Intel Corporation
>>> + */
>>> +
>>> +#include "igt.h"
>>> +#include "igt_debugfs.h"
>>> +#include "igt_dir.h"
>>> +
>>> +/**
>>> + * TEST: debugfs heads power test
>> Could we please use display instead of heads here?
>>  From display folks perspective heads might be indeed more clear because we will
>> only use display if any 'head' is attached, but from folks outside of display
>> world, heads will be a confusing term to be in the name of the test.
>>
>> Or perhaps we name kms_debugfs
> My first name proposal was core_debugfs_display_on_off. This is
> informative because it makes it explicit that this runs the test with
> display on and with the display off. This name is also a good contrast
> with the other test core_debugfs. Removing the on_off suffix makes the
> name less informative.
>
> Problem is that core_debugfs_display_on_off is a large name. So using
> heads instead of display was an attempt to make the name shorter, but no
> one liked it. We are waiting the KMS team to decide on which name they want.
I would vote for kms_debugfs as this would be also consistent with the 
existing display tests. I'm also okay with 'core_debugfs_display' if we 
can't have kms_debugfs.
>
>
>
>
>>> + * Description: Read entries from debugfs with all heads on and with all heads
>>> + *		off.
>>> + * Category: Core
>>> + * Mega feature: General Core features
>>> + * Sub-category: uapi
>>> + * Functionality: debugfs
>>> + * Feature: core
>>> + * Test category: uapi
>>> + *
>>> + * SUBTEST: off-read-all
>>> + * Description: Read all debugfs entries with heads off.
>>> + *
>>> + * SUBTEST: on-read-all
>>> + * Description: Read all debugfs entries with heads on.
>>> + */
>>> +
>>> +/**
>>> + * bool igt_kms_all_displays_on: Try to turn on all heads
>>> + * @display: pointer to the igt_display structure
>>> + *
>>> + * Returns: void
>>> + */
>>> +static void igt_display_all_on(igt_display_t *display)
>>> +{
>>> +	struct igt_fb fb[IGT_MAX_PIPES];
>>> +	enum pipe pipe;
>>> +	int ret;
>>> +
>>> +	/* try to light all pipes */
>>> +retry:
>>> +	for_each_pipe(display, pipe) {
>>> +		igt_output_t *output;
>>> +
>>> +		for_each_valid_output_on_pipe(display, pipe, output) {
>>> +			igt_plane_t *primary;
>>> +			drmModeModeInfo *mode;
>>> +
>>> +			if (output->pending_pipe != PIPE_NONE)
>>> +				continue;
>>> +
>>> +			igt_output_set_pipe(output, pipe);
>>> +			primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>>> +			mode = igt_output_get_mode(output);
>>> +			igt_create_pattern_fb(display->drm_fd,
>>> +						mode->hdisplay, mode->vdisplay,
>>> +						DRM_FORMAT_XRGB8888,
>>> +						DRM_FORMAT_MOD_LINEAR, &fb[pipe]);
>>> +
>>> +			/* Set a valid fb as some debugfs like to
>>> +			 * inspect it on a active pipe
>>> +			 */
>>> +			igt_plane_set_fb(primary, &fb[pipe]);
>>> +			break;
>>> +		}
>>> +	}
>>> +
>>> +	if (display->is_atomic)
>>> +		ret = igt_display_try_commit_atomic(display,
>>> +				DRM_MODE_ATOMIC_TEST_ONLY |
>>> +				DRM_MODE_ATOMIC_ALLOW_MODESET,
>>> +				NULL);
>>> +	else
>>> +		ret = igt_display_try_commit2(display, COMMIT_LEGACY);
>>> +
>>> +	if (ret) {
>>> +		igt_output_t *output;
>>> +		bool found = igt_override_all_active_output_modes_to_fit_bw(display);
>>> +
>>> +		igt_require_f(found, "No valid mode combo found.\n");
>>> +
>>> +		for_each_connected_output(display, output)
>>> +			igt_output_set_pipe(output, PIPE_NONE);
>>> +
>>> +		goto retry;
>>> +	}
>>> +
>>> +	igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
>>> +}
>>> +
>>> +/**
>>> + * bool igt_kms_all_displays_off: Try to turn off all heads
>>> + * @display: pointer to the igt_display structure
>>> + *
>>> + * Returns: void
>>> + */
>>> +static void igt_display_all_off(igt_display_t *display)
>>> +{
>>> +	enum pipe pipe;
>>> +	igt_output_t *output;
>>> +	igt_plane_t *plane;
>>> +
>>> +	for_each_connected_output(display, output)
>>> +		igt_output_set_pipe(output, PIPE_NONE);
>>> +
>>> +	for_each_pipe(display, pipe)
>>> +		for_each_plane_on_pipe(display, pipe, plane)
>>> +			igt_plane_set_fb(plane, NULL);
>>> +
>>> +	igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
>>> +}
>>> +
>>> +IGT_TEST_DESCRIPTION("Read entries from debugfs with display on/off.");
>>> +
>>> +igt_main
>>> +{
>>> +	int debugfs = -1;
>>> +	igt_display_t *display;
>>> +	int fd = -1;
>>> +	igt_dir_t *igt_dir = NULL;
>>> +
>>> +	igt_fixture {
>>> +		fd = drm_open_driver_master(DRIVER_ANY);
>>> +		debugfs = igt_debugfs_dir(fd);
>>> +		igt_require(debugfs >= 0);
>>> +
>>> +		igt_dir = igt_dir_create(debugfs);
>>> +		igt_require(igt_dir);
>>> +
>>> +		kmstest_set_vt_graphics_mode();
>>> +
>>> +		display = calloc(1, sizeof(*display));
>>> +		igt_display_require(display, fd);
>>> +	}
>>> +
>>> +	igt_subtest("off-read-all") {
>>> +		igt_display_all_off(display);
>>> +
>>> +		igt_dir_scan_dirfd(igt_dir, -1);
>>> +		igt_dir_process_files(igt_dir, NULL, NULL);
>>> +	}
>>> +
>>> +	igt_subtest("on-read-all") {
>>> +		/* try to light all pipes */
>>> +		igt_display_all_on(display);
>>> +
>>> +		igt_dir_scan_dirfd(igt_dir, -1);
>>> +		igt_dir_process_files(igt_dir, NULL, NULL);
>>> +	}
>>> +
>>> +	igt_fixture {
>>> +		igt_display_fini(display);
>>> +		close(debugfs);
>>> +		drm_close_driver(fd);
>>> +	}
>>> +}
>>> diff --git a/tests/meson.build b/tests/meson.build
>>> index fa62cbeb9..99dbd4feb 100644
>>> --- a/tests/meson.build
>>> +++ b/tests/meson.build
>>> @@ -1,6 +1,7 @@
>>>   test_progs = [
>>>   	'core_auth',
>>>   	'core_debugfs',
>>> +	'core_debugfs_heads_power',
>>>   	'core_getclient',
>>>   	'core_getstats',
>>>   	'core_getversion',
>>> -- 
>>> 2.43.0
>>>


More information about the igt-dev mailing list