Message ID | 20211119092025.11861-1-ivan.hu@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | s3: add sleep type setting for testing with s3 or s2idle | expand |
On 2021-11-19 2:20 a.m., Ivan Hu wrote: > Add s3-sleep-type for select test with s3 or s2idle. > i.e. fwts s3 --s3-sleep-type=s2idle > If sleep type is not specified, test with s3 by default. > And it will restore system sleep type settings after testing. > > Signed-off-by: Ivan Hu <ivan.hu@canonical.com> > --- > src/acpi/s3/s3.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c > index fd47c861..d77108a1 100644 > --- a/src/acpi/s3/s3.c > +++ b/src/acpi/s3/s3.c > @@ -36,6 +36,7 @@ > #define PM_S2IDLE_SLP_S0 "/sys/kernel/debug/pmc_core/slp_s0_residency_usec" > > static char sleep_type[7]; > +static char sleep_type_orig[7]; > > static int s3_multiple = 1; /* number of s3 multiple tests to run */ > static int s3_min_delay = 0; /* min time between resume and next suspend */ > @@ -50,6 +51,7 @@ static float s3_suspend_time = 15.0; /* Maximum allowed suspend time */ > static float s3_resume_time = 15.0; /* Maximum allowed resume time */ > static bool s3_hybrid = false; > static char *s3_hook = NULL; /* Hook to run after each S3 */ > +static char *s3_sleep_type = NULL; /* The sleep type(s3 or s2idle) */ > > static int s3_init(fwts_framework *fw) > { > @@ -66,6 +68,22 @@ static int s3_init(fwts_framework *fw) > return FWTS_ERROR; > } > > + str = fwts_get(PM_SUSPEND_PATH); > + if (str && strstr(str, "[s2idle]")) { > + strncpy(sleep_type_orig, "s2idle", strlen("s2idle") + 1); > + free(str); > + } else { > + strncpy(sleep_type_orig, "deep", strlen("deep") + 1); > + } > + > + if (!s3_sleep_type) { > + if (fwts_set(PM_SUSPEND_PATH, "deep") != FWTS_OK) > + fwts_log_error(fw, "Cannot set the sleep type to S3(deep), test with default type."); > + } else { > + if (fwts_set(PM_SUSPEND_PATH, s3_sleep_type) != FWTS_OK) > + fwts_log_error(fw, "Cannot set the sleep type to %s, test with default type.", s3_sleep_type); > + } > + > str = fwts_get(PM_SUSPEND_PATH); > if (str && strstr(str, "[s2idle]")) { > strncpy(sleep_type, "s2idle", strlen("s2idle") + 1); > @@ -77,6 +95,15 @@ static int s3_init(fwts_framework *fw) > return FWTS_OK; > } > > +static int s3_deinit(fwts_framework *fw) > +{ > + > + FWTS_UNUSED(fw); > + (void)fwts_set(PM_SUSPEND_PATH, sleep_type_orig); > + > + return FWTS_OK; > +} > + > /* > * s3_hook_exec() > * run a given hook script > @@ -808,6 +835,9 @@ static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[], > case 11: > s3_hook = optarg; > break; > + case 12: > + s3_sleep_type = optarg; > + break; > } > } > return FWTS_OK; > @@ -826,6 +856,7 @@ static fwts_option s3_options[] = { > { "s3-resume-time", "", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" }, > { "s3-hybrid", "", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." }, > { "s3-resume-hook hook","", 1, "Run a hook script after each S3 resume, 0 exit indicates success." }, > + { "s3-sleep-type" ,"", 1, "Set the sleep type for testing S3 or s2idle, default S3." }, > { NULL, NULL, 0, NULL } > }; > > @@ -837,6 +868,7 @@ static fwts_framework_minor_test s3_tests[] = { > static fwts_framework_ops s3_ops = { > .description = "Sleep suspend/resume test.", > .init = s3_init, > + .deinit = s3_deinit, > .minor_tests = s3_tests, > .options = s3_options, > .options_handler = s3_options_handler, > fwts-test needs updating after adding the new options: FAIL: fwts-test/arg-help-0001/test-0001.sh FAIL: fwts-test/arg-help-0001/test-0002.sh Acked-by: Alex Hung <alex.hung@canonical.com>
diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c index fd47c861..d77108a1 100644 --- a/src/acpi/s3/s3.c +++ b/src/acpi/s3/s3.c @@ -36,6 +36,7 @@ #define PM_S2IDLE_SLP_S0 "/sys/kernel/debug/pmc_core/slp_s0_residency_usec" static char sleep_type[7]; +static char sleep_type_orig[7]; static int s3_multiple = 1; /* number of s3 multiple tests to run */ static int s3_min_delay = 0; /* min time between resume and next suspend */ @@ -50,6 +51,7 @@ static float s3_suspend_time = 15.0; /* Maximum allowed suspend time */ static float s3_resume_time = 15.0; /* Maximum allowed resume time */ static bool s3_hybrid = false; static char *s3_hook = NULL; /* Hook to run after each S3 */ +static char *s3_sleep_type = NULL; /* The sleep type(s3 or s2idle) */ static int s3_init(fwts_framework *fw) { @@ -66,6 +68,22 @@ static int s3_init(fwts_framework *fw) return FWTS_ERROR; } + str = fwts_get(PM_SUSPEND_PATH); + if (str && strstr(str, "[s2idle]")) { + strncpy(sleep_type_orig, "s2idle", strlen("s2idle") + 1); + free(str); + } else { + strncpy(sleep_type_orig, "deep", strlen("deep") + 1); + } + + if (!s3_sleep_type) { + if (fwts_set(PM_SUSPEND_PATH, "deep") != FWTS_OK) + fwts_log_error(fw, "Cannot set the sleep type to S3(deep), test with default type."); + } else { + if (fwts_set(PM_SUSPEND_PATH, s3_sleep_type) != FWTS_OK) + fwts_log_error(fw, "Cannot set the sleep type to %s, test with default type.", s3_sleep_type); + } + str = fwts_get(PM_SUSPEND_PATH); if (str && strstr(str, "[s2idle]")) { strncpy(sleep_type, "s2idle", strlen("s2idle") + 1); @@ -77,6 +95,15 @@ static int s3_init(fwts_framework *fw) return FWTS_OK; } +static int s3_deinit(fwts_framework *fw) +{ + + FWTS_UNUSED(fw); + (void)fwts_set(PM_SUSPEND_PATH, sleep_type_orig); + + return FWTS_OK; +} + /* * s3_hook_exec() * run a given hook script @@ -808,6 +835,9 @@ static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[], case 11: s3_hook = optarg; break; + case 12: + s3_sleep_type = optarg; + break; } } return FWTS_OK; @@ -826,6 +856,7 @@ static fwts_option s3_options[] = { { "s3-resume-time", "", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" }, { "s3-hybrid", "", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." }, { "s3-resume-hook hook","", 1, "Run a hook script after each S3 resume, 0 exit indicates success." }, + { "s3-sleep-type" ,"", 1, "Set the sleep type for testing S3 or s2idle, default S3." }, { NULL, NULL, 0, NULL } }; @@ -837,6 +868,7 @@ static fwts_framework_minor_test s3_tests[] = { static fwts_framework_ops s3_ops = { .description = "Sleep suspend/resume test.", .init = s3_init, + .deinit = s3_deinit, .minor_tests = s3_tests, .options = s3_options, .options_handler = s3_options_handler,
Add s3-sleep-type for select test with s3 or s2idle. i.e. fwts s3 --s3-sleep-type=s2idle If sleep type is not specified, test with s3 by default. And it will restore system sleep type settings after testing. Signed-off-by: Ivan Hu <ivan.hu@canonical.com> --- src/acpi/s3/s3.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)