-# Copyright (c) 2010-2013, 2016, 2019 ARM Limited
+# Copyright (c) 2010-2013, 2016, 2019-2020 ARM Limited
+# Copyright (c) 2020 Barkhausen Institut
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Ali Saidi
-# Brad Beckmann
from __future__ import print_function
from __future__ import absolute_import
from common.Benchmarks import *
from common import Simulation
from common import CacheConfig
-from common import MemConfig
from common import CpuConfig
-from common import BPConfig
+from common import MemConfig
+from common import ObjectList
from common.Caches import *
from common import Options
def build_test_system(np):
cmdline = cmd_line_template()
- if buildEnv['TARGET_ISA'] == "alpha":
- test_sys = makeLinuxAlphaSystem(test_mem_mode, bm[0], options.ruby,
- cmdline=cmdline)
- elif buildEnv['TARGET_ISA'] == "mips":
+ if buildEnv['TARGET_ISA'] == "mips":
test_sys = makeLinuxMipsSystem(test_mem_mode, bm[0], cmdline=cmdline)
elif buildEnv['TARGET_ISA'] == "sparc":
test_sys = makeSparcSystem(test_mem_mode, bm[0], cmdline=cmdline)
+ elif buildEnv['TARGET_ISA'] == "riscv":
+ test_sys = makeBareMetalRiscvSystem(test_mem_mode, bm[0],
+ cmdline=cmdline)
elif buildEnv['TARGET_ISA'] == "x86":
test_sys = makeLinuxX86System(test_mem_mode, np, bm[0], options.ruby,
cmdline=cmdline)
elif buildEnv['TARGET_ISA'] == "arm":
- test_sys = makeArmSystem(test_mem_mode, options.machine_type, np,
- bm[0], options.dtb_filename,
- bare_metal=options.bare_metal,
- cmdline=cmdline,
- external_memory=
- options.external_memory_system,
- ruby=options.ruby,
- security=options.enable_security_extensions)
+ test_sys = makeArmSystem(
+ test_mem_mode,
+ options.machine_type,
+ np,
+ bm[0],
+ options.dtb_filename,
+ bare_metal=options.bare_metal,
+ cmdline=cmdline,
+ external_memory=options.external_memory_system,
+ ruby=options.ruby,
+ security=options.enable_security_extensions,
+ vio_9p=options.vio_9p,
+ bootloader=options.bootloader,
+ )
if options.enable_context_switch_stats_dump:
test_sys.enable_context_switch_stats_dump = True
else:
voltage_domain =
test_sys.cpu_voltage_domain)
- if options.kernel is not None:
- test_sys.kernel = binary(options.kernel)
- else:
- print("Error: a kernel must be provided to run in full system mode")
- sys.exit(1)
+ if buildEnv['TARGET_ISA'] == 'riscv':
+ test_sys.workload.bootloader = options.kernel
+ elif options.kernel is not None:
+ test_sys.workload.object_file = binary(options.kernel)
if options.script is not None:
test_sys.readfile = options.script
test_sys.cpu = [TestCPUClass(clk_domain=test_sys.cpu_clk_domain, cpu_id=i)
for i in range(np)]
- if CpuConfig.is_kvm_cpu(TestCPUClass) or CpuConfig.is_kvm_cpu(FutureClass):
+ if ObjectList.is_kvm_cpu(TestCPUClass) or \
+ ObjectList.is_kvm_cpu(FutureClass):
test_sys.kvm_vm = KvmVM()
if options.ruby:
- bootmem = getattr(test_sys, 'bootmem', None)
+ bootmem = getattr(test_sys, '_bootmem', None)
Ruby.create_system(options, True, test_sys, test_sys.iobus,
test_sys._dma_ports, bootmem)
# Sanity check
if options.simpoint_profile:
- if not CpuConfig.is_noncaching_cpu(TestCPUClass):
+ if not ObjectList.is_noncaching_cpu(TestCPUClass):
fatal("SimPoint generation should be done with atomic cpu")
if np > 1:
fatal("SimPoint generation not supported with more than one CPUs")
test_sys.cpu[i].addSimPointProbe(options.simpoint_interval)
if options.checker:
test_sys.cpu[i].addCheckerCpu()
- if options.bp_type:
- bpClass = BPConfig.get(options.bp_type)
- test_sys.cpu[i].branchPred = bpClass()
- if options.indirect_bp_type:
- IndirectBPClass = \
- BPConfig.get_indirect(options.indirect_bp_type)
- test_sys.cpu[i].branchPred.indirectBranchPred = \
- IndirectBPClass()
+ if not ObjectList.is_kvm_cpu(TestCPUClass):
+ if options.bp_type:
+ bpClass = ObjectList.bp_list.get(options.bp_type)
+ test_sys.cpu[i].branchPred = bpClass()
+ if options.indirect_bp_type:
+ IndirectBPClass = ObjectList.indirect_bp_list.get(
+ options.indirect_bp_type)
+ test_sys.cpu[i].branchPred.indirectBranchPred = \
+ IndirectBPClass()
test_sys.cpu[i].createThreads()
# If elastic tracing is enabled when not restoring from checkpoint and
DriveMemClass = SimpleMemory
cmdline = cmd_line_template()
- if buildEnv['TARGET_ISA'] == 'alpha':
- drive_sys = makeLinuxAlphaSystem(drive_mem_mode, bm[1],
- cmdline=cmdline)
- elif buildEnv['TARGET_ISA'] == 'mips':
+ if buildEnv['TARGET_ISA'] == 'mips':
drive_sys = makeLinuxMipsSystem(drive_mem_mode, bm[1], cmdline=cmdline)
elif buildEnv['TARGET_ISA'] == 'sparc':
drive_sys = makeSparcSystem(drive_mem_mode, bm[1], cmdline=cmdline)
drive_sys.cpu.createInterruptController()
drive_sys.cpu.connectAllPorts(drive_sys.membus)
if options.kernel is not None:
- drive_sys.kernel = binary(options.kernel)
- else:
- print("Error: a kernel must be provided to run in full system mode")
- sys.exit(1)
+ drive_sys.workload.object_file = binary(options.kernel)
- if CpuConfig.is_kvm_cpu(DriveCPUClass):
+ if ObjectList.is_kvm_cpu(DriveCPUClass):
drive_sys.kvm_vm = KvmVM()
drive_sys.iobridge = Bridge(delay='50ns',
sys.exit(1)
else:
if options.dual:
- bm = [SysConfig(disk=options.disk_image, rootdev=options.root_device,
+ bm = [SysConfig(disks=options.disk_image, rootdev=options.root_device,
mem=options.mem_size, os_type=options.os_type),
- SysConfig(disk=options.disk_image, rootdev=options.root_device,
+ SysConfig(disks=options.disk_image, rootdev=options.root_device,
mem=options.mem_size, os_type=options.os_type)]
else:
- bm = [SysConfig(disk=options.disk_image, rootdev=options.root_device,
+ bm = [SysConfig(disks=options.disk_image, rootdev=options.root_device,
mem=options.mem_size, os_type=options.os_type)]
np = options.num_cpus
if buildEnv['TARGET_ISA'] == "arm" and not options.bare_metal \
and not options.dtb_filename:
- if options.machine_type not in ["VExpress_GEM5", "VExpress_GEM5_V1"]:
- warn("Can only correctly generate a dtb for VExpress_GEM5_V1 " \
+ if options.machine_type not in ["VExpress_GEM5",
+ "VExpress_GEM5_V1",
+ "VExpress_GEM5_V2",
+ "VExpress_GEM5_Foundation"]:
+ warn("Can only correctly generate a dtb for VExpress_GEM5_* " \
"platforms, unless custom hardware models have been equipped "\
"with generation functionality.")
for sysname in ('system', 'testsys', 'drivesys'):
if hasattr(root, sysname):
sys = getattr(root, sysname)
- sys.generateDtb(m5.options.outdir, '%s.dtb' % sysname)
+ sys.workload.dtb_filename = \
+ os.path.join(m5.options.outdir, '%s.dtb' % sysname)
+ sys.generateDtb(sys.workload.dtb_filename)
Simulation.setWorkCountOptions(test_sys, options)
Simulation.run(options, root, test_sys, FutureClass)