Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Lyude Paul <lyude@redhat.com>
To: Paul Kocialkowski <paul.kocialkowski@linux.intel.com>,
	intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH i-g-t v3] tests/chamelium: Add common suspend and hibernate tests for DP and HDMI
Date: Mon, 19 Jun 2017 14:31:08 -0400	[thread overview]
Message-ID: <1497897068.8845.1.camel@redhat.com> (raw)
In-Reply-To: <20170619093905.4603-1-paul.kocialkowski@linux.intel.com>

On Mon, 2017-06-19 at 12:39 +0300, Paul Kocialkowski wrote:
> This adds two new tests: common-hpd-after-suspend and
> common-hpd-after-hibernate that are aimed at testing HPD change
> during
> suspend/hibernate for both DP and HDMI, at the same time.
> 
> The interest in bringing this test up is to reduce the time spent in
> testing, with the downside of less precision regarding the test's
> outcome. The per-connector tests are still available to get a more
> precise idea of which connector causes a failure, when that happens.
> 
> VGA is explicitly excluded from this test as there is currently no
> way of doing delayed hpd pulses for it.
> 
> The generic hpd suspend/resume test code is split in a dedicated
> function, that allow testing one or all possible ports.
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@linux.intel.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>

Will push to git in just a little bit, thanks!

