diff options
author | Tushar Khandelwal <tushar.khandelwal@arm.com> | 2019-08-16 12:31:35 +0100 |
---|---|---|
committer | Tushar Khandelwal <tushar.khandelwal@arm.com> | 2019-08-30 21:09:20 +0100 |
commit | bf5ae23fd40e01a5bbbfc646252b25f70e97a900 (patch) | |
tree | 695ba54045109639a84d40b792e0384ac4f3edc2 /scripts/platforms | |
parent | 9a9bf078ffcbf3c83285621790f2c84badc25129 (diff) |
add support for cortex a5 designstartCA5-DESIGNSTART-2019.09.16
Change-Id: Ib12eaba14b54b4e0d71c82de8476169499d07901
Signed-off-by: Tushar Khandelwal <tushar.khandelwal@arm.com>
Diffstat (limited to 'scripts/platforms')
-rw-r--r-- | scripts/platforms/a5ds/a5ds_fvp.py | 122 | ||||
-rw-r--r-- | scripts/platforms/a5ds/a5ds_testrunner.py | 56 |
2 files changed, 178 insertions, 0 deletions
diff --git a/scripts/platforms/a5ds/a5ds_fvp.py b/scripts/platforms/a5ds/a5ds_fvp.py new file mode 100644 index 0000000..6f6fbab --- /dev/null +++ b/scripts/platforms/a5ds/a5ds_fvp.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python2.7 +# Python 2.7 is <required> for fm.debug + +__copyright__ = """ +Copyright (c) 2019, Arm Limited and Contributors. All rights reserved. + +SPDX-License-Identifier: BSD-3-Clause +""" + +import sys +import os +a5ds_dir = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(os.path.join((a5ds_dir),'..','..', 'test')) +from fvp_wrapper import FVPWrapper, TelnetWatcher + +""" a5ds_fvp.py +This file contains the a5ds FVP subclass of the generic FVP wrapper class. +Upon instantiation, telnet watchers are created for each UART exposed by the +FVP, and - using the provided test specification - watchers are set up with their +respective stop and verification conditions. +""" + + +"""a5dsDefaultConfig +default a5ds configuration parameters. +Note that these are fully platform dependant, and are only specified in the +following map to provide a clear overview of what the configuration constants +of this script are. +""" +a5dsDefaultConfig = { + # =============== FVP Parameters =============== + # Stop condition + "stop_cnd" : "/OSCI/SystemC: Simulation stopped by user", + + # Flash loaders + "board_flashloader" : "board.flashloader1.fname", + "board_ROMloader" : "board.flashloader0.fname", + # UART logs + "host_uart0" : "css.uart_0.out_file", + + # Telnet parameters + "telnet_host" : 'localhost', + "host_telnet_port0" : 5000, + + # =============== Test parameters ============== + "linux_login_prompt" : "a5ds login:", + "linux_user" : "root", + "linux_shstring" : "root@a5ds:~# " +} + + +""" a5dsDefaultTestspec +Test-specification parameters for a5ds. +Note that this is fully platform-dependant, and only used during the +initialization of a5dsFVP. +""" +a5dsDefaultTestspec = { + "name" : None, # Test name + "commands" : [], # Commands to execute on Host + "board_flash" : None, # Board flash image + "host_stop_str" : None, # Stop condition string for Host + "host_ver_strs" : [], # Verification strings for Host +} + +class A5dsFVP(FVPWrapper): + def __init__(self, testspec, fvp_path, image_dir, usermode, fvp_timeout, stdin): + FVPWrapper.__init__( + self, + fvp_path=fvp_path, + fvp_name="A5ds", + usermode=usermode, + work_dir=a5ds_dir, + fvp_timeout=fvp_timeout, + testname=testspec['name'], + stdin=stdin + ) + + self.config = a5dsDefaultConfig + self.testspec = self.parseTestspec(testspec) + self.image_dir = image_dir + + # Define watchers for each terminal + # Host terminal 0 watcher + host0_watcher = TelnetWatcher( + name="host0", + termfile=os.path.join(self.work_dir, self.log_dir, self.testspec['name'] + "_host0.txt"), + stop_str=self.testspec['host_stop_str'], + fvp_uart=self.config['host_uart0'], + port=self.config['host_telnet_port0'], + sys_stop_str=self.config['stop_cnd'], + verification_strs=self.testspec['host_ver_strs'] + ) + # We define an initial command sequence for host0 which will login + # and await until a user can enter commands + host0_watcher.addCommand('r', self.config['linux_login_prompt']) + host0_watcher.addCommand('w', self.config['linux_user']) + host0_watcher.addCommand('r', self.config['linux_shstring']) + # Once the host is logged in, we add the user-provided test commands + for commandtype, command in self.testspec['commands']: + host0_watcher.addCommand(commandtype, command) + self.watchers.append(host0_watcher) + + + def getModelParameters(self): + # Assign images to FVP flashloaders + fvp_params = {} + fvp_params[self.config['board_flashloader']] = os.path.join(self.image_dir, "iota-tiny-image-a5ds.wic") + fvp_params[self.config['board_ROMloader']] = os.path.join(self.image_dir, "bl1.bin") + print(fvp_params) + return fvp_params + + def parseTestspec(self, testspec): + """ Function for parsing a test-specification in line with the arguments + made available by a5dsDefaultTestspec + """ + if 'name' not in testspec or 'commands' not in testspec: + sys.exit(1) + + # Merge user-specified arguments with default test specification + defaultTestspec = a5dsDefaultTestspec + defaultTestspec.update(testspec) + return defaultTestspec diff --git a/scripts/platforms/a5ds/a5ds_testrunner.py b/scripts/platforms/a5ds/a5ds_testrunner.py new file mode 100644 index 0000000..d728ebc --- /dev/null +++ b/scripts/platforms/a5ds/a5ds_testrunner.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python2.7 + +__copyright__ = """ +Copyright (c) 2019, Arm Limited and Contributors. All rights reserved. + +SPDX-License-Identifier: BSD-3-Clause +""" + +import sys +import os +sys.path.append(os.path.join((os.path.dirname(os.path.realpath(__file__))),'..','..','test')) +from testrunner import TestRunner +from a5ds_fvp import A5dsFVP + +class A5dsTestRunner(TestRunner): + def __init__(self): + TestRunner.__init__( + self, A5dsFVP + ) + + def setSpecializationArguments(self): + # a5ds_fvp requires an image_dir argument for its constructor + # to be able to locate various binaries. Add this as a command-line + # argument + self.parser.add_argument("--image_dir", type=str, + help="Directory containing the a5ds images") + + def parseSpecializationArguments(self, args): + def tryParseStringArg(arg, argstring): + if arg is None: + print("Argument {0} was not specified, but required. exiting...".format(argstring)) + sys.exit(1) + return arg + + # Set the arguments required for constructing an a5dsFVP object + # NOTE: the 'key' in FVPWrapperArgs is identical to the named argument + # 'image_dir' in the a5dsFVP constructor. This is important, given that + # the FVP Subclass is instantiated by the named arguments present in + # FVPWrapperArgs via kwargs expansion. + self.FVPWrapperArgs['image_dir'] = tryParseStringArg(args.image_dir, "--image_dir") + # The remainder of the arguments for a5dsFVP construction will be + # provided by the TestRunner base class + + def registerTestSpecifications(self): + self.registerTest({ + 'name' : "boot_test", + 'description' : "Test A5 Boot", + 'commands' : [ + ('w', "uname -srmn"), + ], + 'host_ver_strs' : ["Linux a5ds 5.2.0 armv7l"], + 'host_stop_str' : "Linux a5ds 5.2.0 armv7l" + }) + +if __name__ == "__main__": + A5dsTestRunner() |