test_fpga.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  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_external(u_boot_console):
  286. f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit_external')
  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(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. expected_text = 'FPGA loaded successfully'
  299. output = u_boot_console.run_command('fpga loadmk %x %x:fpga && echo %s' % (dev, addr, expected_text))
  300. assert expected_text in output
  301. @pytest.mark.buildconfigspec('cmd_fpga')
  302. @pytest.mark.buildconfigspec('cmd_fpga_loadmk')
  303. @pytest.mark.buildconfigspec('fit')
  304. @pytest.mark.buildconfigspec('cmd_echo')
  305. def test_fpga_loadmk_fit_variable_fpga(u_boot_console):
  306. f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit')
  307. u_boot_console.run_command('imi %x' % (addr))
  308. # FIXME this should fail - broken support in past
  309. u_boot_console.run_command('setenv fpga %x' % (dev))
  310. expected_text = 'FPGA loaded successfully'
  311. output = u_boot_console.run_command('fpga loadmk %x:fpga && echo %s' % (addr, expected_text))
  312. u_boot_console.run_command('setenv fpga')
  313. assert expected_text in output
  314. @pytest.mark.buildconfigspec('cmd_fpga')
  315. @pytest.mark.buildconfigspec('cmd_fpga_loadmk')
  316. @pytest.mark.buildconfigspec('fit')
  317. @pytest.mark.buildconfigspec('cmd_echo')
  318. def test_fpga_loadmk_fit_variable_fpgadata(u_boot_console):
  319. f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit')
  320. u_boot_console.run_command('imi %x' % (addr))
  321. # FIXME this should fail - broken support in past
  322. u_boot_console.run_command('setenv fpgadata %x:fpga' % (addr))
  323. expected_text = 'FPGA loaded successfully'
  324. output = u_boot_console.run_command('fpga loadmk %x && echo %s' % (dev, expected_text))
  325. u_boot_console.run_command('setenv fpgadata')
  326. assert expected_text in output
  327. @pytest.mark.buildconfigspec('cmd_fpga')
  328. @pytest.mark.buildconfigspec('cmd_fpga_loadmk')
  329. @pytest.mark.buildconfigspec('fit')
  330. @pytest.mark.buildconfigspec('cmd_echo')
  331. def test_fpga_loadmk_fit_variable(u_boot_console):
  332. f, dev, addr, bit, bit_size = load_file_from_var(u_boot_console, 'mkimage_fit')
  333. u_boot_console.run_command('imi %x' % (addr))
  334. u_boot_console.run_command('setenv fpga %x' % (dev))
  335. u_boot_console.run_command('setenv fpgadata %x:fpga' % (addr))
  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. ###### FPGA LOAD tests ######
  342. @pytest.mark.buildconfigspec('cmd_fpga')
  343. def test_fpga_loadfs_fail(u_boot_console):
  344. dev, f = check_dev(u_boot_console)
  345. addr = f.get('addr', -1)
  346. if addr < 0:
  347. pytest.fail('No address specified via env__fpga_under_test')
  348. bit = f['loadfs']
  349. bit_size = f['loadfs_size']
  350. block_size = f['loadfs_block_size']
  351. # less params - dev number removed
  352. expected = 'fpga: incorrect parameters passed'
  353. output = u_boot_console.run_command('fpga loadfs %x %x %x %s' % (addr, bit_size, block_size, bit))
  354. #assert expected in output
  355. assert expected_usage in output
  356. # one more param - 0 at the end
  357. # This is the longest command that's why there is no message from cmd/fpga.c
  358. output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s 0' % (dev, addr, bit_size, block_size, bit))
  359. assert expected_usage in output
  360. # zero address 0
  361. expected = 'fpga: zero fpga_data address'
  362. output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s' % (dev, 0, bit_size, block_size, bit))
  363. #assert expected in output
  364. assert expected_usage in output
  365. # bit_size 0
  366. expected = 'fpga: zero size'
  367. output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s' % (dev, addr, 0, block_size, bit))
  368. #assert expected in output
  369. assert expected_usage in output
  370. # block size 0
  371. # FIXME this should pass but it failing too
  372. output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s' % (dev, addr, bit_size, 0, bit))
  373. assert expected_usage in output
  374. # non existing bitstream name
  375. expected = 'Unable to read file noname'
  376. output = u_boot_console.run_command('fpga loadfs %x %x %x %x mmc 0 noname' % (dev, addr, bit_size, block_size))
  377. assert expected in output
  378. assert expected_usage in output
  379. # -1 dev number
  380. expected = 'fpga_fsload: Invalid device number -1'
  381. output = u_boot_console.run_command('fpga loadfs %d %x %x %x mmc 0 noname' % (-1, addr, bit_size, block_size))
  382. assert expected in output
  383. assert expected_usage in output
  384. @pytest.mark.buildconfigspec('cmd_fpga')
  385. @pytest.mark.buildconfigspec('cmd_echo')
  386. def test_fpga_loadfs(u_boot_console):
  387. dev, f = check_dev(u_boot_console)
  388. addr = f.get('addr', -1)
  389. if addr < 0:
  390. pytest.fail('No address specified via env__fpga_under_test')
  391. bit = f['loadfs']
  392. bit_size = f['loadfs_size']
  393. block_size = f['loadfs_block_size']
  394. # This should be done better
  395. expected_text = 'FPGA loaded successfully'
  396. output = u_boot_console.run_command('fpga loadfs %x %x %x %x %s && echo %s' % (dev, addr, bit_size, block_size, bit, expected_text))
  397. assert expected_text in output
  398. @pytest.mark.buildconfigspec('cmd_fpga')
  399. @pytest.mark.buildconfigspec('cmd_fpga_load_secure')
  400. @pytest.mark.buildconfigspec('cmd_net')
  401. @pytest.mark.buildconfigspec('cmd_dhcp')
  402. @pytest.mark.buildconfigspec('net')
  403. def test_fpga_secure_bit_auth(u_boot_console):
  404. test_net.test_net_dhcp(u_boot_console)
  405. test_net.test_net_setup_static(u_boot_console)
  406. f = u_boot_console.config.env.get('env__fpga_secure_readable_file', None)
  407. if not f:
  408. pytest.skip('No TFTP readable file to read')
  409. addr = f.get('addr', None)
  410. if not addr:
  411. addr = u_boot_utils.find_ram_base(u_boot_console)
  412. expected_tftp = 'Bytes transferred = '
  413. fn = f['fn']
  414. output = u_boot_console.run_command('tftpboot %x %s' % (addr, fn))
  415. assert expected_tftp in output
  416. expected_zynqmpsecure = 'Bitstream successfully loaded'
  417. output = u_boot_console.run_command('fpga loads 0 %x $filesize 0 2' % (addr))
  418. assert expected_zynqmpsecure in output
  419. @pytest.mark.buildconfigspec('cmd_fpga')
  420. @pytest.mark.buildconfigspec('cmd_fpga_load_secure')
  421. @pytest.mark.buildconfigspec('cmd_net')
  422. @pytest.mark.buildconfigspec('cmd_dhcp')
  423. @pytest.mark.buildconfigspec('net')
  424. def test_fpga_secure_bit_img_auth_kup(u_boot_console):
  425. test_net.test_net_dhcp(u_boot_console)
  426. test_net.test_net_setup_static(u_boot_console)
  427. f = u_boot_console.config.env.get('env__fpga_secure_readable_file', None)
  428. if not f:
  429. pytest.skip('No TFTP readable file to read')
  430. keyaddr = f.get('keyaddr', None)
  431. if not keyaddr:
  432. addr = u_boot_utils.find_ram_base(u_boot_console)
  433. expected_tftp = 'Bytes transferred = '
  434. keyfn = f['keyfn']
  435. output = u_boot_console.run_command('tftpboot %x %s' % (keyaddr, keyfn))
  436. assert expected_tftp in output
  437. addr = f.get('addr', None)
  438. if not addr:
  439. addr = u_boot_utils.find_ram_base(u_boot_console)
  440. expected_tftp = 'Bytes transferred = '
  441. fn = f['enckupfn']
  442. output = u_boot_console.run_command('tftpboot %x %s' % (addr, fn))
  443. assert expected_tftp in output
  444. expected_zynqmpsecure = 'Bitstream successfully loaded'
  445. output = u_boot_console.run_command('fpga loads 0 %x $filesize 0 1 %x' % (addr, keyaddr))
  446. assert expected_zynqmpsecure in output