summaryrefslogtreecommitdiff
path: root/src/cpu/testers/traffic_gen/base.cc
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2018-07-20 11:23:49 +0100
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2018-08-24 13:47:35 +0000
commitf741bb7cdbdd6c2526be40fe1e03a705364ddf8d (patch)
tree601725878dea62a50c2769f27d6cd5eb46b1b829 /src/cpu/testers/traffic_gen/base.cc
parent2b3168021cb0ceed8e90045435181bb82eed0c12 (diff)
downloadgem5-f741bb7cdbdd6c2526be40fe1e03a705364ddf8d.tar.xz
cpu: Stream/SubstreamID support in TrafficGen
This patch is adding support for generating memory requests which set the StreamID/SubstreamID field, so that is possible to emulate devices attached to an external IOMMU/SMMU with a Traffic generator. Change-Id: Iea068de581ae7125a9d49314124a08c045c75b49 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/12188
Diffstat (limited to 'src/cpu/testers/traffic_gen/base.cc')
-rw-r--r--src/cpu/testers/traffic_gen/base.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/cpu/testers/traffic_gen/base.cc b/src/cpu/testers/traffic_gen/base.cc
index 6778e417b..ad4f67d9d 100644
--- a/src/cpu/testers/traffic_gen/base.cc
+++ b/src/cpu/testers/traffic_gen/base.cc
@@ -52,6 +52,7 @@
#include "cpu/testers/traffic_gen/idle_gen.hh"
#include "cpu/testers/traffic_gen/linear_gen.hh"
#include "cpu/testers/traffic_gen/random_gen.hh"
+#include "cpu/testers/traffic_gen/stream_gen.hh"
#include "debug/Checkpoint.hh"
#include "debug/TrafficGen.hh"
#include "params/BaseTrafficGen.hh"
@@ -78,7 +79,12 @@ BaseTrafficGen::BaseTrafficGen(const BaseTrafficGenParams* p)
retryPkt(NULL),
retryPktTick(0),
updateEvent([this]{ update(); }, name()),
- masterID(system->getMasterId(this))
+ masterID(system->getMasterId(this)),
+ streamGenerator(StreamGen::create(p))
+{
+}
+
+BaseTrafficGen::~BaseTrafficGen()
{
}
@@ -172,6 +178,19 @@ BaseTrafficGen::update()
// get the next packet and try to send it
PacketPtr pkt = activeGenerator->getNextPacket();
+ // If generating stream/substream IDs are enabled,
+ // try to pick and assign them to the new packet
+ if (streamGenerator) {
+ auto sid = streamGenerator->pickStreamID();
+ auto ssid = streamGenerator->pickSubStreamID();
+
+ pkt->req->setStreamId(sid);
+
+ if (streamGenerator->ssidValid()) {
+ pkt->req->setSubStreamId(ssid);
+ }
+ }
+
// suppress packets that are not destined for a memory, such as
// device accesses that could be part of a trace
if (pkt && system->isMemAddr(pkt->getAddr())) {