dev: Enable DTB IOMMU binding with a DMA object
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Wed, 14 Aug 2019 10:35:51 +0000 (11:35 +0100)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Fri, 13 Sep 2019 08:14:24 +0000 (08:14 +0000)
This happens by storing a iommu reference in the dma device, and by
calling the addIommuProperty method once doing dtb autogeneration for
the device

Change-Id: Ibd585addac686a9eeaba6959f459d81901087549
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20839
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/dev/Device.py

index 0023f97a2ddfc9a279aebd553e02f6ee291f3157..4930895244c37f671a26fbd9ef0595facfc94ca8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2012-2016 ARM Limited
+# Copyright (c) 2012-2016,2019 ARM Limited
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -84,6 +84,8 @@ class DmaDevice(PioDevice):
     abstract = True
     dma = MasterPort("DMA port")
 
+    _iommu = None
+
     sid = Param.Unsigned(0,
         "Stream identifier used by an IOMMU to distinguish amongst "
         "several devices attached to it")
@@ -91,6 +93,17 @@ class DmaDevice(PioDevice):
         "Substream identifier used by an IOMMU to distinguish amongst "
         "several devices attached to it")
 
+    def addIommuProperty(self, state, node):
+        """
+        This method takes an FdtState and a FdtNode as parameters, and
+        it is appending a "iommus = <>" property in case the DmaDevice
+        is attached to an IOMMU.
+        This method is necessary for autogenerating a binding between
+        a dma device and the iommu.
+        """
+        if self._iommu is not None:
+            node.append(FdtPropertyWords("iommus",
+                [ state.phandle(self._iommu), self.sid ]))
 
 class IsaFake(BasicPioDevice):
     type = 'IsaFake'