> ---
>  tests/chamelium.c | 118
> +++++++++++++++++++++++++++++++++++++++++++++---------
>  1 file changed, 100 insertions(+), 18 deletions(-)
> 
> diff --git a/tests/chamelium.c b/tests/chamelium.c
> index 76b14e95..3cf9f3b5 100644
> --- a/tests/chamelium.c
> +++ b/tests/chamelium.c
> @@ -143,8 +143,18 @@ wait_for_connector(data_t *data, struct
> chamelium_port *port,
>  static void
>  reset_state(data_t *data, struct chamelium_port *port)
>  {
> +	int p;
> +
>  	chamelium_reset(data->chamelium);
> -	wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
> +
> +	if (port) {
> +		wait_for_connector(data, port,
> DRM_MODE_DISCONNECTED);
> +	} else {
> +		for (p = 0; p < data->port_count; p++) {
> +			port = data->ports[p];
> +			wait_for_connector(data, port,
> DRM_MODE_DISCONNECTED);
> +		}
> +	}
>  }
>  
>  static void
> @@ -206,36 +216,96 @@ test_edid_read(data_t *data, struct
> chamelium_port *port,
>  }
>  
>  static void
> -test_suspend_resume_hpd(data_t *data, struct chamelium_port *port,
> -			enum igt_suspend_state state,
> -			enum igt_suspend_test test)
> +try_suspend_resume_hpd(data_t *data, struct chamelium_port *port,
> +		       enum igt_suspend_state state, enum
> igt_suspend_test test,
> +		       struct udev_monitor *mon, bool connected)
>  {
> -	struct udev_monitor *mon = igt_watch_hotplug();
> -
> -	reset_state(data, port);
> +	int p;
>  
>  	igt_set_autoresume_delay(SUSPEND_RESUME_DELAY);
>  	igt_flush_hotplugs(mon);
>  
> -	/* Make sure we notice new connectors after resuming */
> -	chamelium_async_hpd_pulse_start(data->chamelium, port,
> false,
> -					SUSPEND_RESUME_DELAY / 2);
> +	if (port) {
> +		chamelium_async_hpd_pulse_start(data->chamelium,
> port,
> +						connected,
> +						SUSPEND_RESUME_DELAY
> / 2);
> +	} else {
> +		for (p = 0; p < data->port_count; p++) {
> +			port = data->ports[p];
> +			if (chamelium_port_get_type(port) ==
> DRM_MODE_CONNECTOR_VGA)
> +				continue;
> +
> +			chamelium_async_hpd_pulse_start(data-
> >chamelium, port,
> +							connected,
> +							SUSPEND_RESU
> ME_DELAY / 2);
> +		}
> +
> +		port = NULL;
> +	}
> +
>  	igt_system_suspend_autoresume(state, test);
>  	chamelium_async_hpd_pulse_finish(data->chamelium);
>  
>  	igt_assert(igt_hotplug_detected(mon, HOTPLUG_TIMEOUT));
> -	igt_assert_eq(reprobe_connector(data, port),
> DRM_MODE_CONNECTED);
> +	if (port) {
> +		igt_assert_eq(reprobe_connector(data, port),
> connected ?
> +			      DRM_MODE_DISCONNECTED :
> DRM_MODE_CONNECTED);
> +	} else {
> +		for (p = 0; p < data->port_count; p++) {
> +			port = data->ports[p];
> +			if (chamelium_port_get_type(port) ==
> DRM_MODE_CONNECTOR_VGA)
> +				continue;
> +
> +			igt_assert_eq(reprobe_connector(data, port),
> connected ?
> +				      DRM_MODE_DISCONNECTED :
> +				      DRM_MODE_CONNECTED);
> +		}
>  
> -	igt_flush_hotplugs(mon);
> +		port = NULL;
> +	}
> +}
> +
> +static void
> +test_suspend_resume_hpd(data_t *data, struct chamelium_port *port,
> +			enum igt_suspend_state state,
> +			enum igt_suspend_test test)
> +{
> +	struct udev_monitor *mon = igt_watch_hotplug();
> +
> +	reset_state(data, port);
> +
> +	/* Make sure we notice new connectors after resuming */
> +	try_suspend_resume_hpd(data, port, state, test, mon, false);
>  
>  	/* Now make sure we notice disconnected connectors after
> resuming */
> -	chamelium_async_hpd_pulse_start(data->chamelium, port, true,
> -					SUSPEND_RESUME_DELAY / 2);
> -	igt_system_suspend_autoresume(state, test);
> -	chamelium_async_hpd_pulse_finish(data->chamelium);
> +	try_suspend_resume_hpd(data, port, state, test, mon, true);
>  
> -	igt_assert(igt_hotplug_detected(mon, HOTPLUG_TIMEOUT));
> -	igt_assert_eq(reprobe_connector(data, port),
> DRM_MODE_DISCONNECTED);
> +	igt_cleanup_hotplug(mon);
> +}
> +
> +static void
> +test_suspend_resume_hpd_common(data_t *data, enum igt_suspend_state
> state,
> +			       enum igt_suspend_test test)
> +{
> +	struct udev_monitor *mon = igt_watch_hotplug();
> +	struct chamelium_port *port;
> +	int p;
> +
> +	for (p = 0; p < data->port_count; p++) {
> +		port = data->ports[p];
> +		if (chamelium_port_get_type(port) ==
> DRM_MODE_CONNECTOR_VGA)
> +			continue;
> +
> +		igt_debug("Testing port %s\n",
> chamelium_port_get_name(port));
> +	}
> +
> +	reset_state(data, NULL);
> +
> +	/* Make sure we notice new connectors after resuming */
> +	try_suspend_resume_hpd(data, NULL, state, test, mon, false);
> +
> +	/* Now make sure we notice disconnected connectors after
> resuming */
> +	try_suspend_resume_hpd(data, NULL, state, test, mon, true);
>  
>  	igt_cleanup_hotplug(mon);
>  }
> @@ -750,6 +820,18 @@ igt_main
>  			test_hpd_without_ddc(&data, port);
>  	}
>  
> +	igt_subtest_group {
> +		igt_subtest("common-hpd-after-suspend")
> +			test_suspend_resume_hpd_common(&data,
> +						       SUSPEND_STATE
> _MEM,
> +						       SUSPEND_TEST_
> NONE);
> +
> +		igt_subtest("common-hpd-after-hibernate")
> +			test_suspend_resume_hpd_common(&data,
> +						       SUSPEND_STATE
> _DISK,
> +						       SUSPEND_TEST_
> DEVICES);
> +	}
> +
>  	igt_fixture {
>  		close(data.drm_fd);
>  	}
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

      reply	other threads:[~2017-06-19 18:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-19  9:39 [PATCH i-g-t v3] tests/chamelium: Add common suspend and hibernate tests for DP and HDMI Paul Kocialkowski
2017-06-19 18:31 ` Lyude Paul [this message]

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=1497897068.8845.1.camel@redhat.com \
    --to=lyude@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=paul.kocialkowski@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