test_fpga.py 20 KB

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