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