-# Copyright (c) 2012 ARM Limited
+# Copyright (c) 2012, 2017, 2019 ARM Limited
# 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: Andreas Sandberg
from abc import ABCMeta, abstractmethod
import m5
from m5.objects import *
from m5.proxy import *
-m5.util.addToPath('../configs/common')
-import FSConfig
-from Caches import *
+m5.util.addToPath('../configs/')
+from common import FSConfig
+from common.Caches import *
from base_config import *
-from O3_ARM_v7a import *
+from common.cores.arm.O3_ARM_v7a import *
+from common.Benchmarks import SysConfig
+
+from common import SysPaths
class ArmSESystemUniprocessor(BaseSESystemUniprocessor):
"""Syscall-emulation builder for ARM uniprocessor systems.
"""
def __init__(self, **kwargs):
- BaseSESystem.__init__(self, **kwargs)
+ super(ArmSESystemUniprocessor, self).__init__(**kwargs)
def create_caches_private(self, cpu):
# The atomic SE configurations do not use caches
ARM-specific create_system method to a class deriving from one of
the generic base systems.
"""
- def __init__(self, machine_type):
+ def __init__(self, machine_type, aarch64_kernel, **kwargs):
"""
Arguments:
machine_type -- String describing the platform to simulate
+ num_cpus -- integer number of CPUs in the system
+ use_ruby -- True if ruby is used instead of the classic memory system
"""
self.machine_type = machine_type
+ self.num_cpus = kwargs.get('num_cpus', 1)
+ self.mem_size = kwargs.get('mem_size', '256MB')
+ self.use_ruby = kwargs.get('use_ruby', False)
+ self.aarch64_kernel = aarch64_kernel
def create_system(self):
+ if self.aarch64_kernel:
+ gem5_kernel = "vmlinux.arm64"
+ disk_image = "m5_exit.squashfs.arm64"
+ else:
+ gem5_kernel = "vmlinux.arm"
+ disk_image = "m5_exit.squashfs.arm"
+
+ default_kernels = {
+ "VExpress_GEM5_V1": gem5_kernel,
+ }
+
+ sc = SysConfig(None, self.mem_size, [disk_image], "/dev/sda")
system = FSConfig.makeArmSystem(self.mem_mode,
- self.machine_type, None, False)
+ self.machine_type, self.num_cpus,
+ sc, False, ruby=self.use_ruby)
# We typically want the simulator to panic if the kernel
# panics or oopses. This prevents the simulator from running
# an obviously failed test case until the end of time.
- system.panic_on_panic = True
- system.panic_on_oops = True
+ system.workload.panic_on_panic = True
+ system.workload.panic_on_oops = True
+
+ system.workload.object_file = SysPaths.binary(
+ default_kernels[self.machine_type])
self.init_system(system)
+
+ system.workload.dtb_filename = \
+ os.path.join(m5.options.outdir, 'system.dtb')
+ system.generateDtb(system.workload.dtb_filename)
return system
class LinuxArmFSSystem(LinuxArmSystemBuilder,
BaseFSSystem):
"""Basic ARM full system builder."""
- def __init__(self, machine_type='RealView_PBX', **kwargs):
+ def __init__(self,
+ machine_type='VExpress_GEM5_V1',
+ aarch64_kernel=True,
+ **kwargs):
"""Initialize an ARM system that supports full system simulation.
Note: Keyword arguments that are not listed below will be
Keyword Arguments:
machine_type -- String describing the platform to simulate
"""
- BaseSystem.__init__(self, **kwargs)
- LinuxArmSystemBuilder.__init__(self, machine_type)
+ BaseFSSystem.__init__(self, **kwargs)
+ LinuxArmSystemBuilder.__init__(
+ self, machine_type, aarch64_kernel, **kwargs)
def create_caches_private(self, cpu):
# Use the more representative cache configuration
test cases.
"""
- def __init__(self, machine_type='RealView_PBX', **kwargs):
+ def __init__(self,
+ machine_type='VExpress_GEM5_V1',
+ aarch64_kernel=True,
+ **kwargs):
BaseFSSystemUniprocessor.__init__(self, **kwargs)
- LinuxArmSystemBuilder.__init__(self, machine_type)
+ LinuxArmSystemBuilder.__init__(
+ self, machine_type, aarch64_kernel, **kwargs)
class LinuxArmFSSwitcheroo(LinuxArmSystemBuilder, BaseFSSwitcheroo):
"""Uniprocessor ARM system prepared for CPU switching"""
- def __init__(self, machine_type='RealView_PBX', **kwargs):
+ def __init__(self,
+ machine_type='VExpress_GEM5_V1',
+ aarch64_kernel=True,
+ **kwargs):
BaseFSSwitcheroo.__init__(self, **kwargs)
- LinuxArmSystemBuilder.__init__(self, machine_type)
+ LinuxArmSystemBuilder.__init__(
+ self, machine_type, aarch64_kernel, **kwargs)