[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