blob: 0af186f23602c51b1db5bdb3c33d8be6df00ff73 [file] [log] [blame]
Adarsh Babu Kalepalli6e4f9c52021-05-31 16:23:51 +05301# SPDX-License-Identifier: GPL-2.0+
2#
3# Copyright (c) 2021 Adarsh Babu Kalepalli <opensource.kab@gmail.com>
4# Copyright (c) 2020 Alex Kiernan <alex.kiernan@gmail.com>
Alex Kiernan1073c232020-03-11 08:46:29 +00005
6import pytest
Adarsh Babu Kalepalli6e4f9c52021-05-31 16:23:51 +05307import time
8import u_boot_utils
9
10"""
11 test_gpio_input is intended to test the fix 4dbc107f4683.
12 4dbc107f4683:"cmd: gpio: Correct do_gpio() return value"
13"""
Alex Kiernan1073c232020-03-11 08:46:29 +000014
15@pytest.mark.boardspec('sandbox')
16@pytest.mark.buildconfigspec('cmd_gpio')
17def test_gpio_input(u_boot_console):
18 """Test that gpio input correctly returns the value of a gpio pin."""
19
20 response = u_boot_console.run_command('gpio input 0; echo rc:$?')
21 expected_response = 'rc:0'
22 assert(expected_response in response)
23 response = u_boot_console.run_command('gpio toggle 0; gpio input 0; echo rc:$?')
24 expected_response = 'rc:1'
25 assert(expected_response in response)
26
27@pytest.mark.boardspec('sandbox')
28@pytest.mark.buildconfigspec('cmd_gpio')
29def test_gpio_exit_statuses(u_boot_console):
30 """Test that non-input gpio commands correctly return the command
31 success/failure status."""
32
33 expected_response = 'rc:0'
34 response = u_boot_console.run_command('gpio clear 0; echo rc:$?')
35 assert(expected_response in response)
36 response = u_boot_console.run_command('gpio set 0; echo rc:$?')
37 assert(expected_response in response)
38 response = u_boot_console.run_command('gpio toggle 0; echo rc:$?')
39 assert(expected_response in response)
40 response = u_boot_console.run_command('gpio status -a; echo rc:$?')
41 assert(expected_response in response)
42
43 expected_response = 'rc:1'
44 response = u_boot_console.run_command('gpio nonexistent-command; echo rc:$?')
45 assert(expected_response in response)
46 response = u_boot_console.run_command('gpio input 200; echo rc:$?')
47 assert(expected_response in response)
Adarsh Babu Kalepalli6e4f9c52021-05-31 16:23:51 +053048
Diego Rondini5ffde632022-04-11 12:02:09 +020049@pytest.mark.boardspec('sandbox')
50@pytest.mark.buildconfigspec('cmd_gpio')
51def test_gpio_read(u_boot_console):
52 """Test that gpio read correctly sets the variable to the value of a gpio pin."""
53
Simon Glass29642872022-08-06 17:51:54 -060054 u_boot_console.run_command('gpio clear 0')
Diego Rondini5ffde632022-04-11 12:02:09 +020055 response = u_boot_console.run_command('gpio read var 0; echo val:$var,rc:$?')
56 expected_response = 'val:0,rc:0'
57 assert(expected_response in response)
58 response = u_boot_console.run_command('gpio toggle 0; gpio read var 0; echo val:$var,rc:$?')
59 expected_response = 'val:1,rc:0'
60 assert(expected_response in response)
61 response = u_boot_console.run_command('setenv var; gpio read var nonexistent-gpio; echo val:$var,rc:$?')
62 expected_response = 'val:,rc:1'
63 assert(expected_response in response)
Adarsh Babu Kalepalli6e4f9c52021-05-31 16:23:51 +053064
65"""
66Generic Tests for 'gpio' command on sandbox and real hardware.
67The below sequence of tests rely on env__gpio_dev_config for configuration values of gpio pins.
68
69 Configuration data for gpio command.
70 The set,clear,toggle ,input and status options of 'gpio' command are verified.
71 For sake of verification,A LED/buzzer could be connected to GPIO pins configured as O/P.
72 Logic level '1'/'0' can be applied onto GPIO pins configured as I/P
73
74
75env__gpio_dev_config = {
76 #the number of 'gpio_str_x' strings should equal to
77 #'gpio_str_count' value
78 'gpio_str_count':4 ,
79 'gpio_str_1': '0',
80 'gpio_str_2': '31',
81 'gpio_str_3': '63',
82 'gpio_str_4': '127',
83 'gpio_op_pin': '64',
84 'gpio_ip_pin_set':'65',
85 'gpio_ip_pin_clear':'66',
86 'gpio_clear_value': 'value is 0',
87 'gpio_set_value': 'value is 1',
88}
89"""
90
91
92@pytest.mark.buildconfigspec('cmd_gpio')
93def test_gpio_status_all_generic(u_boot_console):
94 """Test the 'gpio status' command.
95
96 Displays all gpio pins available on the Board.
97 To verify if the status of pins is displayed or not,
98 the user can configure (gpio_str_count) and verify existence of certain
99 pins.The details of these can be configured in 'gpio_str_n'.
100 of boardenv_* (example above).User can configure any
101 number of such pins and mention that count in 'gpio_str_count'.
102 """
103
104 f = u_boot_console.config.env.get('env__gpio_dev_config',False)
105 if not f:
106 pytest.skip("gpio not configured")
107
108 gpio_str_count = f['gpio_str_count']
109
110 #Display all the GPIO ports
111 cmd = 'gpio status -a'
112 response = u_boot_console.run_command(cmd)
113
114 for str_value in range(1,gpio_str_count + 1):
115 assert f["gpio_str_%d" %(str_value)] in response
116
117
118@pytest.mark.buildconfigspec('cmd_gpio')
119def test_gpio_set_generic(u_boot_console):
120 """Test the 'gpio set' command.
121
122 A specific gpio pin configured by user as output
123 (mentioned in gpio_op_pin) is verified for
124 'set' option
125
126 """
127
128 f = u_boot_console.config.env.get('env__gpio_dev_config',False)
129 if not f:
130 pytest.skip("gpio not configured")
131
132 gpio_pin_adr = f['gpio_op_pin'];
133 gpio_set_value = f['gpio_set_value'];
134
135
136 cmd = 'gpio set ' + gpio_pin_adr
137 response = u_boot_console.run_command(cmd)
138 good_response = gpio_set_value
139 assert good_response in response
140
141
142
143@pytest.mark.buildconfigspec('cmd_gpio')
144def test_gpio_clear_generic(u_boot_console):
145 """Test the 'gpio clear' command.
146
147 A specific gpio pin configured by user as output
148 (mentioned in gpio_op_pin) is verified for
149 'clear' option
150 """
151
152 f = u_boot_console.config.env.get('env__gpio_dev_config',False)
153 if not f:
154 pytest.skip("gpio not configured")
155
156 gpio_pin_adr = f['gpio_op_pin'];
157 gpio_clear_value = f['gpio_clear_value'];
158
159
160 cmd = 'gpio clear ' + gpio_pin_adr
161 response = u_boot_console.run_command(cmd)
162 good_response = gpio_clear_value
163 assert good_response in response
164
165
166@pytest.mark.buildconfigspec('cmd_gpio')
167def test_gpio_toggle_generic(u_boot_console):
168 """Test the 'gpio toggle' command.
169
170 A specific gpio pin configured by user as output
171 (mentioned in gpio_op_pin) is verified for
172 'toggle' option
173 """
174
175
176 f = u_boot_console.config.env.get('env__gpio_dev_config',False)
177 if not f:
178 pytest.skip("gpio not configured")
179
180 gpio_pin_adr = f['gpio_op_pin'];
181 gpio_set_value = f['gpio_set_value'];
182 gpio_clear_value = f['gpio_clear_value'];
183
184 cmd = 'gpio set ' + gpio_pin_adr
185 response = u_boot_console.run_command(cmd)
186 good_response = gpio_set_value
187 assert good_response in response
188
189 cmd = 'gpio toggle ' + gpio_pin_adr
190 response = u_boot_console.run_command(cmd)
191 good_response = gpio_clear_value
192 assert good_response in response
193
194
195@pytest.mark.buildconfigspec('cmd_gpio')
196def test_gpio_input_generic(u_boot_console):
197 """Test the 'gpio input' command.
198
199 Specific gpio pins configured by user as input
200 (mentioned in gpio_ip_pin_set and gpio_ip_pin_clear)
201 is verified for logic '1' and logic '0' states
202 """
203
204 f = u_boot_console.config.env.get('env__gpio_dev_config',False)
205 if not f:
206 pytest.skip("gpio not configured")
207
208 gpio_pin_adr = f['gpio_ip_pin_clear'];
209 gpio_clear_value = f['gpio_clear_value'];
210
211
212 cmd = 'gpio input ' + gpio_pin_adr
213 response = u_boot_console.run_command(cmd)
214 good_response = gpio_clear_value
215 assert good_response in response
216
217
218 gpio_pin_adr = f['gpio_ip_pin_set'];
219 gpio_set_value = f['gpio_set_value'];
220
221
222 cmd = 'gpio input ' + gpio_pin_adr
223 response = u_boot_console.run_command(cmd)
224 good_response = gpio_set_value
225 assert good_response in response