dev: StreamID generation in DMA device

This patch is adding a StreamID tag to any DMA Packet. StreamIDs are
tags which are used by IOMMUs to distinguish between different
devices/functions.

For PCI devices for example, the RID (Pci Bus number, Pci Device
number, Pci Function number) could be stored in the Packet streamID
field.

For the DmaDevice base class, a simple pair of (Sub)StreamIDs has been
provided.  This is basically attaching a fixed (decided at python config
time) streamID per device.  If a derived device wants to implement a
more elaborate packet tagger (for example if it wants to have more than
one streamID), it needs to pass a different StreamID and SubstreamID to
the DmaPort interface (like dmaAction).

Change-Id: Ia17cf00437f7d3eb79211c1374134b174f90de59
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/16749
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Giacomo Travaglini
2019-01-28 12:37:51 +00:00
parent 6af360ec8c
commit b6d60e82dd
3 changed files with 58 additions and 13 deletions

View File

@@ -84,6 +84,13 @@ class DmaDevice(PioDevice):
abstract = True
dma = MasterPort("DMA port")
sid = Param.Unsigned(0,
"Stream identifier used by an IOMMU to distinguish amongst "
"several devices attached to it")
ssid = Param.Unsigned(0,
"Substream identifier used by an IOMMU to distinguish amongst "
"several devices attached to it")
class IsaFake(BasicPioDevice):
type = 'IsaFake'