[PATCH i-g-t,v2] tests/amdgpu/amd_hotplug: Check the suspend state after resume

Alex Hung alex.hung at amd.com
Thu Mar 13 16:50:48 UTC 2025


Reviewed-by: Alex Hung <alex.hung at amd.com>

On 3/11/25 02:13, Tom Chung wrote:
> [Why & How]
> Check the last hardware sleep state after resume to make sure
> last suspend really reached hardware sleep state.
> 
> Make sure to enable the suspend related settings in kernel config
> 
> Linux Kernel Configuration
> └─>Power management and ACPI options
> Suspend to RAM and standby
> ACPI (Advanced Configuration and Power Interface) Support
> 
> Signed-off-by: Tom Chung <chiahsuan.chung at amd.com>
> ---
> v2: add kernel config note in commit messages
> 
>   tests/amdgpu/amd_hotplug.c | 47 ++++++++++++++++++++++++++++++++++++++
>   1 file changed, 47 insertions(+)
> 
> diff --git a/tests/amdgpu/amd_hotplug.c b/tests/amdgpu/amd_hotplug.c
> index c13bf49d3..ee3256c0b 100644
> --- a/tests/amdgpu/amd_hotplug.c
> +++ b/tests/amdgpu/amd_hotplug.c
> @@ -27,6 +27,8 @@ IGT_TEST_DESCRIPTION("Test simulated hotplugging on connectors");
>   
>   /* Maximum pipes on any AMD ASIC. */
>   #define MAX_PIPES 6
> +#define LAST_HW_SLEEP_PATH "/sys/power/suspend_stats/last_hw_sleep"
> +#define MEM_SLEEP_PATH "/sys/power/mem_sleep"
>   
>   /* Common test data. */
>   typedef struct data {
> @@ -98,6 +100,46 @@ static void test_fini(data_t *data)
>   	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, 0);
>   }
>   
> +/* Check if mem_sleep is s2idle */
> +static bool is_system_s2idle(void)
> +{
> +	int fd;
> +	char dst[64];
> +	int read_byte;
> +
> +	fd = open(MEM_SLEEP_PATH, O_RDONLY);
> +	if (fd == -1)
> +		igt_skip("Open %s file error\n", MEM_SLEEP_PATH);
> +
> +	read_byte = read(fd, dst, sizeof(dst));
> +	close(fd);
> +
> +	if (read_byte <= 0)
> +		igt_skip("Read %s file error\n", MEM_SLEEP_PATH);
> +
> +	return strstr(dst, "[s2idle]");
> +}
> +
> +/* return the last hw_sleep duration time */
> +static int get_last_hw_sleep_time(void)
> +{
> +	int fd;
> +	char dst[64];
> +	int read_byte;
> +
> +	fd = open(LAST_HW_SLEEP_PATH, O_RDONLY);
> +	if (fd == -1)
> +		igt_skip("Open HW sleep statistics file error\n");
> +
> +	read_byte = read(fd, dst, sizeof(dst));
> +	close(fd);
> +
> +	if (read_byte <= 0)
> +		igt_skip("Read HW sleep statistics file error\n");
> +
> +	return strtol(dst, NULL, 10);
> +}
> +
>   static void test_hotplug_basic(data_t *data, bool suspend)
>   {
>   	igt_output_t *output;
> @@ -131,8 +173,13 @@ static void test_hotplug_basic(data_t *data, bool suspend)
>   	}
>   
>   	if (suspend) {
> +		if (!is_system_s2idle())
> +			igt_skip("System is not configured for s2idle\n");
> +
>   		igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
>   					      SUSPEND_TEST_NONE);
> +		igt_assert_f(get_last_hw_sleep_time() > 0,
> +					  "Suspend did not reach hardware sleep state\n");
>   	}
>   
>   	/* Trigger hotplug and confirm reference image is the same. */



More information about the igt-dev mailing list