[igt-dev] [PATCH i-g-t v5 1/3] lib/igt_aux: add library function to read current selected state of mem_sleep
Gupta, Anshuman
anshuman.gupta at intel.com
Thu May 12 10:39:41 UTC 2022
> -----Original Message-----
> From: Tauro, Riana <riana.tauro at intel.com>
> Sent: Thursday, May 12, 2022 11:04 AM
> To: igt-dev at lists.freedesktop.org
> Cc: Tauro, Riana <riana.tauro at intel.com>; Gupta, Anshuman
> <anshuman.gupta at intel.com>
> Subject: [PATCH i-g-t v5 1/3] lib/igt_aux: add library function to read current
> selected state of mem_sleep
>
> From: "Tauro, Riana" <riana.tauro at intel.com>
>
> Add a library function to read the current state of mem_sleep Used by suspend
> tests without i915 to skip s3 cycle, if platform has default state as s2idle.
> Reduces CI Execution time
>
> v2: Addressed cosmetic review comments (Anshuman)
Reviewed-by: Anshuman Gupta <anshuman.gupta at intel.com>
>
> Signed-off-by: Tauro, Riana <riana.tauro at intel.com>
> ---
> lib/igt_aux.c | 52
> +++++++++++++++++++++++++++++++++++++++++++++++++++
> lib/igt_aux.h | 19 +++++++++++++++++++
> 2 files changed, 71 insertions(+)
>
> diff --git a/lib/igt_aux.c b/lib/igt_aux.c index 03cc38c9..3945bebe 100644
> --- a/lib/igt_aux.c
> +++ b/lib/igt_aux.c
> @@ -710,6 +710,12 @@ static const char *suspend_test_name[] = {
> [SUSPEND_TEST_CORE] = "core",
> };
>
> +static const char *mem_sleep_name[] = {
> + [MEM_SLEEP_FREEZE] = "s2idle",
> + [MEM_SLEEP_STANDBY] = "shallow",
> + [MEM_SLEEP_MEM] = "deep"
> +};
> +
> static enum igt_suspend_test get_suspend_test(int power_dir) {
> char *test_line;
> @@ -951,6 +957,52 @@ int igt_get_autoresume_delay(enum
> igt_suspend_state state)
> return delay;
> }
>
> +/**
> + * igt_get_memsleep_state
> + *
> + * Reads the value of /sys/power/mem_sleep and
> + * returns the current suspend state associated with 'mem'.
> + *
> + * Returns : an #igt_mem_sleep state, current suspend state associated with
> 'mem'.
> + */
> +int igt_get_memsleep_state(void)
> +{
> + char *mem_sleep_states;
> + char *mem_sleep_state;
> + enum igt_mem_sleep mem_sleep;
> + int power_dir;
> +
> + igt_require((power_dir = open("/sys/power", O_RDONLY)) >= 0);
> +
> + if (faccessat(power_dir, "mem_sleep", R_OK, 0))
> + return MEM_SLEEP_NONE;
> +
> + igt_assert((mem_sleep_states = igt_sysfs_get(power_dir,
> "mem_sleep")));
> + for (mem_sleep_state = strtok(mem_sleep_states, " ");
> mem_sleep_state;
> + mem_sleep_state = strtok(NULL, " ")) {
> + if (mem_sleep_state[0] == '[') {
> + mem_sleep_state[strlen(mem_sleep_state) - 1] = '\0';
> + mem_sleep_state++;
> + break;
> + }
> + }
> +
> + if (!mem_sleep_state) {
> + free(mem_sleep_states);
> + return MEM_SLEEP_NONE;
> + }
> +
> + for (mem_sleep = MEM_SLEEP_FREEZE; mem_sleep <
> MEM_SLEEP_NUM; mem_sleep++) {
> + if (strcmp(mem_sleep_name[mem_sleep], mem_sleep_state)
> == 0)
> + break;
> + }
> +
> + igt_assert_f(mem_sleep < MEM_SLEEP_NUM, "Invalid mem_sleep
> state\n");
> +
> + free(mem_sleep_states);
> + close(power_dir);
> + return mem_sleep;
> +}
> /**
> * igt_drop_root:
> *
> diff --git a/lib/igt_aux.h b/lib/igt_aux.h index 9f2588ae..2f7efd9c 100644
> --- a/lib/igt_aux.h
> +++ b/lib/igt_aux.h
> @@ -186,11 +186,30 @@ enum igt_suspend_test {
> SUSPEND_TEST_NUM,
> };
>
> +/**
> + * igt_mem_sleep:
> + * @MEM_SLEEP_NONE: no support
> + * @MEM_SLEEP_FREEZE: suspend-to-idle target state, aka S0ix or freeze,
> + * @MEM_SLEEP_STANDBY: standby target state, aka S1
> + * @MEM_SLEEP_MEM: suspend-to-mem target state aka S3 */ enum
> +igt_mem_sleep {
> + MEM_SLEEP_NONE,
> + MEM_SLEEP_FREEZE,
> + MEM_SLEEP_STANDBY,
> + MEM_SLEEP_MEM,
> +
> + /*<private>*/
> + MEM_SLEEP_NUM,
> +};
> +
> void igt_system_suspend_autoresume(enum igt_suspend_state state,
> enum igt_suspend_test test);
> void igt_set_autoresume_delay(int delay_secs); int
> igt_get_autoresume_delay(enum igt_suspend_state state);
>
> +int igt_get_memsleep_state(void);
> +
> /* dropping priviledges */
> void igt_drop_root(void);
>
> --
> 2.25.1
More information about the igt-dev
mailing list