91f6b167f22ed51b9eddac219a6ead8fd2886a8d
[renesas/vsp-tests.git] / tests / vsp-unit-test-0020.sh
1 #!/bin/sh
2
3 #
4 # Test power-management suspend/resume whilst pipelines are active
5 #
6 # Utilise the basic RPF->WPF packing test case as a measure that the hardware
7 # is operable while we perform test suspend and resume, and verify that it is
8 # still successful even with a suspend resume cycle in the middle of the test.
9 #
10
11 . ./vsp-lib.sh
12
13 features="rpf.0 wpf.0"
14
15 # These can be extracted from /sys/power/pm_test
16 suspend_modes="freezer devices platform processors core"
17
18 # This extended function performs the same
19 # as it's non-extended name-sake - but runs the pipeline
20 # for 300 frames. The suspend action occurs between frame #150~#200
21
22 test_extended_wpf_packing() {
23         local format=$1
24
25         pipe_configure rpf-wpf 0 0
26         format_configure rpf-wpf 0 0 ARGB32 1024x768 $format
27
28         vsp_runner rpf.0 --count=300 &
29         vsp_runner wpf.0 --count=300 --skip=297
30
31         local result=$(compare_frames)
32         [ x$result == xpass ] && return 0 || return 1
33 }
34
35 test_hw_pipe() {
36         test_extended_wpf_packing RGB24
37 }
38
39 test_suspend_resume() {
40         local result
41         local test_pid
42
43         test_start "Testing active pipeline suspend/resume in suspend:$mode"
44
45         # Verify the test is available
46         grep -q $mode /sys/power/pm_test
47         if [ $? != 0 ]; then
48                 test_complete skip
49                 return
50         fi
51
52         # Set the hardware running in parallel while we suspend
53         test_hw_pipe &
54         test_pid=$!
55
56         # Make sure the pipeline has time to start
57         sleep 1
58
59         # Set the test mode
60         echo $mode > /sys/power/pm_test
61
62         # Commence suspend
63         # The pm_test framework will automatically resume after 5 seconds
64         echo mem > /sys/power/state
65
66         # Wait for the pipeline to complete
67         wait $test_pid
68         result=$?
69
70         if [ $result == 0 ]; then
71                 test_complete pass
72         else
73                 test_complete fail
74         fi
75 }
76
77 test_main() {
78         local mode
79
80         # Check for pm-suspend test option
81         if [ ! -e /sys/power/pm_test ] ; then
82                 echo "$0: suspend/resume testing requires CONFIG_PM_DEBUG"
83                 return
84         fi;
85
86         for mode in $suspend_modes ; do
87                 test_suspend_resume $mode
88         done;
89 }
90
91 test_init $0 "$features"
92 test_run