diff --git a/test/py/tests/test_zynq_aes.py b/test/py/tests/test_zynq_aes.py new file mode 100644 index 0000000000..a5f5187b11 --- /dev/null +++ b/test/py/tests/test_zynq_aes.py @@ -0,0 +1,119 @@ +# Copyright (c) 2018, Xilinx Inc. +# +# Siva Durga Prasad Paladugu +# +# SPDX-License-Identifier: GPL-2.0 + +import pytest +import re +import random +import u_boot_utils + +""" +Note: This test relies on boardenv_* containing configuration values to define +the network available and files to be used for testing. Without this, this test +will be automatically skipped. + +For example: + +# True if a DHCP server is attached to the network, and should be tested. +env__net_dhcp_server = True + +# A list of environment variables that should be set in order to configure a +# static IP. In this test case we atleast need serverip for performing tftpb +# to get required files. +env__net_static_env_vars = [ + ("ipaddr", "10.0.0.100"), + ("netmask", "255.255.255.0"), + ("serverip", "10.0.0.1"), +] + +# Details regarding the files that may be read from a TFTP server. . +env__zynq_aes_readable_file = { + "fn": "zynq_aes_image.bin", + "fnbit": "zynq_aes_bit.bin", + "srcaddr": 0x1000000, + "dstaddr": 0x2000000, + "dstlen": "0x1000000", +} +""" + +import test_net + +def zynq_aes_pre_commands(u_boot_console): + + output = u_boot_console.run_command('print modeboot') + if not "modeboot=" in output: + pytest.skip('bootmode cannnot be determined') + m = re.search('modeboot=(.+?)boot', output) + if not m: + pytest.skip('bootmode cannnot be determined') + bootmode=m.group(1) + if bootmode is "jtag": + pytest.skip('skipping due to jtag bootmode') + +@pytest.mark.buildconfigspec('cmd_zynq_aes') +@pytest.mark.buildconfigspec('cmd_net') +@pytest.mark.buildconfigspec('cmd_dhcp') +@pytest.mark.buildconfigspec('net') +# Can be tested on board xhd-zc702-2 - efuse must be blown +@pytest.mark.xfail +def test_zynq_aes_image(u_boot_console): + + zynq_aes_pre_commands(u_boot_console) + test_net.test_net_dhcp(u_boot_console) + test_net.test_net_setup_static(u_boot_console) + + f = u_boot_console.config.env.get('env__zynq_aes_readable_file', None) + if not f: + pytest.skip('No TFTP readable file to read') + + srcaddr = f.get('srcaddr', None) + if not srcaddr: + addr = u_boot_utils.find_ram_base(u_boot_console) + + expected_tftp = 'Bytes transferred = ' + fn = f['fn'] + output = u_boot_console.run_command('tftpboot %x %s' % (srcaddr, fn)) + assert expected_tftp in output + + dstaddr = f.get('dstaddr', None) + if not dstaddr: + pytest.skip('No dstaddr specified in env file to read') + + dstsize = f.get('dstlen', None) + if not dstsize: + pytest.skip('No dstlen specified in env file to read') + + expected_zynqaes = 'zynqaes [operation type] ' + output = u_boot_console.run_command('zynqaes %x $filesize %x %x' % (srcaddr, dstaddr, dstsize)) + assert expected_zynqaes not in output + +@pytest.mark.buildconfigspec('cmd_zynq_aes') +@pytest.mark.buildconfigspec('cmd_net') +@pytest.mark.buildconfigspec('cmd_dhcp') +@pytest.mark.buildconfigspec('net') +# Can be tested on board xhd-zc702-2 - efuse must be blown +@pytest.mark.xfail +def test_zynq_aes_bitstream(u_boot_console): + + zynq_aes_pre_commands(u_boot_console) + test_net.test_net_dhcp(u_boot_console) + test_net.test_net_setup_static(u_boot_console) + + f = u_boot_console.config.env.get('env__zynq_aes_readable_file', None) + if not f: + pytest.skip('No TFTP readable file to read') + + srcaddr = f.get('srcaddr', None) + if not srcaddr: + addr = u_boot_utils.find_ram_base(u_boot_console) + + expected_tftp = 'Bytes transferred = ' + fn = f['fnbit'] + output = u_boot_console.run_command('tftpboot %x %s' % (srcaddr, fn)) + assert expected_tftp in output + + expected_zynqaes = 'zynqaes [operation type] ' + output = u_boot_console.run_command('zynqaes load %x $filesize' % (srcaddr)) + assert expected_zynqaes not in output