ce48cdd7c0c861a2aa7e9cf7f9059e468a313397
[gem5.git] / configs / example / arm / workloads.py
1 # Copyright (c) 2020 ARM Limited
2 # All rights reserved.
3 #
4 # The license below extends only to copyright in the software and shall
5 # not be construed as granting a license to any other intellectual
6 # property including but not limited to intellectual property relating
7 # to a hardware implementation of the functionality of the software
8 # licensed hereunder. You may use the software subject to the license
9 # terms below provided that you ensure that this notice is replicated
10 # unmodified and in its entirety in all distributions of the software,
11 # modified or unmodified, in source code or in binary form.
12 #
13 # Redistribution and use in source and binary forms, with or without
14 # modification, are permitted provided that the following conditions are
15 # met: redistributions of source code must retain the above copyright
16 # notice, this list of conditions and the following disclaimer;
17 # redistributions in binary form must reproduce the above copyright
18 # notice, this list of conditions and the following disclaimer in the
19 # documentation and/or other materials provided with the distribution;
20 # neither the name of the copyright holders nor the names of its
21 # contributors may be used to endorse or promote products derived from
22 # this software without specific prior written permission.
23 #
24 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 #
36
37 from __future__ import print_function
38 from __future__ import absolute_import
39
40 import inspect
41 import m5
42 from m5.objects import *
43 from m5.options import *
44
45 from common.ObjectList import ObjectList
46 from common.SysPaths import binary, disk
47
48 class ArmBaremetal(ArmFsWorkload):
49 """ Baremetal workload """
50 dtb_addr = 0
51
52 def __init__(self, obj, system, **kwargs):
53 super(ArmBaremetal, self).__init__(**kwargs)
54
55 self.object_file = obj
56
57 class ArmTrustedFirmware(ArmFsWorkload):
58 """
59 Arm Trusted Firmware (TFA) workload.
60
61 It models the firmware design described at:
62
63 https://trustedfirmware-a.readthedocs.io/en/latest/design/firmware-design.html
64
65 The Workload is expecting to find a set of firmare images under
66 the M5_PATH/binaries path. Those images are:
67 * bl1.bin (BL1 = Stage 1 Bootloader)
68 * fip.bin (FIP = Firmware Image Package):
69 BL2, BL31, BL33 binaries compiled under a singe package
70
71 These are the results of the compilation of Arm Trusted Firmware.
72 https://github.com/ARM-software/arm-trusted-firmware
73
74 """
75 dtb_addr = 0
76
77 def __init__(self, obj, system, **kwargs):
78 super(ArmTrustedFirmware, self).__init__(**kwargs)
79
80 self.extras = [ binary('bl1.bin'), binary('fip.bin'), ]
81 self.extras_addrs = [
82 system.realview.bootmem.range.start,
83 system.realview.flash0.range.start
84 ]
85
86 # Arm Trusted Firmware will provide a PSCI implementation
87 system._have_psci = True
88
89 class _WorkloadList(ObjectList):
90 def _add_objects(self):
91 """Add all sub-classes of the base class in the object hierarchy."""
92 modname = sys.modules[__name__]
93 for name, cls in inspect.getmembers(modname, self._is_obj_class):
94 self._sub_classes[name] = cls
95
96 workload_list = _WorkloadList(getattr(m5.objects, 'ArmFsWorkload', None))