55# #
66# # Case Name: check suspend/resume status
77# # Preconditions:
8- # # N/A
8+ # # - (if ran with --sleepgraph) Sleepgraph installed on dut
99# # Description:
1010# # Run the suspend/resume command to check device status
1111# # Case step:
@@ -26,27 +26,33 @@ source "$TOPDIR"/case-lib/lib.sh
2626random_min=3 # wait time should >= 3 for other device wakeup from sleep
2727random_max=20
2828
29- OPT_NAME[' l' ]=' loop' OPT_DESC[' l' ]=' loop count'
30- OPT_HAS_ARG[' l' ]=1 OPT_VAL[' l' ]=5
29+ OPT_NAME[' l' ]=' loop' OPT_DESC[' l' ]=' loop count'
30+ OPT_HAS_ARG[' l' ]=1 OPT_VAL[' l' ]=5
3131
32- OPT_NAME[' T' ]=' type' OPT_DESC[' T' ]=" suspend/resume type from /sys/power/mem_sleep"
33- OPT_HAS_ARG[' T' ]=1 OPT_VAL[' T' ]=" "
32+ OPT_NAME[' T' ]=' type' OPT_DESC[' T' ]=" suspend/resume type from /sys/power/mem_sleep"
33+ OPT_HAS_ARG[' T' ]=1 OPT_VAL[' T' ]=" "
3434
35- OPT_NAME[' S' ]=' sleep' OPT_DESC[' S' ]=' suspend/resume command:rtcwake sleep duration'
36- OPT_HAS_ARG[' S' ]=1 OPT_VAL[' S' ]=5
35+ OPT_NAME[' S' ]=' sleep' OPT_DESC[' S' ]=' suspend/resume command:rtcwake sleep duration'
36+ OPT_HAS_ARG[' S' ]=1 OPT_VAL[' S' ]=5
3737
38- OPT_NAME[' u' ]=' unload-audio' OPT_DESC[' u' ]=' unload audio modules for the test'
39- OPT_HAS_ARG[' u' ]=0 OPT_VAL[' u' ]=0
38+ OPT_NAME[' u' ]=' unload-audio' OPT_DESC[' u' ]=' unload audio modules for the test'
39+ OPT_HAS_ARG[' u' ]=0 OPT_VAL[' u' ]=0
4040
41- OPT_NAME[' w' ]=' wait' OPT_DESC[' w' ]=' idle time after suspend/resume wakeup'
42- OPT_HAS_ARG[' w' ]=1 OPT_VAL[' w' ]=5
41+ OPT_NAME[' w' ]=' wait' OPT_DESC[' w' ]=' idle time after suspend/resume wakeup'
42+ OPT_HAS_ARG[' w' ]=1 OPT_VAL[' w' ]=5
4343
44- OPT_NAME[' r' ]=' random' OPT_DESC[' r' ]=" Randomly setup wait/sleep time, range is [$random_min -$random_max ], this option will overwrite s & w option"
45- OPT_HAS_ARG[' r' ]=0 OPT_VAL[' r' ]=0
44+ OPT_NAME[' r' ]=' random' OPT_DESC[' r' ]=" Randomly setup wait/sleep time, range is [$random_min -$random_max ], this option will overwrite s & w option"
45+ OPT_HAS_ARG[' r' ]=0 OPT_VAL[' r' ]=0
4646
4747# processid is set by check-suspend-resume-with-audio.sh for audio test case
48- OPT_NAME[' p' ]=' processid' OPT_DESC[' p' ]=' Fail immediately if this process dies'
49- OPT_HAS_ARG[' p' ]=1 OPT_VAL[' p' ]=' '
48+ OPT_NAME[' p' ]=' processid' OPT_DESC[' p' ]=' Fail immediately if this process dies'
49+ OPT_HAS_ARG[' p' ]=1 OPT_VAL[' p' ]=' '
50+
51+ OPT_NAME[' s' ]=' sleepgraph' OPT_DESC[' s' ]=' run with sleepgraph (http://github.com/intel/pm-graph.git)'
52+ OPT_HAS_ARG[' s' ]=0 OPT_VAL[' s' ]=0
53+
54+ OPT_NAME[' t' ]=' resume-time' OPT_DESC[' t' ]=' resume time threshold'
55+ OPT_HAS_ARG[' t' ]=1 OPT_VAL[' t' ]=' '
5056
5157func_opt_parse_option " $@ "
5258func_lib_check_sudo
@@ -69,21 +75,28 @@ dlogi "Current suspend/resume type mode: $(cat /sys/power/mem_sleep)"
6975loop_count=${OPT_VAL['l']}
7076declare -a sleep_lst wait_lst
7177
72- if [ ${OPT_VAL['r']} -eq 1 ]; then
78+ if [ " ${OPT_VAL['r']} " -eq 1 ]; then
7379 # create random number list
74- for i in $( seq 1 $loop_count )
80+ for i in $( seq 1 " $loop_count " )
7581 do
76- sleep_lst[$ i ]=$( func_lib_get_random $random_max $random_min )
77- wait_lst[$ i ]=$( func_lib_get_random $random_max $random_min )
82+ sleep_lst[i]=$( func_lib_get_random $random_max $random_min )
83+ wait_lst[i]=$( func_lib_get_random $random_max $random_min )
7884 done
7985else
80- for i in $( seq 1 $loop_count )
86+ for i in $( seq 1 " $loop_count " )
8187 do
82- sleep_lst[$ i ]=${OPT_VAL['S']}
83- wait_lst[$ i ]=${OPT_VAL['w']}
88+ sleep_lst[i]=${OPT_VAL['S']}
89+ wait_lst[i]=${OPT_VAL['w']}
8490 done
8591fi
8692
93+ if [ " ${OPT_VAL['s']} " -eq 1 ]; then
94+ if ! command -v sleepgraph > /dev/null 2>&1 ; then
95+ echo " Sleepgraph is not installed! Exiting..."
96+ exit 1
97+ fi
98+ fi
99+
87100save_initial_stats ()
88101{
89102 printf ' \n\n'
@@ -143,7 +156,7 @@ main()
143156
144157 local keep_modules=true already_unloaded=false
145158
146- if [ ${OPT_VAL['u']} = 1 ]; then
159+ if [ " ${OPT_VAL['u']} " = 1 ]; then
147160 keep_modules=false
148161 fi
149162
@@ -159,7 +172,7 @@ main()
159172 expected_wakeup_count=$( cat /sys/power/wakeup_count)
160173 expected_stats_success=$( cat /sys/power/suspend_stats/success)
161174 save_initial_stats
162- for i in $( seq 1 $loop_count )
175+ for i in $( seq 1 " $loop_count " )
163176 do
164177 sleep_once " $i "
165178 done
@@ -170,6 +183,43 @@ main()
170183 die " Found kernel error after reloading audio drivers"
171184}
172185
186+ analyze_sleepgraph_results ()
187+ {
188+ dlogi " Analyzing sleepgraph results"
189+ results_file=$( find suspend-* /* .html)
190+ cp " $results_file " " $LOG_ROOT /"
191+
192+ thresholds=$( jq -n \
193+ --arg resume_time " ${OPT_VAL['t']} " \
194+ ' {"sof-audio-pci-intel-ptl":{"resume":$resume_time}}' )
195+
196+ dlogi " Analyzing $results_file file..."
197+ if python3 " $SCRIPT_HOME " /tools/analyze-sleepgraph-results.py " $results_file " " $thresholds " ; then
198+ dlogi " All times measurements within the thresholds"
199+ return 0
200+ else
201+ dlogw " Time measurements not within the thresholds!"
202+ return 1
203+ fi
204+ }
205+
206+ run_rtcwake ()
207+ {
208+ if [ " ${OPT_VAL['s']} " -eq 1 ]; then
209+ # remove any files from previous sleepgraph runs
210+ rm -rf suspend-*
211+
212+ dlogc " Run the command: sleepgraph -rtcwake ${sleep_lst[$i]} -m freeze"
213+ sudo sleepgraph -rtcwake " ${sleep_lst[$i]} " -m freeze ||
214+ dump_and_die " rtcwake returned $? "
215+ analyze_sleepgraph_results
216+ else
217+ dlogc " Run the command: rtcwake -m mem -s ${sleep_lst[$i]} "
218+ sudo rtcwake -m mem -s " ${sleep_lst[$i]} " ||
219+ dump_and_die " rtcwake returned $? "
220+ fi
221+ }
222+
173223sleep_once ()
174224{
175225 local i=" $1 "
@@ -179,11 +229,9 @@ sleep_once()
179229 setup_kernel_check_point
180230 expected_wakeup_count=$(( expected_wakeup_count+ 1 ))
181231 expected_stats_success=$(( expected_stats_success+ 1 ))
182- dlogc " Run the command: rtcwake -m mem -s ${sleep_lst[$i]} "
183- sudo rtcwake -m mem -s " ${sleep_lst[$i]} " ||
184- dump_and_die " rtcwake returned $? "
232+ run_rtcwake
185233 dlogc " sleep for ${wait_lst[$i]} "
186- sleep ${wait_lst[$i]}
234+ sleep " ${wait_lst[$i]} "
187235 dlogi " Check for the kernel log status"
188236 # check kernel log for each iteration to catch issues
189237 sof-kernel-log-check.sh " $KERNEL_CHECKPOINT " || dump_and_die " Caught error in kernel log"
0 commit comments