Commit 65a6b3c2af673237bb524d22ef6ca8a213f9cd8f
1 parent
3cc9716476
Exists in
smarc_8mq_lf_v2020.04
and in
12 other branches
test/py: Extend fpga command to test all fpga load types
Add support for info, load, loadp, loadb, loadbp, loadmk_legacy, loadmk_legacy_gz, loadmk_fit, loadfs also with variable support. There are probably missing failed tests. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Showing 1 changed file with 552 additions and 0 deletions Side-by-side Diff
test/py/tests/test_fpga.py
1 | +# SPDX-License-Identifier: GPL-2.0 | |
2 | +# | |
3 | +# Copyright (c) 2018, Xilinx Inc. | |
4 | +# | |
5 | +# Michal Simek | |
6 | +# Siva Durga Prasad Paladugu | |
7 | + | |
8 | +import pytest | |
9 | +import re | |
10 | +import random | |
11 | +import u_boot_utils | |
12 | + | |
13 | +""" | |
14 | +Note: This test relies on boardenv_* containing configuration values to define | |
15 | +the network available and files to be used for testing. Without this, this test | |
16 | +will be automatically skipped. | |
17 | + | |
18 | +For example: | |
19 | + | |
20 | +# True if a DHCP server is attached to the network, and should be tested. | |
21 | +env__net_dhcp_server = True | |
22 | + | |
23 | +# A list of environment variables that should be set in order to configure a | |
24 | +# static IP. In this test case we atleast need serverip for performing tftpb | |
25 | +# to get required files. | |
26 | +env__net_static_env_vars = [ | |
27 | + ("ipaddr", "10.0.0.100"), | |
28 | + ("netmask", "255.255.255.0"), | |
29 | + ("serverip", "10.0.0.1"), | |
30 | +] | |
31 | + | |
32 | +# Details regarding the files that may be read from a TFTP server. . | |
33 | +env__fpga_secure_readable_file = { | |
34 | + "fn": "auth_bhdr_ppk1_bit.bin", | |
35 | + "enckupfn": "auth_bhdr_enc_kup_load_bit.bin", | |
36 | + "addr": 0x1000000, | |
37 | + "keyaddr": 0x100000, | |
38 | + "keyfn": "key.txt", | |
39 | +} | |
40 | + | |
41 | +env__fpga_under_test = { | |
42 | + "dev": 0, | |
43 | + "addr" : 0x1000000, | |
44 | + "bitstream_load": "compress.bin", | |
45 | + "bitstream_load_size": 1831960, | |
46 | + "bitstream_loadp": "compress_pr.bin", | |
47 | + "bitstream_loadp_size": 423352, | |
48 | + "bitstream_loadb": "compress.bit", | |
49 | + "bitstream_loadb_size": 1832086, | |
50 | + "bitstream_loadbp": "compress_pr.bit", | |
51 | + "bitstream_loadbp_size": 423491, | |
52 | + "mkimage_legacy": "download.ub", | |
53 | + "mkimage_legacy_size": 13321468, | |
54 | + "mkimage_legacy_gz": "download.gz.ub", | |
55 | + "mkimage_legacy_gz_size": 53632, | |
56 | + "mkimage_fit": "download-fit.ub", | |
57 | + "mkimage_fit_size": 13322784, | |
58 | + "loadfs": "mmc 0 compress.bin", | |
59 | + "loadfs_size": 1831960, | |
60 | + "loadfs_block_size": 0x10000, | |
61 | +} | |
62 | +""" | |
63 | + | |
64 | +import test_net | |
65 | + | |
66 | +def check_dev(u_boot_console): | |
67 | + f = u_boot_console.config.env.get('env__fpga_under_test', None) | |
68 | + if not f: | |
69 | + pytest.skip('No FPGA to test') | |
70 | + | |
71 | + dev = f.get('dev', -1) | |
72 | + if dev < 0: | |
73 | + pytest.fail('No dev specified via env__fpga_under_test') | |
74 | + | |
75 | + return dev, f | |
76 | + | |
77 | +def load_file_from_var(u_boot_console, name): | |
78 | + dev, f = check_dev(u_boot_console) | |
79 | + | |
80 | + addr = f.get('addr', -1) | |
81 | + if addr < 0: | |
82 | + pytest.fail('No address specified via env__fpga_under_test') | |
83 | + | |
84 | + test_net.test_net_dhcp(u_boot_console) | |
85 | + test_net.test_net_setup_static(u_boot_console) | |
86 | + bit = f['%s' % (name)] | |
87 | + bit_size = f['%s_size' % (name)] | |
88 | + | |
89 | + expected_tftp = 'Bytes transferred = %d' % bit_size | |
90 | + output = u_boot_console.run_command('tftpboot %x %s' % (addr, bit)) | |
91 | + assert expected_tftp in output | |
92 | + | |
93 | + return f, dev, addr, bit, bit_size | |
94 | + | |
95 | +###### FPGA FAIL test ###### | |
96 | +expected_usage = 'fpga - loadable FPGA image support' | |
97 | + | |
98 | +@pytest.mark.xfail | |
99 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
100 | +def test_fpga_fail(u_boot_console): | |
101 | + # Test non valid fpga subcommand | |
102 | + expected = 'fpga: non existing command' | |
103 | + output = u_boot_console.run_command('fpga broken 0') | |
104 | + #assert expected in output | |
105 | + assert expected_usage in output | |
106 | + | |
107 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
108 | +def test_fpga_help(u_boot_console): | |
109 | + # Just show help | |
110 | + output = u_boot_console.run_command('fpga') | |
111 | + assert expected_usage in output | |
112 | + | |
113 | + | |
114 | +###### FPGA DUMP tests ###### | |
115 | + | |
116 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
117 | +def test_fpga_dump(u_boot_console): | |
118 | + pytest.skip('Not implemented now') | |
119 | + | |
120 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
121 | +def test_fpga_dump_variable(u_boot_console): | |
122 | + # Same as above but via "fpga" variable | |
123 | + pytest.skip('Not implemented now') | |
124 | + | |
125 | +###### FPGA INFO tests ###### | |
126 | + | |
127 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
128 | +def test_fpga_info_fail(u_boot_console): | |
129 | + # Maybe this can be skipped completely | |
130 | + dev, f = check_dev(u_boot_console) | |
131 | + | |
132 | + # Multiple parameters to fpga info should fail | |
133 | + expected = 'fpga: more parameters passed' | |
134 | + output = u_boot_console.run_command('fpga info 0 0') | |
135 | + #assert expected in output | |
136 | + assert expected_usage in output | |
137 | + | |
138 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
139 | +def test_fpga_info_list(u_boot_console): | |
140 | + # Maybe this can be skipped completely | |
141 | + dev, f = check_dev(u_boot_console) | |
142 | + | |
143 | + # Code is design in a way that if fpga dev is not passed it should | |
144 | + # return list of all fpga devices in the system | |
145 | + u_boot_console.run_command('setenv fpga') | |
146 | + output = u_boot_console.run_command('fpga info') | |
147 | + assert expected_usage not in output | |
148 | + | |
149 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
150 | +def test_fpga_info(u_boot_console): | |
151 | + dev, f = check_dev(u_boot_console) | |
152 | + | |
153 | + output = u_boot_console.run_command('fpga info %x' % (dev)) | |
154 | + assert expected_usage not in output | |
155 | + | |
156 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
157 | +def test_fpga_info_variable(u_boot_console): | |
158 | + dev, f = check_dev(u_boot_console) | |
159 | + | |
160 | + # | |
161 | + # fpga variable is storing device number which doesn't need to be passed | |
162 | + # | |
163 | + u_boot_console.run_command('setenv fpga %x' % (dev)) | |
164 | + | |
165 | + output = u_boot_console.run_command('fpga info') | |
166 | + # Variable cleanup | |
167 | + u_boot_console.run_command('setenv fpga') | |
168 | + assert expected_usage not in output | |
169 | + | |
170 | +###### FPGA LOAD tests ###### | |
171 | + | |
172 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
173 | +@pytest.mark.buildconfigspec('cmd_echo') | |
174 | +def test_fpga_load_fail(u_boot_console): | |
175 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_load') | |
176 | + | |
177 | + for cmd in ['dump', 'load', 'loadb']: | |
178 | + # missing dev parameter | |
179 | + expected = 'fpga: incorrect parameters passed' | |
180 | + output = u_boot_console.run_command('fpga %s %x $filesize' % (cmd, addr)) | |
181 | + #assert expected in output | |
182 | + assert expected_usage in output | |
183 | + | |
184 | + # more parameters - 0 at the end | |
185 | + expected = 'fpga: more parameters passed' | |
186 | + output = u_boot_console.run_command('fpga %s %x %x $filesize 0' % (cmd, dev, addr)) | |
187 | + #assert expected in output | |
188 | + assert expected_usage in output | |
189 | + | |
190 | + # 0 address | |
191 | + expected = 'fpga: zero fpga_data address' | |
192 | + output = u_boot_console.run_command('fpga %s %x 0 $filesize' % (cmd, dev)) | |
193 | + #assert expected in output | |
194 | + assert expected_usage in output | |
195 | + | |
196 | + # 0 filesize | |
197 | + expected = 'fpga: zero size' | |
198 | + output = u_boot_console.run_command('fpga %s %x %x 0' % (cmd, dev, addr)) | |
199 | + #assert expected in output | |
200 | + assert expected_usage in output | |
201 | + | |
202 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
203 | +@pytest.mark.buildconfigspec('cmd_echo') | |
204 | +def test_fpga_load(u_boot_console): | |
205 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_load') | |
206 | + | |
207 | + expected_text = 'FPGA loaded successfully' | |
208 | + output = u_boot_console.run_command('fpga load %x %x $filesize && echo %s' % (dev, addr, expected_text)) | |
209 | + assert expected_text in output | |
210 | + | |
211 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
212 | +@pytest.mark.buildconfigspec('cmd_fpga_loadp') | |
213 | +@pytest.mark.buildconfigspec('cmd_echo') | |
214 | +def test_fpga_loadp(u_boot_console): | |
215 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_load') | |
216 | + | |
217 | + expected_text = 'FPGA loaded successfully' | |
218 | + output = u_boot_console.run_command('fpga load %x %x $filesize && echo %s' % (dev, addr, expected_text)) | |
219 | + assert expected_text in output | |
220 | + | |
221 | + # And load also partial bistream | |
222 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_loadp') | |
223 | + | |
224 | + expected_text = 'FPGA loaded successfully' | |
225 | + output = u_boot_console.run_command('fpga loadp %x %x $filesize && echo %s' % (dev, addr, expected_text)) | |
226 | + assert expected_text in output | |
227 | + | |
228 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
229 | +@pytest.mark.buildconfigspec('cmd_echo') | |
230 | +def test_fpga_loadb(u_boot_console): | |
231 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_loadb') | |
232 | + | |
233 | + expected_text = 'FPGA loaded successfully' | |
234 | + output = u_boot_console.run_command('fpga loadb %x %x $filesize && echo %s' % (dev, addr, expected_text)) | |
235 | + assert expected_text in output | |
236 | + | |
237 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
238 | +@pytest.mark.buildconfigspec('cmd_fpga_loadbp') | |
239 | +@pytest.mark.buildconfigspec('cmd_echo') | |
240 | +def test_fpga_loadbp(u_boot_console): | |
241 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_loadb') | |
242 | + | |
243 | + expected_text = 'FPGA loaded successfully' | |
244 | + output = u_boot_console.run_command('fpga loadb %x %x $filesize && echo %s' % (dev, addr, expected_text)) | |
245 | + assert expected_text in output | |
246 | + | |
247 | + # And load also partial bistream in bit format | |
248 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'bitstream_loadbp') | |
249 | + | |
250 | + expected_text = 'FPGA loaded successfully' | |
251 | + output = u_boot_console.run_command('fpga loadbp %x %x $filesize && echo %s' % (dev, addr, expected_text)) | |
252 | + assert expected_text in output | |
253 | + | |
254 | +###### FPGA LOADMK tests ###### | |
255 | + | |
256 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
257 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
258 | +@pytest.mark.buildconfigspec('cmd_echo') | |
259 | +@pytest.mark.buildconfigspec('image_format_legacy') | |
260 | +def test_fpga_loadmk_fail(u_boot_console): | |
261 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_legacy') | |
262 | + | |
263 | + u_boot_console.run_command('imi %x' % (addr)) | |
264 | + | |
265 | + # load image but pass incorrect address to show error message | |
266 | + expected = 'Unknown image type' | |
267 | + output = u_boot_console.run_command('fpga loadmk %x %x' % (dev, addr + 0x10)) | |
268 | + assert expected in output | |
269 | + | |
270 | + # Pass more parameters then command expects - 0 at the end | |
271 | + output = u_boot_console.run_command('fpga loadmk %x %x 0' % (dev, addr)) | |
272 | + #assert expected in output | |
273 | + assert expected_usage in output | |
274 | + | |
275 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
276 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
277 | +@pytest.mark.buildconfigspec('cmd_echo') | |
278 | +@pytest.mark.buildconfigspec('image_format_legacy') | |
279 | +def test_fpga_loadmk_legacy(u_boot_console): | |
280 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_legacy') | |
281 | + | |
282 | + u_boot_console.run_command('imi %x' % (addr)) | |
283 | + | |
284 | + expected_text = 'FPGA loaded successfully' | |
285 | + output = u_boot_console.run_command('fpga loadmk %x %x && echo %s' % (dev, addr, expected_text)) | |
286 | + assert expected_text in output | |
287 | + | |
288 | +@pytest.mark.xfail | |
289 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
290 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
291 | +@pytest.mark.buildconfigspec('cmd_echo') | |
292 | +@pytest.mark.buildconfigspec('image_format_legacy') | |
293 | +def test_fpga_loadmk_legacy_variable_fpga(u_boot_console): | |
294 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_legacy') | |
295 | + | |
296 | + u_boot_console.run_command('imi %x' % (addr)) | |
297 | + | |
298 | + u_boot_console.run_command('setenv fpga %x' % (dev)) | |
299 | + | |
300 | + # this testcase should cover case which looks like it is supported but dev pointer is broken by loading mkimage address | |
301 | + expected_text = 'FPGA loaded successfully' | |
302 | + output = u_boot_console.run_command('fpga loadmk %x && echo %s' % (addr, expected_text)) | |
303 | + u_boot_console.run_command('setenv fpga') | |
304 | + assert expected_text in output | |
305 | + | |
306 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
307 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
308 | +@pytest.mark.buildconfigspec('cmd_echo') | |
309 | +@pytest.mark.buildconfigspec('image_format_legacy') | |
310 | +def test_fpga_loadmk_legacy_variable_fpgadata(u_boot_console): | |
311 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_legacy') | |
312 | + | |
313 | + u_boot_console.run_command('imi %x' % (addr)) | |
314 | + | |
315 | + u_boot_console.run_command('setenv fpgadata %x' % (addr)) | |
316 | + | |
317 | + # this testcase should cover case which looks like it is supported but dev pointer is broken by loading mkimage address | |
318 | + expected_text = 'FPGA loaded successfully' | |
319 | + output = u_boot_console.run_command('fpga loadmk %x && echo %s' % (dev, expected_text)) | |
320 | + u_boot_console.run_command('setenv fpgadata') | |
321 | + assert expected_text in output | |
322 | + | |
323 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
324 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
325 | +@pytest.mark.buildconfigspec('cmd_echo') | |
326 | +@pytest.mark.buildconfigspec('image_format_legacy') | |
327 | +def test_fpga_loadmk_legacy_variable(u_boot_console): | |
328 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_legacy') | |
329 | + | |
330 | + u_boot_console.run_command('imi %x' % (addr)) | |
331 | + | |
332 | + u_boot_console.run_command('setenv fpga %x' % (dev)) | |
333 | + u_boot_console.run_command('setenv fpgadata %x' % (addr)) | |
334 | + | |
335 | + # this testcase should cover case which looks like it is supported but dev pointer is broken by loading mkimage address | |
336 | + expected_text = 'FPGA loaded successfully' | |
337 | + output = u_boot_console.run_command('fpga loadmk && echo %s' % (expected_text)) | |
338 | + u_boot_console.run_command('setenv fpga') | |
339 | + u_boot_console.run_command('setenv fpgadata') | |
340 | + assert expected_text in output | |
341 | + | |
342 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
343 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
344 | +@pytest.mark.buildconfigspec('cmd_echo') | |
345 | +@pytest.mark.buildconfigspec('image_format_legacy') | |
346 | +@pytest.mark.buildconfigspec('gzip') | |
347 | +def test_fpga_loadmk_legacy_gz(u_boot_console): | |
348 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_legacy_gz') | |
349 | + | |
350 | + u_boot_console.run_command('imi %x' % (addr)) | |
351 | + | |
352 | + expected_text = 'FPGA loaded successfully' | |
353 | + output = u_boot_console.run_command('fpga loadmk %x %x && echo %s' % (dev, addr, expected_text)) | |
354 | + assert expected_text in output | |
355 | + | |
356 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
357 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
358 | +@pytest.mark.buildconfigspec('fit') | |
359 | +@pytest.mark.buildconfigspec('cmd_echo') | |
360 | +def test_fpga_loadmk_fit(u_boot_console): | |
361 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit') | |
362 | + | |
363 | + u_boot_console.run_command('imi %x' % (addr)) | |
364 | + | |
365 | + expected_text = 'FPGA loaded successfully' | |
366 | + output = u_boot_console.run_command('fpga loadmk %x %x:fpga && echo %s' % (dev, addr, expected_text)) | |
367 | + assert expected_text in output | |
368 | + | |
369 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
370 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
371 | +@pytest.mark.buildconfigspec('fit') | |
372 | +@pytest.mark.buildconfigspec('cmd_echo') | |
373 | +def test_fpga_loadmk_fit_variable_fpga(u_boot_console): | |
374 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit') | |
375 | + | |
376 | + u_boot_console.run_command('imi %x' % (addr)) | |
377 | + # FIXME this should fail - broken support in past | |
378 | + u_boot_console.run_command('setenv fpga %x' % (dev)) | |
379 | + | |
380 | + expected_text = 'FPGA loaded successfully' | |
381 | + output = u_boot_console.run_command('fpga loadmk %x:fpga && echo %s' % (addr, expected_text)) | |
382 | + u_boot_console.run_command('setenv fpga') | |
383 | + assert expected_text in output | |
384 | + | |
385 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
386 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
387 | +@pytest.mark.buildconfigspec('fit') | |
388 | +@pytest.mark.buildconfigspec('cmd_echo') | |
389 | +def test_fpga_loadmk_fit_variable_fpgadata(u_boot_console): | |
390 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit') | |
391 | + | |
392 | + u_boot_console.run_command('imi %x' % (addr)) | |
393 | + # FIXME this should fail - broken support in past | |
394 | + u_boot_console.run_command('setenv fpgadata %x:fpga' % (addr)) | |
395 | + | |
396 | + expected_text = 'FPGA loaded successfully' | |
397 | + output = u_boot_console.run_command('fpga loadmk %x && echo %s' % (dev, expected_text)) | |
398 | + u_boot_console.run_command('setenv fpgadata') | |
399 | + assert expected_text in output | |
400 | + | |
401 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
402 | +@pytest.mark.buildconfigspec('cmd_fpga_loadmk') | |
403 | +@pytest.mark.buildconfigspec('fit') | |
404 | +@pytest.mark.buildconfigspec('cmd_echo') | |
405 | +def test_fpga_loadmk_fit_variable(u_boot_console): | |
406 | + f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit') | |
407 | + | |
408 | + u_boot_console.run_command('imi %x' % (addr)) | |
409 | + | |
410 | + u_boot_console.run_command('setenv fpga %x' % (dev)) | |
411 | + u_boot_console.run_command('setenv fpgadata %x:fpga' % (addr)) | |
412 | + | |
413 | + expected_text = 'FPGA loaded successfully' | |
414 | + output = u_boot_console.run_command('fpga loadmk && echo %s' % (expected_text)) | |
415 | + u_boot_console.run_command('setenv fpga') | |
416 | + u_boot_console.run_command('setenv fpgadata') | |
417 | + assert expected_text in output | |
418 | + | |
419 | +###### FPGA LOAD tests ###### | |
420 | + | |
421 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
422 | +def test_fpga_loadfs_fail(u_boot_console): | |
423 | + dev, f = check_dev(u_boot_console) | |
424 | + | |
425 | + addr = f.get('addr', -1) | |
426 | + if addr < 0: | |
427 | + pytest.fail('No address specified via env__fpga_under_test') | |
428 | + | |
429 | + bit = f['loadfs'] | |
430 | + bit_size = f['loadfs_size'] | |
431 | + block_size = f['loadfs_block_size'] | |
432 | + | |
433 | + # less params - dev number removed | |
434 | + expected = 'fpga: incorrect parameters passed' | |
435 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %s' % (addr, bit_size, block_size, bit)) | |
436 | + #assert expected in output | |
437 | + assert expected_usage in output | |
438 | + | |
439 | + # one more param - 0 at the end | |
440 | + # This is the longest command that's why there is no message from cmd/fpga.c | |
441 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s 0' % (dev, addr, bit_size, block_size, bit)) | |
442 | + assert expected_usage in output | |
443 | + | |
444 | + # zero address 0 | |
445 | + expected = 'fpga: zero fpga_data address' | |
446 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s' % (dev, 0, bit_size, block_size, bit)) | |
447 | + #assert expected in output | |
448 | + assert expected_usage in output | |
449 | + | |
450 | + # bit_size 0 | |
451 | + expected = 'fpga: zero size' | |
452 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s' % (dev, addr, 0, block_size, bit)) | |
453 | + #assert expected in output | |
454 | + assert expected_usage in output | |
455 | + | |
456 | + # block size 0 | |
457 | + # FIXME this should pass but it failing too | |
458 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s' % (dev, addr, bit_size, 0, bit)) | |
459 | + assert expected_usage in output | |
460 | + | |
461 | + # non existing bitstream name | |
462 | + expected = 'Unable to read file noname' | |
463 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %x mmc 0 noname' % (dev, addr, bit_size, block_size)) | |
464 | + assert expected in output | |
465 | + assert expected_usage in output | |
466 | + | |
467 | + # -1 dev number | |
468 | + expected = 'fpga_fsload: Invalid device number -1' | |
469 | + output = u_boot_console.run_command('fpga loadfs %d %x %x %x mmc 0 noname' % (-1, addr, bit_size, block_size)) | |
470 | + assert expected in output | |
471 | + assert expected_usage in output | |
472 | + | |
473 | + | |
474 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
475 | +@pytest.mark.buildconfigspec('cmd_echo') | |
476 | +def test_fpga_loadfs(u_boot_console): | |
477 | + dev, f = check_dev(u_boot_console) | |
478 | + | |
479 | + addr = f.get('addr', -1) | |
480 | + if addr < 0: | |
481 | + pytest.fail('No address specified via env__fpga_under_test') | |
482 | + | |
483 | + bit = f['loadfs'] | |
484 | + bit_size = f['loadfs_size'] | |
485 | + block_size = f['loadfs_block_size'] | |
486 | + | |
487 | + # This should be done better | |
488 | + expected_text = 'FPGA loaded successfully' | |
489 | + output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s && echo %s' % (dev, addr, bit_size, block_size, bit, expected_text)) | |
490 | + assert expected_text in output | |
491 | + | |
492 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
493 | +@pytest.mark.buildconfigspec('cmd_fpga_load_secure') | |
494 | +@pytest.mark.buildconfigspec('cmd_net') | |
495 | +@pytest.mark.buildconfigspec('cmd_dhcp') | |
496 | +@pytest.mark.buildconfigspec('net') | |
497 | +def test_fpga_secure_bit_auth(u_boot_console): | |
498 | + | |
499 | + test_net.test_net_dhcp(u_boot_console) | |
500 | + test_net.test_net_setup_static(u_boot_console) | |
501 | + | |
502 | + f = u_boot_console.config.env.get('env__fpga_secure_readable_file', None) | |
503 | + if not f: | |
504 | + pytest.skip('No TFTP readable file to read') | |
505 | + | |
506 | + addr = f.get('addr', None) | |
507 | + if not addr: | |
508 | + addr = u_boot_utils.find_ram_base(u_boot_console) | |
509 | + | |
510 | + expected_tftp = 'Bytes transferred = ' | |
511 | + fn = f['fn'] | |
512 | + output = u_boot_console.run_command('tftpboot %x %s' % (addr, fn)) | |
513 | + assert expected_tftp in output | |
514 | + | |
515 | + expected_zynqmpsecure = 'Bitstream successfully loaded' | |
516 | + output = u_boot_console.run_command('fpga loads 0 %x $filesize 0 2' % (addr)) | |
517 | + assert expected_zynqmpsecure in output | |
518 | + | |
519 | + | |
520 | +@pytest.mark.buildconfigspec('cmd_fpga') | |
521 | +@pytest.mark.buildconfigspec('cmd_fpga_load_secure') | |
522 | +@pytest.mark.buildconfigspec('cmd_net') | |
523 | +@pytest.mark.buildconfigspec('cmd_dhcp') | |
524 | +@pytest.mark.buildconfigspec('net') | |
525 | +def test_fpga_secure_bit_img_auth_kup(u_boot_console): | |
526 | + | |
527 | + test_net.test_net_dhcp(u_boot_console) | |
528 | + test_net.test_net_setup_static(u_boot_console) | |
529 | + | |
530 | + f = u_boot_console.config.env.get('env__fpga_secure_readable_file', None) | |
531 | + if not f: | |
532 | + pytest.skip('No TFTP readable file to read') | |
533 | + | |
534 | + keyaddr = f.get('keyaddr', None) | |
535 | + if not keyaddr: | |
536 | + addr = u_boot_utils.find_ram_base(u_boot_console) | |
537 | + expected_tftp = 'Bytes transferred = ' | |
538 | + keyfn = f['keyfn'] | |
539 | + output = u_boot_console.run_command('tftpboot %x %s' % (keyaddr, keyfn)) | |
540 | + assert expected_tftp in output | |
541 | + | |
542 | + addr = f.get('addr', None) | |
543 | + if not addr: | |
544 | + addr = u_boot_utils.find_ram_base(u_boot_console) | |
545 | + expected_tftp = 'Bytes transferred = ' | |
546 | + fn = f['enckupfn'] | |
547 | + output = u_boot_console.run_command('tftpboot %x %s' % (addr, fn)) | |
548 | + assert expected_tftp in output | |
549 | + | |
550 | + expected_zynqmpsecure = 'Bitstream successfully loaded' | |
551 | + output = u_boot_console.run_command('fpga loads 0 %x $filesize 0 1 %x' % (addr, keyaddr)) | |
552 | + assert expected_zynqmpsecure in output |