tests: Add SPDX headers to vsp-unit-test-0026.sh
[renesas/vsp-tests.git] / tests / vsp-unit-test-0019.sh
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0-or-later
3 # SPDX-FileCopyrightText: 2016-2017 Renesas Electronics Corporation
4
5 #
6 # Test power-management suspend/resume whilst pipelines are idle
7 #
8 # Utilise the basic RPF->WPF packing test case as a measure that the hardware
9 # is operable while we perform test suspend and resume, and verify that it is
10 # still operable after resume.
11 #
12 # Format iteration loops are maintained, even with only one format so that this
13 # test can be easily extended to try further formats if needed in the future.
14 #
15
16 . ./vsp-lib.sh
17
18 features="rpf.0 wpf.0"
19
20 # Two formats are specified so that the test is run twice.
21 # This ensures that stop -> start works both before and after suspend
22 formats="RGB24 RGB24"
23
24 # These can be extracted from /sys/power/pm_test
25 suspend_modes="freezer devices platform processors core"
26
27 test_wpf_packing() {
28         local format=$1
29
30         pipe_configure rpf-wpf 0 0
31         format_configure rpf-wpf 0 0 ARGB32 1024x768 $format
32
33         vsp_runner rpf.0 &
34         vsp_runner wpf.0
35
36         local result=$(compare_frames)
37         [ x$result == xpass ] && return 0 || return 1
38 }
39
40 test_hw_pipe() {
41         local format
42         local result
43
44         for format in $formats ; do
45                 test_wpf_packing $format
46                 result=$?
47
48                 # return early on failure
49                 [ $result != 0 ] && return 1
50         done
51
52         return 0
53 }
54
55 test_suspend_resume() {
56         local result=0
57
58         test_start "non-active pipeline suspend/resume in suspend:$mode"
59
60         # Verify the test is available
61         grep -q $mode /sys/power/pm_test
62         if [ $? != 0 ]; then
63                 test_complete skip
64                 return
65         fi
66
67         # Test the hardware each side of suspend resume
68         test_hw_pipe
69         result=$((result+$?))
70
71         # Set the test mode
72         echo $mode > /sys/power/pm_test
73
74         # Commence suspend
75         # The pm_test framework will automatically resume after 5 seconds
76         echo mem > /sys/power/state
77
78         # Verify the hardware is still operational
79         test_hw_pipe
80         result=$((result+$?))
81
82         if [ $result != 0 ]; then
83                 test_complete "failed"
84         else
85                 test_complete "passed"
86         fi
87 }
88
89 test_main() {
90         local mode
91
92         # Check for pm-suspend test option
93         if [ ! -e /sys/power/pm_test ] ; then
94                 echo "$0: suspend/resume testing requires CONFIG_PM_DEBUG"
95                 return
96         fi
97
98         for mode in $suspend_modes ; do
99                 test_suspend_resume $mode
100         done
101 }
102
103 test_init $0 "$features"
104 test_run