summaryrefslogtreecommitdiff
path: root/src/dev/Device.py
diff options
context:
space:
mode:
authorGlenn Bergmans <glenn.bergmans@arm.com>2015-12-17 11:49:51 +0000
committerCurtis Dunham <curtis.dunham@arm.com>2018-01-29 22:22:23 +0000
commit199ff5e67770592ee9cbb941db8e8ea740dc1084 (patch)
tree59151aaee4f78a8f275fc5eeb830878beb29afde /src/dev/Device.py
parent1a51f335ffbcf9abb685ae18daa8d00aecc6bee8 (diff)
downloadgem5-199ff5e67770592ee9cbb941db8e8ea740dc1084.tar.xz
arm: DT autogeneration - autogenerate RealView Platform devices
Implements the Device Tree generating code for devices required by the RealView VExpress_GEM5_V1 platform Change-Id: I14244b2f3c028cbddba3c23ce7433fe3b301a0e8 Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5965 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/dev/Device.py')
-rw-r--r--src/dev/Device.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/dev/Device.py b/src/dev/Device.py
index d51d7bd8d..e4656078d 100644
--- a/src/dev/Device.py
+++ b/src/dev/Device.py
@@ -1,3 +1,15 @@
+# Copyright (c) 2012-2016 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder. You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
# Copyright (c) 2005-2007 The Regents of The University of Michigan
# All rights reserved.
#
@@ -25,9 +37,11 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Authors: Nathan Binkert
+# Glenn Bergmans
from m5.params import *
from m5.proxy import *
+from m5.util.fdthelper import *
from MemObject import MemObject
class PioDevice(MemObject):
@@ -37,6 +51,25 @@ class PioDevice(MemObject):
pio = SlavePort("Programmed I/O port")
system = Param.System(Parent.any, "System this device is part of")
+ def generateBasicPioDeviceNode(self, state, name, pio_addr,
+ size, interrupts = None):
+ node = FdtNode("%s@%x" % (name, long(pio_addr)))
+ node.append(FdtPropertyWords("reg",
+ state.addrCells(pio_addr) +
+ state.sizeCells(size) ))
+
+ if interrupts:
+ if any([i < 32 for i in interrupts]):
+ raise(("Interrupt number smaller than 32 "+
+ " in PioDevice %s") % name)
+
+ # subtracting 32 because Linux assumes that SPIs start at 0, while
+ # gem5 uses the internal GIC numbering (SPIs start at 32)
+ node.append(FdtPropertyWords("interrupts", sum(
+ [[0, i - 32, 4] for i in interrupts], []) ))
+
+ return node
+
class BasicPioDevice(PioDevice):
type = 'BasicPioDevice'
cxx_header = "dev/io_device.hh"