From 3d494d763d1be011a30333f8036d718c4070ef25 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Wed, 14 Aug 2019 11:35:51 +0100 Subject: [PATCH] dev: Enable DTB IOMMU binding with a DMA object 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 Reviewed-by: Ciro Santilli Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20839 Maintainer: Andreas Sandberg Tested-by: kokoro --- src/dev/Device.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/dev/Device.py b/src/dev/Device.py index 0023f97a2..493089524 100644 --- a/src/dev/Device.py +++ b/src/dev/Device.py @@ -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' -- 2.30.2